#
# 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!"
}

