#
# Change password test for MongoDB image.
#
# Always use sourced from a specific container testfile

function ctest_change_password() {
    local name="change_password"

    local database='db'
    local user='user'
    local password='password'
    local admin_password='adminPassword'

    local volume_dir
    volume_dir=`mktemp -d --tmpdir mongodb-testdata.XXXXX`
    chmod a+rwx ${volume_dir}
    ct_path_append volumes_to_clean "$volume_dir"

    CONTAINER_ARGS="
-e MONGODB_DATABASE=${database}
-e MONGODB_USER=${user}
-e MONGODB_PASSWORD=${password}
-e MONGODB_ADMIN_PASSWORD=${admin_password}
-v ${volume_dir}:/var/lib/mongodb/data:z
"
    ct_create_container $name

    # need to set these because `mongo_cmd` relies on global variables
    USER=${user}
    PASS=${password}
    DB=${database}

    # need this to wait for the container to start up
    CONTAINER_IP=$(ct_get_cip ${name})
    test_connection ${name}

    echo "  Testing login"

    assert_login_access ${user} ${password} true
    DB='admin' assert_login_access 'admin' ${admin_password} true

    echo "  Changing passwords"

    docker stop $(ct_get_cid ${name})
    CONTAINER_ARGS="
-e MONGODB_DATABASE=${database}
-e MONGODB_USER=${user}
-e MONGODB_PASSWORD=NEW_${password}
-e MONGODB_ADMIN_PASSWORD=NEW_${admin_password}
-v ${volume_dir}:/var/lib/mongodb/data:z
"
    ct_create_container "${name}_NEW"

    # need to set this because `mongo_cmd` relies on global variables
    PASS="NEW_${password}"

    # need this to wait for the container to start up
    CONTAINER_IP=$(ct_get_cip "${name}_NEW")
    test_connection "${name}_NEW"

    echo "  Testing login with new passwords"

    assert_login_access ${user} "NEW_${password}" true
    assert_login_access ${user} ${password} false

    DB='admin' assert_login_access 'admin' "NEW_${admin_password}" true
    DB='admin' assert_login_access 'admin' ${admin_password} false

    echo "  Success!"
}

