The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/3191
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === This selects a random backend for the second LXD instance used in tests, so that migration tests can be run cross-backend. The LXD2_BACKEND can be specified to select a specific backend. The randomly-chosen backend is always different from LXD_BACKEND.
From 8cd09b02db766b507d6381b121986f4c98d1b6b4 Mon Sep 17 00:00:00 2001 From: Alberto Donato <[email protected]> Date: Wed, 19 Apr 2017 13:03:19 +0200 Subject: [PATCH] Select random storage backend for the second LXD instance in tests. Signed-off-by: Alberto Donato <[email protected]> --- test/README.md | 1 + test/backends/btrfs.sh | 5 --- test/backends/lvm.sh | 4 --- test/backends/zfs.sh | 4 --- test/main.sh | 69 ++++++++++++++++++++++++++++++++--------- test/suites/backup.sh | 2 +- test/suites/basic.sh | 2 +- test/suites/database_update.sh | 2 +- test/suites/fdleak.sh | 2 +- test/suites/init.sh | 8 ++--- test/suites/migration.sh | 17 ++++++---- test/suites/pki.sh | 2 +- test/suites/profiling.sh | 4 +-- test/suites/security.sh | 2 +- test/suites/serverconfig.sh | 2 +- test/suites/storage.sh | 2 +- test/suites/storage_profiles.sh | 2 +- 17 files changed, 82 insertions(+), 48 deletions(-) mode change 100644 => 100755 test/backends/btrfs.sh mode change 100644 => 100755 test/backends/lvm.sh mode change 100644 => 100755 test/backends/zfs.sh mode change 100644 => 100755 test/suites/backup.sh mode change 100644 => 100755 test/suites/basic.sh mode change 100644 => 100755 test/suites/database_update.sh mode change 100644 => 100755 test/suites/fdleak.sh mode change 100644 => 100755 test/suites/init.sh mode change 100644 => 100755 test/suites/migration.sh mode change 100644 => 100755 test/suites/pki.sh mode change 100644 => 100755 test/suites/profiling.sh mode change 100644 => 100755 test/suites/security.sh mode change 100644 => 100755 test/suites/serverconfig.sh mode change 100644 => 100755 test/suites/storage.sh mode change 100644 => 100755 test/suites/storage_profiles.sh diff --git a/test/README.md b/test/README.md index d0357e7..89963bf 100644 --- a/test/README.md +++ b/test/README.md @@ -13,6 +13,7 @@ To run only the integration tests, run from the test directory: Name | Default | Description :-- | :--- | :---------- LXD\_BACKEND | dir | What backend to test against (btrfs, dir, lvm or zfs) +LXD\_BACKEND2 | random | Backend to test against for the second LXD instance (used for migration tests) LXD\_CONCURRENT | 0 | Run concurency tests, very CPU intensive LXD\_DEBUG | 0 | Run lxd, lxc and the shell in debug mode (very verbose) LXD\_INSPECT | 0 | Don't teardown the test environment on failure diff --git a/test/backends/btrfs.sh b/test/backends/btrfs.sh old mode 100644 new mode 100755 index 457dbd1..ffae1cc --- a/test/backends/btrfs.sh +++ b/test/backends/btrfs.sh @@ -7,11 +7,6 @@ btrfs_setup() { LXD_DIR=$1 echo "==> Setting up btrfs backend in ${LXD_DIR}" - - if ! which btrfs >/dev/null 2>&1; then - echo "Couldn't find the btrfs binary"; false - fi - } btrfs_configure() { diff --git a/test/backends/lvm.sh b/test/backends/lvm.sh old mode 100644 new mode 100755 index 81ddf20..4c8ee9f --- a/test/backends/lvm.sh +++ b/test/backends/lvm.sh @@ -7,10 +7,6 @@ lvm_setup() { LXD_DIR=$1 echo "==> Setting up lvm backend in ${LXD_DIR}" - - if ! which lvm >/dev/null 2>&1; then - echo "Couldn't find the lvm binary"; false - fi } lvm_configure() { diff --git a/test/backends/zfs.sh b/test/backends/zfs.sh old mode 100644 new mode 100755 index aa40e22..52bd0a8 --- a/test/backends/zfs.sh +++ b/test/backends/zfs.sh @@ -7,10 +7,6 @@ zfs_setup() { LXD_DIR=$1 echo "==> Setting up ZFS backend in ${LXD_DIR}" - - if ! which zfs >/dev/null 2>&1; then - echo "Couldn't find zfs binary"; false - fi } zfs_configure() { diff --git a/test/main.sh b/test/main.sh index 63564a0..8741e09 100755 --- a/test/main.sh +++ b/test/main.sh @@ -47,15 +47,54 @@ local_tcp_port() { done } -# import all the backends -for backend in backends/*.sh; do - # shellcheck disable=SC1090 - . "${backend}" -done +# return a list of available storage backends +available_storage_backends() { + # shellcheck disable=2039 + local backend backends + + backends="dir" + for backend in btrfs lvm zfs; do + if which $backend >/dev/null 2>&1; then + backends="$backends $backend" + fi + done + echo "$backends" +} + +# whether a storage backend is available +storage_backend_available() { + # shellcheck disable=2039 + local backends + backends="$(available_storage_backends)" + [ "${backends#*$1}" != "$backends" ] +} + +# choose a random available backend, excluding LXD_BACKEND +random_backend() { + # shellcheck disable=2046 + shuf -e $(available_storage_backends | sed "s/\b$LXD_BACKEND\b//") | head -n 1 +} if [ -z "${LXD_BACKEND:-}" ]; then LXD_BACKEND=dir fi +# a second storage backend for cross-backend tests +if [ -z "${LXD2_BACKEND:-}" ]; then + LXD2_BACKEND="$(random_backend)" +fi + +echo "==> Available storage backends: $(available_storage_backends | sort)" +if ! storage_backend_available "$LXD_BACKEND"; then + echo "Storage backage \"$LXD_BACKEND\" is not available" + exit 1 +fi + +# import storage backends +for backend in $(available_storage_backends); do + # shellcheck disable=SC1090 + . "backends/${backend}.sh" +done + spawn_lxd() { set +x @@ -63,12 +102,12 @@ spawn_lxd() { # overwrites the environment and we would lose LXD_DIR's value otherwise. # shellcheck disable=2039 - local LXD_DIR + local LXD_DIR lxddir lxd_backend lxddir=${1} shift - storage=${1} + lxd_backend=${1:-none} shift # Copy pre generated Certs @@ -76,7 +115,8 @@ spawn_lxd() { cp deps/server.key "${lxddir}" # setup storage - "$LXD_BACKEND"_setup "${lxddir}" + "$lxd_backend"_setup "${lxddir}" + echo "$lxd_backend" > "${lxddir}/lxd.backend" echo "==> Spawning lxd in ${lxddir}" # shellcheck disable=SC2086 @@ -112,9 +152,9 @@ spawn_lxd() { LXD_DIR="${lxddir}" lxc network attach-profile lxdbr0 default eth0 fi - if [ "${storage}" = true ]; then + if [ "${lxd_backend}" != "none" ]; then echo "==> Configuring storage backend" - "$LXD_BACKEND"_configure "${lxddir}" + "$lxd_backend"_configure "${lxddir}" fi } @@ -241,12 +281,13 @@ kill_lxd() { # overwrites the environment and we would lose LXD_DIR's value otherwise. # shellcheck disable=2039 - local LXD_DIR + local LXD_DIR daemon_dir daemon_pid check_leftovers lxd_backend daemon_dir=${1} LXD_DIR=${daemon_dir} daemon_pid=$(cat "${daemon_dir}/lxd.pid") check_leftovers="false" + lxd_backend=$(cat "${daemon_dir}/lxd.backend") echo "==> Killing LXD at ${daemon_dir}" if [ -e "${daemon_dir}/unix.socket" ]; then @@ -339,7 +380,7 @@ kill_lxd() { fi # teardown storage - "$LXD_BACKEND"_teardown "${daemon_dir}" + "$lxd_backend"_teardown "${daemon_dir}" # Wipe the daemon directory wipe "${daemon_dir}" @@ -517,14 +558,14 @@ export LXD_CONF LXD_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) export LXD_DIR chmod +x "${LXD_DIR}" -spawn_lxd "${LXD_DIR}" true +spawn_lxd "${LXD_DIR}" "$LXD_BACKEND" LXD_ADDR=$(cat "${LXD_DIR}/lxd.addr") export LXD_ADDR # Setup the second LXD LXD2_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD2_DIR}" -spawn_lxd "${LXD2_DIR}" true +spawn_lxd "${LXD2_DIR}" "$LXD2_BACKEND" LXD2_ADDR=$(cat "${LXD2_DIR}/lxd.addr") export LXD2_ADDR diff --git a/test/suites/backup.sh b/test/suites/backup.sh old mode 100644 new mode 100755 index 0f3bd33..8c3fdfa --- a/test/suites/backup.sh +++ b/test/suites/backup.sh @@ -5,7 +5,7 @@ test_container_import() { LXD_IMPORT_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD_IMPORT_DIR}" - spawn_lxd "${LXD_IMPORT_DIR}" true + spawn_lxd "${LXD_IMPORT_DIR}" "$LXD_BACKEND" ( lxc init testimage ctImport lxc snapshot ctImport diff --git a/test/suites/basic.sh b/test/suites/basic.sh old mode 100644 new mode 100755 index e3c89ee..b9b06e2 --- a/test/suites/basic.sh +++ b/test/suites/basic.sh @@ -218,7 +218,7 @@ test_basic_usage() { # Test activateifneeded/shutdown LXD_ACTIVATION_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD_ACTIVATION_DIR}" - spawn_lxd "${LXD_ACTIVATION_DIR}" true + spawn_lxd "${LXD_ACTIVATION_DIR}" "$LXD_BACKEND" ( set -e # shellcheck disable=SC2030 diff --git a/test/suites/database_update.sh b/test/suites/database_update.sh old mode 100644 new mode 100755 index 018492a..aa8ca5c --- a/test/suites/database_update.sh +++ b/test/suites/database_update.sh @@ -8,7 +8,7 @@ test_database_update(){ sqlite3 "${MIGRATE_DB}" > /dev/null < deps/schema1.sql # Start an LXD demon in the tmp directory. This should start the updates. - spawn_lxd "${LXD_MIGRATE_DIR}" true + spawn_lxd "${LXD_MIGRATE_DIR}" "$LXD_BACKEND" # Assert there are enough tables. expected_tables=23 diff --git a/test/suites/fdleak.sh b/test/suites/fdleak.sh old mode 100644 new mode 100755 index 78c518f..24d3e3c --- a/test/suites/fdleak.sh +++ b/test/suites/fdleak.sh @@ -3,7 +3,7 @@ test_fdleak() { LXD_FDLEAK_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD_FDLEAK_DIR}" - spawn_lxd "${LXD_FDLEAK_DIR}" true + spawn_lxd "${LXD_FDLEAK_DIR}" "$LXD_BACKEND" pid=$(cat "${LXD_FDLEAK_DIR}/lxd.pid") beforefds=$(/bin/ls "/proc/${pid}/fd" | wc -l) diff --git a/test/suites/init.sh b/test/suites/init.sh old mode 100644 new mode 100755 index 1e06b9a..8ba65c9 --- a/test/suites/init.sh +++ b/test/suites/init.sh @@ -12,7 +12,7 @@ test_lxd_autoinit() { # lxd init --auto --storage-backend zfs --storage-pool <name> LXD_INIT_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD_INIT_DIR}" - spawn_lxd "${LXD_INIT_DIR}" false + spawn_lxd "${LXD_INIT_DIR}" none configure_loop_device loop_file_1 loop_device_1 # shellcheck disable=SC2154 @@ -25,7 +25,7 @@ test_lxd_autoinit() { # lxd init --auto --storage-backend zfs --storage-pool <name>/<non-existing-dataset> LXD_INIT_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD_INIT_DIR}" - spawn_lxd "${LXD_INIT_DIR}" false + spawn_lxd "${LXD_INIT_DIR}" none # shellcheck disable=SC2154 configure_loop_device loop_file_1 loop_device_1 @@ -37,7 +37,7 @@ test_lxd_autoinit() { # lxd init --auto --storage-backend zfs --storage-pool <name>/<existing-dataset> LXD_INIT_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD_INIT_DIR}" - spawn_lxd "${LXD_INIT_DIR}" false + spawn_lxd "${LXD_INIT_DIR}" none zfs create -p -o mountpoint=none "lxdtest-$(basename "${LXD_DIR}")-pool1-existing-pool/existing-dataset" LXD_DIR=${LXD_INIT_DIR} lxd init --auto --storage-backend zfs --storage-pool "lxdtest-$(basename "${LXD_DIR}")-pool1-existing-pool/existing-dataset" @@ -49,7 +49,7 @@ test_lxd_autoinit() { # lxd init --storage-backend zfs --storage-create-loop 1 --storage-pool <name> --auto LXD_INIT_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD_INIT_DIR}" - spawn_lxd "${LXD_INIT_DIR}" false + spawn_lxd "${LXD_INIT_DIR}" none ZFS_POOL="lxdtest-$(basename "${LXD_DIR}")-init" LXD_DIR=${LXD_INIT_DIR} lxd init --storage-backend zfs --storage-create-loop 1 --storage-pool "${ZFS_POOL}" --auto diff --git a/test/suites/migration.sh b/test/suites/migration.sh old mode 100644 new mode 100755 index bb4041f..150a968 --- a/test/suites/migration.sh +++ b/test/suites/migration.sh @@ -15,19 +15,24 @@ test_migration() { if [ "${LXD_BACKEND}" = "lvm" ]; then # Test that non-thinpool lvm backends work fine with migration. - lxc_remote storage create l1:"lxdtest-$(basename "${LXD_DIR}")-non-thinpool-lvm-migration" lvm lvm.use_thinpool=false volume.size=25MB - lxc_remote profile device set l1:default root pool "lxdtest-$(basename "${LXD_DIR}")-non-thinpool-lvm-migration" - lxc_remote storage create l2:"lxdtest-$(basename "${LXD2_DIR}")-non-thinpool-lvm-migration" lvm lvm.use_thinpool=false volume.size=25MB - lxc_remote profile device set l2:default root pool "lxdtest-$(basename "${LXD2_DIR}")-non-thinpool-lvm-migration" + # shellcheck disable=2039 + local storage_pool1 storage_pool2 + storage_pool1="lxdtest-$(baasename "${LXD_DIR}")-non-thinpool-lvm-migration" + storage_pool2="lxdtest-$(basename "${LXD2_DIR}")-non-thinpool-lvm-migration" + lxc_remote storage create l1:"$storage_pool1" lvm lvm.use_thinpool=false volume.size=25MB + lxc_remote profile device set l1:default root pool "$storage_pool1" + + lxc_remote storage create l2:"$storage_pool2" lvm lvm.use_thinpool=false volume.size=25MB + lxc_remote profile device set l2:default root pool "$storage_pool2" migration lxc_remote profile device set l1:default root pool "lxdtest-$(basename "${LXD_DIR}")" lxc_remote profile device set l2:default root pool "lxdtest-$(basename "${LXD2_DIR}")" - lxc_remote storage delete l1:"lxdtest-$(basename "${LXD_DIR}")-non-thinpool-lvm-migration" - lxc_remote storage delete l2:"lxdtest-$(basename "${LXD2_DIR}")-non-thinpool-lvm-migration" + lxc_remote storage delete l1:"$storage_pool1" + lxc_remote storage delete l2:"$storage_pool2" fi } diff --git a/test/suites/pki.sh b/test/suites/pki.sh old mode 100644 new mode 100755 index aad7ee0..2276567 --- a/test/suites/pki.sh +++ b/test/suites/pki.sh @@ -26,7 +26,7 @@ test_pki() { cat "${TEST_DIR}/pki/keys/127.0.0.1.crt" "${TEST_DIR}/pki/keys/ca.crt" > "${LXD5_DIR}/server.crt" cp "${TEST_DIR}/pki/keys/127.0.0.1.key" "${LXD5_DIR}/server.key" cp "${TEST_DIR}/pki/keys/ca.crt" "${LXD5_DIR}/server.ca" - spawn_lxd "${LXD5_DIR}" true + spawn_lxd "${LXD5_DIR}" "$LXD_BACKEND" LXD5_ADDR=$(cat "${LXD5_DIR}/lxd.addr") # Setup the client diff --git a/test/suites/profiling.sh b/test/suites/profiling.sh old mode 100644 new mode 100755 index c9ee794..8d8c96e --- a/test/suites/profiling.sh +++ b/test/suites/profiling.sh @@ -3,7 +3,7 @@ test_cpu_profiling() { LXD3_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD3_DIR}" - spawn_lxd "${LXD3_DIR}" false --cpuprofile "${LXD3_DIR}/cpu.out" + spawn_lxd "${LXD3_DIR}" none --cpuprofile "${LXD3_DIR}/cpu.out" lxdpid=$(cat "${LXD3_DIR}/lxd.pid") kill -TERM "${lxdpid}" wait "${lxdpid}" || true @@ -21,7 +21,7 @@ test_cpu_profiling() { test_mem_profiling() { LXD4_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD4_DIR}" - spawn_lxd "${LXD4_DIR}" false --memprofile "${LXD4_DIR}/mem" + spawn_lxd "${LXD4_DIR}" none --memprofile "${LXD4_DIR}/mem" lxdpid=$(cat "${LXD4_DIR}/lxd.pid") if [ -e "${LXD4_DIR}/mem" ]; then diff --git a/test/suites/security.sh b/test/suites/security.sh old mode 100644 new mode 100755 index 3483b56..240f739 --- a/test/suites/security.sh +++ b/test/suites/security.sh @@ -8,7 +8,7 @@ test_security() { if [ "${LXD_BACKEND}" = "zfs" ]; then LXD_INIT_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) chmod +x "${LXD_INIT_DIR}" - spawn_lxd "${LXD_INIT_DIR}" false + spawn_lxd "${LXD_INIT_DIR}" none ZFS_POOL="lxdtest-$(basename "${LXD_DIR}")-init" LXD_DIR=${LXD_INIT_DIR} lxd init --storage-backend zfs --storage-create-loop 1 --storage-pool "${ZFS_POOL}" --auto diff --git a/test/suites/serverconfig.sh b/test/suites/serverconfig.sh old mode 100644 new mode 100755 index 8a75e78..7453cac --- a/test/suites/serverconfig.sh +++ b/test/suites/serverconfig.sh @@ -2,7 +2,7 @@ test_server_config() { LXD_SERVERCONFIG_DIR=$(mktemp -d -p "${TEST_DIR}" XXX) - spawn_lxd "${LXD_SERVERCONFIG_DIR}" true + spawn_lxd "${LXD_SERVERCONFIG_DIR}" "$LXD_BACKEND" lxc config set core.trust_password 123456 diff --git a/test/suites/storage.sh b/test/suites/storage.sh old mode 100644 new mode 100755 index 3ddcc72..198b47d --- a/test/suites/storage.sh +++ b/test/suites/storage.sh @@ -5,7 +5,7 @@ test_storage() { LXD_STORAGE_DIR=$(mktemp -d -p "${TEST_DIR}" XXXXXXXXX) chmod +x "${LXD_STORAGE_DIR}" - spawn_lxd "${LXD_STORAGE_DIR}" false + spawn_lxd "${LXD_STORAGE_DIR}" none ( set -e # shellcheck disable=2030 diff --git a/test/suites/storage_profiles.sh b/test/suites/storage_profiles.sh old mode 100644 new mode 100755 index 9631b80..83939f1 --- a/test/suites/storage_profiles.sh +++ b/test/suites/storage_profiles.sh @@ -5,7 +5,7 @@ test_storage_profiles() { LXD_STORAGE_DIR=$(mktemp -d -p "${TEST_DIR}" XXXXXXXXX) chmod +x "${LXD_STORAGE_DIR}" - spawn_lxd "${LXD_STORAGE_DIR}" false + spawn_lxd "${LXD_STORAGE_DIR}" none ( set -e # shellcheck disable=2030
_______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
