|
1 | | -# echo "===> Test load command" |
2 | | -# docker run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=password postgres:$POSTGRES_VERSION > /dev/null |
3 | | -# sleep 5 |
4 | | -# docker run -t -i --name ${TEST_NAME}-create1 --link postgres $TEST_CONTAINER create-user-db foo |
5 | | -# docker run -t -i --name ${TEST_NAME}-save --link postgres -e DUMP_DIR="/srv" -v /srv:/srv $TEST_CONTAINER save |
6 | | -# docker run -t -i --name ${TEST_NAME}-delete --link postgres $TEST_CONTAINER delete-user-db foo |
7 | | -# docker run -t -i --name ${TEST_NAME}-create2 --link postgres $TEST_CONTAINER create-user-db foo |
8 | | -# docker run -t -i --name ${TEST_NAME}-load --link postgres -e DUMP_DIR="/srv" -v /srv:/srv $TEST_CONTAINER load foo |
9 | | -# cleanup postgres ${TEST_NAME}-create1 ${TEST_NAME}-save ${TEST_NAME}-delete ${TEST_NAME}-load ${TEST_NAME}-create2 |
| 1 | +load test_functions.bash |
| 2 | + |
| 3 | +# Generate a sql dump for testing load function |
| 4 | +generate_testing_dump() { |
| 5 | + postgres_container="$(docker run -d -e POSTGRES_PASSWORD=password postgres:${POSTGRES_TARGET_VERSION})" |
| 6 | + postgres_container_ip="$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${postgres_container})" |
| 7 | + docker run --rm -e DATABASE_HOST=${postgres_container_ip} \ |
| 8 | + -e DATABASE_USERNAME=postgres \ |
| 9 | + -e DATABASE_PASSWORD=password \ |
| 10 | + ${TOOLBOX_IMAGE} bash -c '. /panubo-functions.sh; wait_postgres ${DATABASE_HOST}' |
| 11 | + |
| 12 | + docker run --rm \ |
| 13 | + -e DATABASE_HOST=${postgres_container_ip} \ |
| 14 | + -e DATABASE_USERNAME=postgres \ |
| 15 | + -e DATABASE_PASSWORD=password \ |
| 16 | + "${TOOLBOX_IMAGE}" create-user-db mydb |
| 17 | + |
| 18 | + docker exec "${postgres_container}" pgbench -U postgres -i -s 5 mydb |
| 19 | + |
| 20 | + # The dump will be saved to this volume and used later |
| 21 | + export working_volume="$(docker volume create)" |
| 22 | + |
| 23 | + docker run --rm \ |
| 24 | + -e DATABASE_HOST=${postgres_container_ip} \ |
| 25 | + -e DATABASE_USERNAME=postgres \ |
| 26 | + -e DATABASE_PASSWORD=password \ |
| 27 | + -v "${working_volume}:/db-dumps" \ |
| 28 | + "${TOOLBOX_IMAGE}" save --format custom /db-dumps |
| 29 | + |
| 30 | + docker rm -f "${postgres_container}" |
| 31 | +} |
| 32 | + |
| 33 | +setup_file() { |
| 34 | + generate_testing_dump |
| 35 | + |
| 36 | + export postgres_container="$(docker run -d -e POSTGRES_PASSWORD=password postgres:${POSTGRES_TARGET_VERSION})" |
| 37 | + export postgres_container_ip="$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${postgres_container})" |
| 38 | + docker run --rm -e DATABASE_HOST=${postgres_container_ip} \ |
| 39 | + -e DATABASE_USERNAME=postgres \ |
| 40 | + -e DATABASE_PASSWORD=password \ |
| 41 | + ${TOOLBOX_IMAGE} bash -c '. /panubo-functions.sh; wait_postgres ${DATABASE_HOST}' |
| 42 | + |
| 43 | + docker run --rm \ |
| 44 | + -e DATABASE_HOST=${postgres_container_ip} \ |
| 45 | + -e DATABASE_USERNAME=postgres \ |
| 46 | + -e DATABASE_PASSWORD=password \ |
| 47 | + "${TOOLBOX_IMAGE}" create-user-db mydb |
| 48 | +} |
| 49 | + |
| 50 | +teardown_file() { |
| 51 | + # teardown runs after each test |
| 52 | + docker rm -f "${postgres_container}" |
| 53 | + docker volume rm "${working_volume}" |
| 54 | +} |
| 55 | + |
| 56 | +@test "load from disk" { |
| 57 | + run docker run --rm \ |
| 58 | + -e DATABASE_HOST=${postgres_container_ip} \ |
| 59 | + -e DATABASE_USERNAME=postgres \ |
| 60 | + -e DATABASE_PASSWORD=password \ |
| 61 | + -v "${working_volume}:/db-dumps" \ |
| 62 | + "${TOOLBOX_IMAGE}" bash -c 'echo "*:5432:*:${DATABASE_USERNAME}:${DATABASE_PASSWORD}" > ${HOME}/.pgpass; \ |
| 63 | + chmod 600 ${HOME}/.pgpass; \ |
| 64 | + gunzip < /db-dumps/*/mydb.dump.gz | pg_restore --host "${DATABASE_HOST}" --username "${DATABASE_USERNAME}" --role mydb --dbname=mydb --no-acl --no-owner' |
| 65 | + diag "${output}" |
| 66 | + [[ "${status}" -eq 0 ]] |
| 67 | + |
| 68 | + run docker run --rm \ |
| 69 | + -e DATABASE_HOST=${postgres_container_ip} \ |
| 70 | + -e DATABASE_USERNAME=postgres \ |
| 71 | + -e DATABASE_PASSWORD=password \ |
| 72 | + "${TOOLBOX_IMAGE}" psql -- -c 'SELECT pg_database_size('"'mydb'"');' |
| 73 | + diag "${output}" |
| 74 | + [[ "${status}" -eq 0 ]] |
| 75 | + |
| 76 | + # we expect the dump to be larger than 80MiB |
| 77 | + [[ "${lines[-2]}" -gt "83886080" ]] |
| 78 | +} |
0 commit comments