143 lines
4.4 KiB
Text
143 lines
4.4 KiB
Text
#
|
|
# Library of shared functions for MongoDB image tests.
|
|
#
|
|
# Always use sourced from a specific container testfile
|
|
|
|
test -n "${IMAGE_NAME-}" || false 'make sure $IMAGE_NAME is defined'
|
|
test -n "${VERSION-}" || false 'make sure $VERSION is defined'
|
|
|
|
# get_version_number [version_string]
|
|
# --------------------
|
|
# Extracts the version number from provided version string.
|
|
# e.g. 3.0upg => 3.0
|
|
function get_version_number() {
|
|
echo $1 | sed -e 's/^\([0-9.]*\).*/\1/'
|
|
}
|
|
|
|
function mongo_cmd() {
|
|
docker run --rm ${CONTAINER_ARGS:-} $IMAGE_NAME mongo ${shell_args:-} $CONTAINER_IP/$DB -u "$USER" -p"$PASS" --eval "${@}"
|
|
}
|
|
|
|
function mongo_admin_cmd() {
|
|
docker run --rm ${CONTAINER_ARGS:-} $IMAGE_NAME mongo ${shell_args:-} $CONTAINER_IP/admin -u admin -p"$ADMIN_PASS" --eval "${@}"
|
|
}
|
|
|
|
function test_connection() {
|
|
local name=$1 ; shift
|
|
CONTAINER_IP=$(ct_get_cip $name)
|
|
echo " Testing MongoDB connection to $CONTAINER_IP..."
|
|
local max_attempts=20
|
|
local sleep_time=2
|
|
for i in $(seq $max_attempts); do
|
|
echo " Trying to connect..."
|
|
set +e
|
|
mongo_cmd "db.getSiblingDB('test_database');"
|
|
status=$?
|
|
set -e
|
|
if [ $status -eq 0 ]; then
|
|
echo " Success!"
|
|
return 0
|
|
fi
|
|
sleep $sleep_time
|
|
done
|
|
echo " Giving up: Failed to connect. Logs:"
|
|
docker logs $(ct_get_cid $name)
|
|
return 1
|
|
}
|
|
|
|
function test_config_option() {
|
|
local env_var=$1 ; shift
|
|
local env_val=$1 ; shift
|
|
local config_part=$1 ; shift
|
|
|
|
local name="configuration_${env_var}"
|
|
|
|
# If $value is a string, it needs to be in simple quotes ''.
|
|
CONTAINER_ARGS="
|
|
-e MONGODB_DATABASE=db
|
|
-e MONGODB_USER=user
|
|
-e MONGODB_PASSWORD=password
|
|
-e MONGODB_ADMIN_PASSWORD=adminPassword
|
|
-e $env_var=${env_val}
|
|
"
|
|
ct_create_container $name
|
|
|
|
# need to set these because `mongo_cmd` relies on global variables
|
|
USER=user
|
|
PASS=password
|
|
DB=db
|
|
|
|
test_connection ${name}
|
|
|
|
# If nothing is found, grep returns 1 and test fails.
|
|
docker exec $(ct_get_cid $name) bash -c "cat /etc/mongod.conf" | grep -q "${config_part}"
|
|
|
|
docker stop $(ct_get_cid ${name})
|
|
}
|
|
|
|
function assert_login_access() {
|
|
local USER=$1 ; shift
|
|
local PASS=$1 ; shift
|
|
local success=$1 ; shift
|
|
|
|
if mongo_cmd 'db.version()' ; then
|
|
if $success ; then
|
|
echo " $USER($PASS) access granted as expected"
|
|
return
|
|
fi
|
|
else
|
|
if ! $success ; then
|
|
echo " $USER($PASS) access denied as expected"
|
|
return
|
|
fi
|
|
fi
|
|
echo " $USER($PASS) login assertion failed"
|
|
exit 1
|
|
}
|
|
|
|
function test_general() {
|
|
local name=$1 ; shift
|
|
CONTAINER_ARGS="-e MONGODB_USER=$USER -e MONGODB_PASSWORD=$PASS -e MONGODB_DATABASE=$DB"
|
|
if [ -v ADMIN_PASS ]; then
|
|
CONTAINER_ARGS="$CONTAINER_ARGS -e MONGODB_ADMIN_PASSWORD=$ADMIN_PASS"
|
|
fi
|
|
ct_create_container $name
|
|
CONTAINER_IP=$(ct_get_cip $name)
|
|
test_connection $name
|
|
echo " Testing scl usage"
|
|
ct_scl_usage_old $name 'mongo --version' $(get_version_number $VERSION)
|
|
test_mongo $name
|
|
}
|
|
|
|
function _s2i_test_image() {
|
|
local name="$1"
|
|
local mount_opts="$2"
|
|
echo " Testing s2i app image environment variable checking"
|
|
ct_assert_container_creation_fails $mount_opts -e MONGODB_USER=user -e MONGODB_PASSWORD=password -e MONGODB_DATABASE=db -e MONGODB_ADMIN_PASSWORD=adminPass
|
|
ct_assert_container_creation_fails $mount_opts -e MONGODB_USER=user -e MONGODB_PASSWORD=password -e MONGODB_DATABASE=db -e MONGODB_ADMIN_PASSWORD=adminPass -e MONGODB_BACKUP_USER=backup -e MONGODB_BACKUP_PASSWORD=pass || [ $? -eq 1 ]
|
|
|
|
echo " Testing s2i app image with correct configuration"
|
|
|
|
CONTAINER_ARGS="
|
|
-e MONGODB_ADMIN_PASSWORD=adminPass
|
|
-e MONGODB_USER=user
|
|
-e MONGODB_PASSWORD=password
|
|
-e MONGODB_DATABASE=db
|
|
-e MONGODB_BACKUP_USER=backup
|
|
-e MONGODB_BACKUP_PASSWORD=bPass
|
|
$mount_opts
|
|
"
|
|
ct_create_container $name
|
|
CONTAINER_IP=$(ct_get_cip ${name})
|
|
ADMIN_PASS=adminPass
|
|
|
|
echo " Testing s2i app image backup user"
|
|
DB=admin USER=backup PASS=bPass test_connection "${name}"
|
|
|
|
echo " Testing s2i app image mongodb-cfg/mongod.conf"
|
|
mongo_admin_cmd "if (db.serverCmdLineOpts()['parsed']['replication']['oplogSizeMB'] == 128){quit(0)}; quit(1)"
|
|
|
|
echo " Testing s2i app image reading initial data"
|
|
mongo_admin_cmd "if (db.getSiblingDB('db').constants.count({subject: \"s2i build example\"}) == 1){quit(0)}; quit(1)"
|
|
}
|
|
|