mongodb/test/ctest_local_replication
2018-10-26 13:00:12 +01:00

67 lines
3 KiB
Text

#
# Local replication test for MongoDB image.
#
# Always use sourced from a specific container testfile
function ctest_local_replication() {
function print_logs() {
for file in $CID_FILE_DIR/replset*; do
echo "INFO: printing logs for CID file ${file}"
docker logs $(cat ${file})
done
}
trap print_logs ERR
echo "Testing replication on local docker"
#Initializing replicaset
cat > variables <<EOF
MONGODB_DATABASE=db
MONGODB_USER=user
MONGODB_PASSWORD=password
MONGODB_ADMIN_PASSWORD=adminPassword
MONGODB_REPLICA_NAME=rs0
MONGODB_KEYFILE_VALUE=xxxxxxxxxxxx
MONGODB_SMALLFILES=true
MONGODB_SERVICE_NAME=mongodb
EOF
source variables
local network_name="mongodb-replset-$$"
docker network create ${network_name}
docker run -d --cidfile $CID_FILE_DIR/replset0 --name=replset-0 --hostname=replset-0 --network ${network_name} --network-alias mongodb --env-file=variables $IMAGE_NAME run-mongod-replication
docker exec replset-0 bash -c "while ! [ -f /tmp/initialized ]; do sleep 1; done"
docker run -d --cidfile $CID_FILE_DIR/replset1 --name=replset-1 --hostname=replset-1 --network ${network_name} --network-alias mongodb --env-file=variables $IMAGE_NAME run-mongod-replication
docker exec replset-1 bash -c "while ! [ -f /tmp/initialized ]; do sleep 1; done"
docker run -d --cidfile $CID_FILE_DIR/replset2 --name=replset-2 --hostname=replset-2 --network ${network_name} --network-alias mongodb --env-file=variables $IMAGE_NAME run-mongod-replication
docker exec replset-2 bash -c "while ! [ -f /tmp/initialized ]; do sleep 1; done"
local host="$(docker run --rm --env-file=variables --network ${network_name} ${IMAGE_NAME} bash -c '. /usr/share/container-scripts/mongodb/common.sh && echo $(replset_addr admin)')"
# Storing document into replset and wait replication to finish ...
docker run --rm --env-file=variables --network ${network_name} ${IMAGE_NAME} bash -c "set -e
. /usr/share/container-scripts/mongodb/common.sh
. /usr/share/container-scripts/mongodb/test-functions.sh
wait_for_mongo_up '${host}'
wait_replicaset_members '${host}' 3
insert_and_wait_for_replication '${host}' '{a:5, b:10}'"
# Adding new container
docker run -d --cidfile $CID_FILE_DIR/replset3 --name=replset-3 --hostname=replset-3 --network ${network_name} --network-alias mongodb --env-file=variables $IMAGE_NAME run-mongod-replication
docker exec replset-3 bash -c "while ! [ -f /tmp/initialized ]; do sleep 1; done"
# Storing document into replset and wait replication to finish ...
docker run --rm --env-file=variables --network ${network_name} ${IMAGE_NAME} bash -c "set -e
. /usr/share/container-scripts/mongodb/common.sh
. /usr/share/container-scripts/mongodb/test-functions.sh
wait_for_mongo_up '${host}'
wait_replicaset_members '${host}' 4
insert_and_wait_for_replication '${host}' '{a:5, b:10}'"
rm variables
trap ERR
echo " Success!"
}