67 lines
3 KiB
Text
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!"
|
|
}
|
|
|