diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-07-06 22:28:37 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2022-07-07 23:52:08 -0400 |
commit | f0f07641db06cc9e864db6aa7c2c5ae5b87195a8 (patch) | |
tree | f51592d2514d9d5420f6186ebdf73c34eb6d8f5f | |
parent | 51e977fcbcc8c32af5c3741c53c265ed91d1040d (diff) |
Rework ktest -> test interface
This is the start of making .ktest tests programs that are executed
directly, instead of having them sourced and invoked by ktest.
- Kill require-lib
- list_tests, run_test, run_tests are now normal library functions,
instead of using code injection
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
62 files changed, 670 insertions, 607 deletions
@@ -1,6 +1,6 @@ #!/bin/bash -require-lib tests/prelude.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/tests/test-libs.sh config-mem 2G config-scratch-devs 4G diff --git a/lib/common.sh b/lib/common.sh new file mode 100644 index 0000000..1318a27 --- /dev/null +++ b/lib/common.sh @@ -0,0 +1,49 @@ + +log_verbose() +{ + if [[ $ktest_verbose != 0 ]]; then + echo "$@" + fi +} + +run_quiet() +{ + local msg=$1 + shift + + if [[ $ktest_verbose = 0 ]]; then + if [[ -n $msg ]]; then + echo -n "$msg... " + fi + + get_tmpdir + local out="$ktest_tmp/out-$msg" + + set +e + (set -e; "$@") > "$out" 2>&1 + local ret=$? + set -e + + if [[ $ret != 0 ]]; then + echo + cat "$out" + exit 1 + fi + + if [[ -n $msg ]]; then + echo done + fi + else + if [[ -n $msg ]]; then + echo "$msg:" + fi + "$@" + fi +} + +join_by() +{ + local IFS="$1" + shift + echo "$*" +} diff --git a/lib/libktest.sh b/lib/libktest.sh index 0e5aae7..99bccc1 100644 --- a/lib/libktest.sh +++ b/lib/libktest.sh @@ -266,6 +266,14 @@ save_env() rm -rf "$ktest_out/vm/env_tmp" } +get_unused_port() +{ + comm -23 --nocheck-order \ + <(seq 10000 65535) \ + <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep '[0-9]\{1,5\}' | sort -n | uniq) \ + | shuf | head -n1 +} + start_vm() { make -C "$ktest_dir/lib" qemu-wrapper diff --git a/lib/parse-test.sh b/lib/parse-test.sh index ce8c1dc..c1f374a 100644 --- a/lib/parse-test.sh +++ b/lib/parse-test.sh @@ -1,168 +1,9 @@ parse_test_deps() { - ktest_cpus=$(nproc) - ktest_mem="" - ktest_timeout="" - ktest_kernel_append=() - ktest_images=() - ktest_scratch_devs=() - ktest_make_install=() - ktest_kernel_config_require=() - ktest_qemu_append=() ktest_basename=$(basename -s .ktest "$ktest_test") - local NEXT_SCRATCH_DEV="b" - local TESTPROG=$1 - local BUILD_ON_HOST="" - - require-lib() - { - local req="$1" - - pushd "$(dirname "$req")" > /dev/null - . $(basename "$req") - popd > /dev/null - } - - require-git() - { - local req="$1" - local dir=$(basename $req) - dir=${dir%%.git} - - if [[ $# -ge 2 ]]; then - dir=$2 - fi - - if [[ ! -d $dir ]]; then - git clone $req $dir - fi - } - - do-build-deb() - { - local path=$(readlink -e "$1") - local name=$(basename $path) - - get_tmpdir - - make -C "$path" - - cp -drl $path $ktest_tmp - pushd "$ktest_tmp/$name" > /dev/null - - # make -nc actually work: - rm -f debian/*.debhelper.log - - debuild --no-lintian -b -i -I -us -uc -nc - popd > /dev/null - } - - # $1 is a source repository, which will be built (with make) and then turned - # into a dpkg - require-build-deb() - { - local req=$1 - - if ! [[ -d $req ]]; then - echo "build-deb dependency $req not found" - exit 1 - fi - - checkdep debuild devscripts - - run_quiet "building $(basename $req)" do-build-deb $req - } - - require-make() - { - if [[ ! -d "$1" ]]; then - echo "require-make: $1 not found" - exit 1 - fi - - local req=$(readlink -e "$1") - - ktest_make_install+=("$req") - - if [[ -n $BUILD_ON_HOST ]]; then - run_quiet "building $1" make -C "$req" - fi - } - - require-kernel-config() - { - local OLDIFS=$IFS - IFS=',' - - for i in $1; do - ktest_kernel_config_require+=("$i") - done - - IFS=$OLDIFS - } - - require-qemu-append() - { - local OLDIFS=$IFS - IFS=',' - - for i in $1; do - ktest_kernel_config_require+=("$i") - done - - IFS=$OLDIFS - } - - require-kernel-append() - { - ktest_kernel_append+=($1) - } - - config-scratch-devs() - { - ktest_scratch_devs+=("$1") - } - - config-pmem-devs() - { - ktest_pmem_devs+=("$1") - } - - config-image() - { - ktest_images+=("$1") - } - - config-cpus() - { - ktest_cpus=$1 - } - - config-mem() - { - ktest_mem=$1 - } - - config-timeout() - { - n=$1 - if [ "${EXTENDED_DEBUG:-0}" == 1 ]; then - n=$((n * 2)) - fi - ktest_timeout=$n - } - - config-arch() - { - parse_arch "$1" - checkdep_arch - } - - pushd "$(dirname "$TESTPROG")" > /dev/null - . $(basename "$TESTPROG") - popd > /dev/null + eval $("$ktest_test" deps) if [ -z "$ktest_mem" ]; then echo "test must specify config-mem" @@ -173,89 +14,7 @@ parse_test_deps() ktest_timeout=6000 fi - # may be overridden by test: - if [[ $(type -t run_test) != function ]]; then - run_test() - { - local test=test_$1 - - if [[ $(type -t $test) != function ]]; then - echo "test $1 does not exist" - exit 1 - fi - - $test - } - fi - - # may be overridden by test: - if [[ $(type -t run_tests) != function ]]; then - run_tests() - { - local tests_passed=() - local tests_failed=() - - echo - echo "Running tests $@" - echo - - for i in $@; do - echo "========= TEST $i" - echo - - local start=$(date '+%s') - local ret=0 - (set -e; run_test $i) - ret=$? - local finish=$(date '+%s') - - pkill -P $$ >/dev/null || true - - # XXX: check dmesg for warnings, oopses, slab corruption, etc. before - # signaling success - - echo - - if [[ $ret = 0 ]]; then - echo "========= PASSED $i in $(($finish - $start))s" - tests_passed+=($i) - else - echo "========= FAILED $i in $(($finish - $start))s" - tests_failed+=($i) - - # Try to clean up after a failed test so we can run the rest of - # the tests - unless failfast is enabled, or there was only one - # test to run: - - $ktest_failfast && break - [[ $# = 1 ]] && break - - for mnt in $(awk '{print $2}' /proc/mounts|grep ^/mnt|sort -r); do - while [[ -n $(fuser -k -M -m $mnt) ]]; do - sleep 1 - done - umount $mnt - done - fi - done - - echo - echo "Passed: ${tests_passed[@]}" - echo "Failed: ${tests_failed[@]}" - - return ${#tests_failed[@]} - } - fi - - # may be overridden by test: - if [[ $(type -t list_tests) != function ]]; then - list_tests() - { - declare -F|sed -ne '/ test_/ s/.*test_// p' - } - fi - - ktest_tests=$(list_tests) + ktest_tests=$("$ktest_test" list-tests) if [[ -z $ktest_tests ]]; then echo "No tests found" diff --git a/lib/testrunner b/lib/testrunner index 7797a8f..251f943 100755 --- a/lib/testrunner +++ b/lib/testrunner @@ -169,21 +169,6 @@ if [[ $ktest_tests = "none" ]]; then exit 0 fi -# For now, timeouts/watchdogs are only handled in lib/qemu-wrapper.c: - -#if [[ $ktest_exit_on_success = 0 && $ktest_interactive = 0 ]]; then -# ( -# sleep $ktest_timeout -# echo "TEST TIMEOUT - triggering crash" -# echo c > /proc/sysrq-trigger -# ) & -#fi - -set_watchdog() -{ - echo WATCHDOG $1 -} - trap 'pkill -P $$ >/dev/null' EXIT cd /root @@ -191,7 +176,7 @@ set +e ret=0 iterations=0 while [[ $ret = 0 ]]; do - run_tests $ktest_tests + /host/$ktest_test run-tests $ktest_tests ret=$? pkill -P $$ >/dev/null || true [[ $ret != 0 ]] && break diff --git a/lib/util.sh b/lib/util.sh index c894304..5d6c17d 100644 --- a/lib/util.sh +++ b/lib/util.sh @@ -1,4 +1,6 @@ +. "$ktest_dir/lib/common.sh" + ktest_no_cleanup_tmpdir="" ktest_tmp=${ktest_tmp:-""} @@ -163,60 +165,3 @@ parse_arch() # CROSS_COMPILE=1 # fi } - -join_by() -{ - local IFS="$1" - shift - echo "$*" -} - -log_verbose() -{ - if [[ $ktest_verbose != 0 ]]; then - echo "$@" - fi -} - -run_quiet() -{ - local msg=$1 - shift - - if [[ $ktest_verbose = 0 ]]; then - if [[ -n $msg ]]; then - echo -n "$msg... " - fi - - get_tmpdir - local out="$ktest_tmp/out-$msg" - - set +e - (set -e; "$@") > "$out" 2>&1 - local ret=$? - set -e - - if [[ $ret != 0 ]]; then - echo - cat "$out" - exit 1 - fi - - if [[ -n $msg ]]; then - echo done - fi - else - if [[ -n $msg ]]; then - echo "$msg:" - fi - "$@" - fi -} - -get_unused_port() -{ - comm -23 --nocheck-order \ - <(seq 10000 65535) \ - <(ss -tan | awk '{print $4}' | cut -d':' -f2 | grep '[0-9]\{1,5\}' | sort -n | uniq) \ - | shuf | head -n1 -} diff --git a/tests/aio/aio b/tests/aio/aio index a05cb55..0ebd19e 100755 --- a/tests/aio/aio +++ b/tests/aio/aio @@ -1,6 +1,6 @@ #!/bin/bash -require-lib ../prelude.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/../test-libs.sh config-timeout 60 config-mem 512M diff --git a/tests/bcache/32bit.ktest b/tests/bcache/32bit.ktest index af9d185..2fbcebb 100644..100755 --- a/tests/bcache/32bit.ktest +++ b/tests/bcache/32bit.ktest @@ -4,7 +4,7 @@ # going to be able to run much with this kernel - this is really just for # checking if it builds -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh require-kernel-config 64BIT=n diff --git a/tests/bcache/backingdev.ktest b/tests/bcache/backingdev.ktest index cd8e040..e9c30af 100644..100755 --- a/tests/bcache/backingdev.ktest +++ b/tests/bcache/backingdev.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-backing 2G,2G diff --git a/tests/bcache/backingdev_detach.ktest b/tests/bcache/backingdev_detach.ktest index 47352eb..5e84126 100644..100755 --- a/tests/bcache/backingdev_detach.ktest +++ b/tests/bcache/backingdev_detach.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-backing 2G,2G diff --git a/tests/bcache/backingdev_reboot_fio.ktest b/tests/bcache/backingdev_reboot_fio.ktest index 07c743d..5b112d3 100644..100755 --- a/tests/bcache/backingdev_reboot_fio.ktest +++ b/tests/bcache/backingdev_reboot_fio.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-backing 2G @@ -8,4 +8,4 @@ config-bucket-size 32k config-block-size 4k config-writeback -require-lib reboot-fio.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/reboot-fio.sh diff --git a/tests/bcache/backingdev_reboot_fs.ktest b/tests/bcache/backingdev_reboot_fs.ktest index 94e7938..24dcd45 100644..100755 --- a/tests/bcache/backingdev_reboot_fs.ktest +++ b/tests/bcache/backingdev_reboot_fs.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 2G config-backing 4G @@ -8,4 +8,4 @@ config-bucket-size 32k config-block-size 4k config-writeback -require-lib reboot-fs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/reboot-fs.sh diff --git a/tests/bcache/backingdev_stripes.ktest b/tests/bcache/backingdev_stripes.ktest index ef7ad23..bf835de 100644..100755 --- a/tests/bcache/backingdev_stripes.ktest +++ b/tests/bcache/backingdev_stripes.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh require-kernel-config BLK_DEV_MD,MD_RAID456 diff --git a/tests/bcache/backingdev_unregister.ktest b/tests/bcache/backingdev_unregister.ktest index b6faf88..2d2acbc 100644..100755 --- a/tests/bcache/backingdev_unregister.ktest +++ b/tests/bcache/backingdev_unregister.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-backing 2G,2G diff --git a/tests/bcache/backingdev_verify.ktest b/tests/bcache/backingdev_verify.ktest index 260aeca..c1bbf56 100644..100755 --- a/tests/bcache/backingdev_verify.ktest +++ b/tests/bcache/backingdev_verify.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-backing 512M,512M diff --git a/tests/bcache/backingdev_writearound.ktest b/tests/bcache/backingdev_writearound.ktest index 1555679..0288886 100644..100755 --- a/tests/bcache/backingdev_writearound.ktest +++ b/tests/bcache/backingdev_writearound.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-backing 512M,512M diff --git a/tests/bcache/backingdev_writethrough.ktest b/tests/bcache/backingdev_writethrough.ktest index d11357e..7661061 100644..100755 --- a/tests/bcache/backingdev_writethrough.ktest +++ b/tests/bcache/backingdev_writethrough.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-backing 512M,512M diff --git a/tests/bcache/bcache-test-libs.sh b/tests/bcache/bcache-test-libs.sh index 38af96a..784db3d 100644 --- a/tests/bcache/bcache-test-libs.sh +++ b/tests/bcache/bcache-test-libs.sh @@ -3,7 +3,7 @@ # ktest framework. # -require-lib ../test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/../test-libs.sh require-build-deb bcache-tools require-kernel-config MD diff --git a/tests/bcache/discard.ktest b/tests/bcache/discard.ktest index 2eaa88a..967d76c 100644..100755 --- a/tests/bcache/discard.ktest +++ b/tests/bcache/discard.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh require-lib ../../../vm-tests/container_lib.sh require-container ioctl_test diff --git a/tests/bcache/flash_dev.ktest b/tests/bcache/flash_dev.ktest index 6a0fe52..fe8d59e 100644..100755 --- a/tests/bcache/flash_dev.ktest +++ b/tests/bcache/flash_dev.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh # XXX possibly broken with 1 mb buckets config-cache 2150MB diff --git a/tests/bcache/flash_dev_enospc.ktest b/tests/bcache/flash_dev_enospc.ktest index f33a632..b2929c1 100644..100755 --- a/tests/bcache/flash_dev_enospc.ktest +++ b/tests/bcache/flash_dev_enospc.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-bucket-size 64k diff --git a/tests/bcache/flash_dev_small_buckets.ktest b/tests/bcache/flash_dev_small_buckets.ktest index d083e77..6e48149 100644..100755 --- a/tests/bcache/flash_dev_small_buckets.ktest +++ b/tests/bcache/flash_dev_small_buckets.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 2G config-bucket-size 8k diff --git a/tests/bcache/init_errors.ktest b/tests/bcache/init_errors.ktest index 4c26659..e6c1416 100644..100755 --- a/tests/bcache/init_errors.ktest +++ b/tests/bcache/init_errors.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 2G config-tier 4G diff --git a/tests/bcache/journal_stress.ktest b/tests/bcache/journal_stress.ktest index e6b5f4f..fe9eba9 100644..100755 --- a/tests/bcache/journal_stress.ktest +++ b/tests/bcache/journal_stress.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 256M,256M config-tier 256M,256M,256M,256M,256M,256M,256M,256M,256M,256M diff --git a/tests/bcache/passthrough.ktest b/tests/bcache/passthrough.ktest index c42bee3..08c73c1 100644..100755 --- a/tests/bcache/passthrough.ktest +++ b/tests/bcache/passthrough.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-backing 2G config-bucket-size 64k diff --git a/tests/bcache/reboot_dd.ktest b/tests/bcache/reboot_dd.ktest index fbc6c2f..1c258c4 100644..100755 --- a/tests/bcache/reboot_dd.ktest +++ b/tests/bcache/reboot_dd.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 2G config-bucket-size 32k diff --git a/tests/bcache/reboot_fio.ktest b/tests/bcache/reboot_fio.ktest index 06a85af..807a589 100644..100755 --- a/tests/bcache/reboot_fio.ktest +++ b/tests/bcache/reboot_fio.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 2G config-tier 4G @@ -8,4 +8,4 @@ config-bucket-size 32k config-block-size 4k config-volume 1600M -require-lib reboot-fio.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/reboot-fio.sh diff --git a/tests/bcache/reboot_fio_new.ktest b/tests/bcache/reboot_fio_new.ktest index 5b92c83..4588c99 100644..100755 --- a/tests/bcache/reboot_fio_new.ktest +++ b/tests/bcache/reboot_fio_new.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 2G config-tier 4G diff --git a/tests/bcache/reboot_tier.ktest b/tests/bcache/reboot_tier.ktest index 3e9f4e7..d88b6f2 100644..100755 --- a/tests/bcache/reboot_tier.ktest +++ b/tests/bcache/reboot_tier.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-tier 2G diff --git a/tests/bcache/register.ktest b/tests/bcache/register.ktest index 2102d38..e6e728c 100644..100755 --- a/tests/bcache/register.ktest +++ b/tests/bcache/register.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh config-cache 512M config-backing 2G,2G diff --git a/tests/bcache/suspend.ktest b/tests/bcache/suspend.ktest index 7b17bfc..7162022 100644..100755 --- a/tests/bcache/suspend.ktest +++ b/tests/bcache/suspend.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcache-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcache-test-libs.sh #config-cache 512M #config-backing 2G,2G diff --git a/tests/bcachefs/32bit.ktest b/tests/bcachefs/32bit.ktest index 86c1058..daf6450 100644..100755 --- a/tests/bcachefs/32bit.ktest +++ b/tests/bcachefs/32bit.ktest @@ -6,7 +6,7 @@ config-arch x86 -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcachefs-test-libs.sh config-timeout 30 @@ -14,3 +14,5 @@ test_boot() { true } + +main "$@" diff --git a/tests/bcachefs/bcachefs-test-libs.sh b/tests/bcachefs/bcachefs-test-libs.sh index 3e1b3d4..fb412bc 100644 --- a/tests/bcachefs/bcachefs-test-libs.sh +++ b/tests/bcachefs/bcachefs-test-libs.sh @@ -3,7 +3,8 @@ # ktest framework. # -require-lib ../test-libs.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/../test-libs.sh + require-git http://evilpiepirate.org/git/bcachefs-tools.git require-make bcachefs-tools diff --git a/tests/bcachefs/ec.ktest b/tests/bcachefs/ec.ktest index 7bf3724..b17d607 100644..100755 --- a/tests/bcachefs/ec.ktest +++ b/tests/bcachefs/ec.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/bcachefs-test-libs.sh require-kernel-config MD require-kernel-config BLK_DEV_MD @@ -271,3 +271,5 @@ d_test_device_evacuate_online() { do_remove_test 0 1 } + +main "$@" diff --git a/tests/bcachefs/nas_apps.ktest b/tests/bcachefs/nas_apps.ktest index bfd71e3..e634396 100644..100755 --- a/tests/bcachefs/nas_apps.ktest +++ b/tests/bcachefs/nas_apps.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcachefs-test-libs.sh require-kernel-config MD require-kernel-config BLK_DEV_MD @@ -110,3 +110,5 @@ test_nbd() array_teardown } + +main "$@" diff --git a/tests/bcachefs/nfs.ktest b/tests/bcachefs/nfs.ktest index 2717884..43396de 100644..100755 --- a/tests/bcachefs/nfs.ktest +++ b/tests/bcachefs/nfs.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcachefs-test-libs.sh config-scratch-devs 4G @@ -33,3 +33,4 @@ test_nfs() umount /export2 } +main "$@" diff --git a/tests/bcachefs/perf.ktest b/tests/bcachefs/perf.ktest index 95d13a0..d9016f9 100644..100755 --- a/tests/bcachefs/perf.ktest +++ b/tests/bcachefs/perf.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib ../prelude.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/../test-libs.sh require-make bcachefs-tools @@ -219,3 +219,5 @@ test_extents() extent_overwrite_middle \ extent_overwrite_all } + +main "$@" diff --git a/tests/bcachefs/quota.ktest b/tests/bcachefs/quota.ktest index 5ae7dc0..54d42aa 100644..100755 --- a/tests/bcachefs/quota.ktest +++ b/tests/bcachefs/quota.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcachefs-test-libs.sh require-kernel-config QUOTA require-kernel-config BCACHEFS_QUOTA @@ -164,3 +164,5 @@ test_prjquota_multidevices() umount /mnt } + +main "$@" diff --git a/tests/bcachefs/replication.ktest b/tests/bcachefs/replication.ktest index 288c013..fa3ce1e 100644..100755 --- a/tests/bcachefs/replication.ktest +++ b/tests/bcachefs/replication.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/bcachefs-test-libs.sh require-kernel-config MD require-kernel-config BLK_DEV_MD @@ -664,3 +664,5 @@ test_key_type_error() umount /mnt } + +main "$@" diff --git a/tests/bcachefs/single_device.ktest b/tests/bcachefs/single_device.ktest index 20e24e0..47d809f 100644..100755 --- a/tests/bcachefs/single_device.ktest +++ b/tests/bcachefs/single_device.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcachefs-test-libs.sh require-kernel-config BCACHEFS_TESTS @@ -1413,3 +1413,5 @@ test_kill_btree_node() bcachefs fsck -y /dev/sdb || true done } + +main "$@" diff --git a/tests/bcachefs/subvol.ktest b/tests/bcachefs/subvol.ktest index 8d3b00c..1b84160 100644..100755 --- a/tests/bcachefs/subvol.ktest +++ b/tests/bcachefs/subvol.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/bcachefs-test-libs.sh config-scratch-devs 4G config-scratch-devs 4G @@ -433,3 +433,5 @@ test_snapshot_copygc() bcachefs fs usage -h /mnt umount /mnt } + +main "$@" diff --git a/tests/bcachefs/tier.ktest b/tests/bcachefs/tier.ktest index 2449f3d..0724434 100644..100755 --- a/tests/bcachefs/tier.ktest +++ b/tests/bcachefs/tier.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/bcachefs-test-libs.sh config-scratch-devs 4G config-scratch-devs 4G @@ -227,7 +227,7 @@ test_mount_umount_torture() test_change_replicas() { - set_watchdog 60 + set_watchdog 180 run_quiet "" bcachefs format \ --label=ssd /dev/sd[bc] \ --label=hdd /dev/sd[de] \ @@ -268,3 +268,5 @@ test_change_replicas() kill %1 umount /mnt } + +main $@ diff --git a/tests/bcachefs/units.ktest b/tests/bcachefs/units.ktest index 44412da..fb9dadd 100644..100755 --- a/tests/bcachefs/units.ktest +++ b/tests/bcachefs/units.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib ../prelude.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/bcachefs-test-libs.sh require-make bcachefs-tools @@ -53,3 +53,5 @@ list_tests() echo extent_overwrite_all echo snapshots } + +main "$@" diff --git a/tests/bcachefs/xfstests.ktest b/tests/bcachefs/xfstests.ktest index 13ba8ec..2b2531d 100644..100755 --- a/tests/bcachefs/xfstests.ktest +++ b/tests/bcachefs/xfstests.ktest @@ -1,13 +1,13 @@ #!/bin/bash -require-lib bcachefs-test-libs.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/bcachefs-test-libs.sh require-git http://evilpiepirate.org/git/linuxquota.git require-make linuxquota require-git http://evilpiepirate.org/git/xfstests.git ../xfstests -require-lib ../xfstests.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/../xfstests.sh require-kernel-config BCACHEFS_POSIX_ACL require-kernel-config BCACHEFS_QUOTA=y @@ -26,3 +26,5 @@ run_tests() run_xfstests bcachefs "$@" } + +main "$@" diff --git a/tests/blkdev.ktest b/tests/blkdev.ktest index 355fc21..d8f4c88 100755 --- a/tests/blkdev.ktest +++ b/tests/blkdev.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib ./test-libs.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/test-libs.sh config-scratch-devs 4G @@ -36,3 +36,5 @@ test_block_simple() run_fio /mnt/foo --size=1G umount /mnt } + +main "$@" diff --git a/tests/blktests.ktest b/tests/blktests.ktest index b1e8d42..7622c82 100644..100755 --- a/tests/blktests.ktest +++ b/tests/blktests.ktest @@ -2,11 +2,11 @@ # blktests wrapper: +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/test-libs.sh + require-git https://github.com/osandov/blktests.git require-make blktests -require-lib test-libs.sh - require-kernel-config FAULT_INJECTION,FAULT_INJECTION_DEBUG_FS,FAIL_MAKE_REQUEST require-kernel-config MD,BLK_DEV_DM,DM_FLAKEY,DM_SNAPSHOT,DM_LOG_WRITES require-kernel-config BLK_DEV diff --git a/tests/btrfs.ktest b/tests/btrfs.ktest index 4bbd0fd..4efc156 100644..100755 --- a/tests/btrfs.ktest +++ b/tests/btrfs.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib test-libs.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/xfstests.sh require-kernel-config BTRFS_FS require-kernel-config BTRFS_FS_POSIX_ACL @@ -10,11 +10,11 @@ require-kernel-config BTRFS_DEBUG require-kernel-config BTRFS_ASSERT require-kernel-config BTRFS_FS_REF_VERIFY -require-lib xfstests.sh - run_tests() { export MKFS_OPTIONS= run_xfstests btrfs "$@" } + +main "$@" diff --git a/tests/dm.ktest b/tests/dm.ktest index dda9fa3..bc00a6b 100644..100755 --- a/tests/dm.ktest +++ b/tests/dm.ktest @@ -1,6 +1,7 @@ #!/bin/bash -require-lib test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/test-libs.sh + config-timeout $(stress_timeout) require-kernel-config DM_CRYPT @@ -144,3 +145,5 @@ test_s5p_sss_cryptsetup() { echo "OK" } + +main "$@" diff --git a/tests/ext2.ktest b/tests/ext2.ktest index 124fff8..1a43789 100644..100755 --- a/tests/ext2.ktest +++ b/tests/ext2.ktest @@ -1,14 +1,16 @@ #!/bin/bash +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/xfstests.sh + require-kernel-config EXT2_FS require-kernel-config EXT2_FS_XATTR require-kernel-config EXT2_FS_POSIX_ACL -require-lib xfstests.sh - run_tests() { export MKFS_OPTIONS= run_xfstests ext2 "$@" } + +main "$@" diff --git a/tests/ext3.ktest b/tests/ext3.ktest index e00962e..bbacc28 100644..100755 --- a/tests/ext3.ktest +++ b/tests/ext3.ktest @@ -1,13 +1,15 @@ #!/bin/bash +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/xfstests.sh + require-kernel-config EXT3_FS require-kernel-config EXT4_FS_POSIX_ACL -require-lib xfstests.sh - run_tests() { export MKFS_OPTIONS= run_xfstests ext3 "$@" } + +main "$@" diff --git a/tests/ext4.ktest b/tests/ext4.ktest index 25096d0..2132996 100644..100755 --- a/tests/ext4.ktest +++ b/tests/ext4.ktest @@ -1,15 +1,17 @@ #!/bin/bash +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/xfstests.sh + require-kernel-config EXT4_FS require-kernel-config EXT4_FS_POSIX_ACL require-kernel-config EXT4_DEBUG require-kernel-config QUOTA -require-lib xfstests.sh - run_tests() { export MKFS_OPTIONS= run_xfstests ext4 "$@" } + +main "$@" diff --git a/tests/f2fs.ktest b/tests/f2fs.ktest index d841491..1fe5bfa 100644..100755 --- a/tests/f2fs.ktest +++ b/tests/f2fs.ktest @@ -1,5 +1,7 @@ #!/bin/bash +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/xfstests.sh + require-kernel-config F2FS_FS require-kernel-config F2FS_STAT_FS require-kernel-config F2FS_FS_XATTR @@ -7,11 +9,11 @@ require-kernel-config F2FS_FS_POSIX_ACL require-kernel-config F2FS_CHECK_FS require-kernel-config F2FS_FAULT_INJECTION -require-lib xfstests.sh - run_tests() { export MKFS_OPTIONS= run_xfstests f2fs "$@" } + +main "$@" diff --git a/tests/fio.ktest b/tests/fio.ktest index a30e583..7d801f8 100644..100755 --- a/tests/fio.ktest +++ b/tests/fio.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/test-libs.sh config-scratch-devs 1G diff --git a/tests/jfs.ktest b/tests/jfs.ktest index 27b1927..c55477e 100644..100755 --- a/tests/jfs.ktest +++ b/tests/jfs.ktest @@ -1,15 +1,17 @@ #!/bin/bash +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/xfstests.sh + require-kernel-config JFS_FS require-kernel-config JFS_POSIX_ACL require-kernel-config JFS_DEBUG require-kernel-config QUOTA -require-lib xfstests.sh - run_tests() { export MKFS_OPTIONS= run_xfstests jfs "$@" } + +main "$@" diff --git a/tests/kconfig.sh b/tests/kconfig.sh new file mode 100644 index 0000000..caf1294 --- /dev/null +++ b/tests/kconfig.sh @@ -0,0 +1,223 @@ + + +have_kvmguest=0 +have_virtio=0 +have_suspend=0 + +case $ktest_arch in + x86) + require-kernel-config SMP + require-kernel-config MCORE2 # optimize for core2 + require-kernel-config IO_DELAY_0XED + require-kernel-config 64BIT=n + require-kernel-config ACPI # way slower without it, do not know why + require-kernel-config UNWINDER_FRAME_POINTER + require-kernel-config HARDLOCKUP_DETECTOR + + have_kvmguest=1 + have_virtio=1 + have_suspend=1 + ;; + x86_64) + require-kernel-config SMP + require-kernel-config MCORE2 # optimize for core2 + require-kernel-config IO_DELAY_0XED + #require-kernel-config IA32_EMULATION + require-kernel-config 64BIT + require-kernel-config ACPI # way slower without it, do not know why + require-kernel-config UNWINDER_FRAME_POINTER + require-kernel-config HARDLOCKUP_DETECTOR + + have_kvmguest=1 + have_virtio=1 + have_suspend=1 + ;; + powerpc) + require-kernel-config ADVANCED_OPTIONS + + have_kvmguest=1 + have_virtio=1 + have_suspend=1 + ;; + mips) + require-kernel-config MIPS_MALTA + require-kernel-config CPU_MIPS${BITS}_R2 + require-kernel-config CPU_BIG_ENDIAN=y + require-kernel-config CPU_LITTLE_ENDIAN=n + require-kernel-config 32BIT + + have_virtio=1 + ktest_storage_bus=piix4-ide + ;; +esac + +# Normal kernel functionality: +#require-kernel-config PREEMPT +#require-kernel-config NO_HZ +#require-kernel-config HZ_100 + +require-kernel-config LOCALVERSION_AUTO + +require-kernel-config HIGH_RES_TIMERS + +require-kernel-config SYSVIPC +require-kernel-config CGROUPS +require-kernel-config SWAP # systemd segfaults if you don't have swap support... +require-kernel-config MODULES,MODULE_UNLOAD +require-kernel-config DEVTMPFS +require-kernel-config DEVTMPFS_MOUNT +require-kernel-config BINFMT_ELF +require-kernel-config BINFMT_SCRIPT + +require-kernel-config COMPACTION # virtfs doesn't do well without it + +require-kernel-config PROC_KCORE # XXX Needed? + +require-kernel-config TTY +require-kernel-config VT + +# KVM guest support: +if [[ $have_kvmguest = 1 ]]; then + require-kernel-config HYPERVISOR_GUEST + require-kernel-config PARAVIRT + require-kernel-config KVM_GUEST +fi + +if [[ $have_virtio = 1 ]]; then + require-kernel-config VIRTIO_MENU + require-kernel-config VIRTIO_PCI + require-kernel-config HW_RANDOM_VIRTIO + require-kernel-config VIRTIO_CONSOLE + require-kernel-config VIRTIO_NET + require-kernel-config NET_9P_VIRTIO +fi + +if [[ $have_suspend = 1 ]]; then + require-kernel-config PM + require-kernel-config SUSPEND + require-kernel-config PM_SLEEP + require-kernel-config PM_DEBUG + require-kernel-append no_console_suspend +fi + +case $ktest_storage_bus in + virtio-scsi-pci) + require-kernel-config SCSI_VIRTIO + ;; + ahci) + require-kernel-config ATA + require-kernel-config SATA_AHCI + ;; + piix4-ide) + require-kernel-config ATA + require-kernel-config ATA_SFF + require-kernel-config ATA_PIIX + ;; + lsi) + require-kernel-config SCSI_MPT3SAS +esac + +# PCI: +require-kernel-config PCI + +# Rng: +require-kernel-config HW_RANDOM + +# Clock: +require-kernel-config RTC_CLASS +require-kernel-config RTC_HCTOSYS +require-kernel-config RTC_DRV_CMOS + +# Console: +require-kernel-config SERIAL_8250 # XXX can probably drop +require-kernel-config SERIAL_8250_CONSOLE + +# Block devices: +require-kernel-config SCSI +require-kernel-config SCSI_LOWLEVEL # what's this for? +require-kernel-config BLK_DEV_SD # disk support + +# Networking +require-kernel-config NET +require-kernel-config PACKET +require-kernel-config UNIX +require-kernel-config INET +require-kernel-config IP_MULTICAST +require-kernel-config NETDEVICES + +# Filesystems: +require-kernel-config TMPFS +require-kernel-config INOTIFY_USER +require-kernel-config CONFIGFS_FS # systemd + +# Root filesystem: +require-kernel-config EXT4_FS +require-kernel-config EXT4_FS_POSIX_ACL + +require-kernel-config NET_9P +require-kernel-config NETWORK_FILESYSTEMS +require-kernel-config 9P_FS + +# Fast RNG: +require-kernel-config CONFIG_CRYPTO_DEV_VIRTIO + +# Crash dumps +if [[ $ktest_crashdump = 1 ]]; then + require-kernel-config KEXEC + require-kernel-config CRASH_DUMP + require-kernel-config RELOCATABLE +fi + +# KGDB: +require-kernel-config KGDB +require-kernel-config KGDB_SERIAL_CONSOLE +require-kernel-config VMAP_STACK=n +require-kernel-config RANDOMIZE_BASE=n +require-kernel-config RANDOMIZE_MEMORY=n + +# Profiling: +require-kernel-config PROFILING +require-kernel-config JUMP_LABEL + +# Tracing +require-kernel-config FTRACE +require-kernel-config FTRACE_SYSCALLS +require-kernel-config FUNCTION_TRACER +#require-kernel-config ENABLE_DEFAULT_TRACERS + +require-kernel-config PANIC_ON_OOPS +require-kernel-config SOFTLOCKUP_DETECTOR +require-kernel-config DETECT_HUNG_TASK +#require-kernel-config DEFAULT_HUNG_TASK_TIMEOUT=30 +require-kernel-config WQ_WATCHDOG + +require-kernel-config DEBUG_FS +require-kernel-config MAGIC_SYSRQ +require-kernel-config DEBUG_INFO +require-kernel-config DEBUG_INFO_DWARF4 +require-kernel-config GDB_SCRIPTS +require-kernel-config DEBUG_KERNEL +#require-kernel-config DEBUG_RODATA +#require-kernel-config DEBUG_SET_MODULE_RONX + +require-kernel-config DEBUG_LIST + +# More expensive +#require-kernel-config DYNAMIC_DEBUG + +# Expensive +#require-kernel-config DEBUG_ATOMIC_SLEEP +#require-kernel-config DEBUG_MUTEXES +#require-kernel-config DEBUG_PREEMPT + +#require-kernel-config DEBUG_SLAB +#require-kernel-config DEBUG_SPINLOCK + +#require-kernel-config LOCKDEP_SUPPORT +#require-kernel-config PROVE_LOCKING + +#require-kernel-config PROVE_RCU +#require-kernel-config RCU_CPU_STALL_VERBOSE + +# expensive, doesn't catch that much +# require-kernel-config DEBUG_PAGEALLOC diff --git a/tests/md.ktest b/tests/md.ktest index cb102ec..b9a936e 100644..100755 --- a/tests/md.ktest +++ b/tests/md.ktest @@ -1,6 +1,6 @@ #!/bin/bash -require-lib ./test-libs.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/test-libs.sh require-kernel-config MD require-kernel-config BLK_DEV_MD @@ -64,3 +64,5 @@ test_raid5() { run_mdtest 5 } + +main "$@" diff --git a/tests/nilfs2.ktest b/tests/nilfs2.ktest index c203f6d..f17b677 100644..100755 --- a/tests/nilfs2.ktest +++ b/tests/nilfs2.ktest @@ -1,8 +1,8 @@ #!/bin/bash -require-kernel-config NILFS2_FS +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/xfstests.sh -require-lib xfstests.sh +require-kernel-config NILFS2_FS run_tests() { @@ -10,3 +10,5 @@ run_tests() run_xfstests nilfs2 "$@" } + +main "$@" diff --git a/tests/prelude.sh b/tests/prelude.sh index caf1294..a521abb 100644 --- a/tests/prelude.sh +++ b/tests/prelude.sh @@ -1,223 +1,267 @@ +# Basic libs for ktest tests: +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/../lib/common.sh -have_kvmguest=0 -have_virtio=0 -have_suspend=0 - -case $ktest_arch in - x86) - require-kernel-config SMP - require-kernel-config MCORE2 # optimize for core2 - require-kernel-config IO_DELAY_0XED - require-kernel-config 64BIT=n - require-kernel-config ACPI # way slower without it, do not know why - require-kernel-config UNWINDER_FRAME_POINTER - require-kernel-config HARDLOCKUP_DETECTOR - - have_kvmguest=1 - have_virtio=1 - have_suspend=1 - ;; - x86_64) - require-kernel-config SMP - require-kernel-config MCORE2 # optimize for core2 - require-kernel-config IO_DELAY_0XED - #require-kernel-config IA32_EMULATION - require-kernel-config 64BIT - require-kernel-config ACPI # way slower without it, do not know why - require-kernel-config UNWINDER_FRAME_POINTER - require-kernel-config HARDLOCKUP_DETECTOR - - have_kvmguest=1 - have_virtio=1 - have_suspend=1 - ;; - powerpc) - require-kernel-config ADVANCED_OPTIONS - - have_kvmguest=1 - have_virtio=1 - have_suspend=1 - ;; - mips) - require-kernel-config MIPS_MALTA - require-kernel-config CPU_MIPS${BITS}_R2 - require-kernel-config CPU_BIG_ENDIAN=y - require-kernel-config CPU_LITTLE_ENDIAN=n - require-kernel-config 32BIT - - have_virtio=1 - ktest_storage_bus=piix4-ide - ;; -esac - -# Normal kernel functionality: -#require-kernel-config PREEMPT -#require-kernel-config NO_HZ -#require-kernel-config HZ_100 - -require-kernel-config LOCALVERSION_AUTO - -require-kernel-config HIGH_RES_TIMERS - -require-kernel-config SYSVIPC -require-kernel-config CGROUPS -require-kernel-config SWAP # systemd segfaults if you don't have swap support... -require-kernel-config MODULES,MODULE_UNLOAD -require-kernel-config DEVTMPFS -require-kernel-config DEVTMPFS_MOUNT -require-kernel-config BINFMT_ELF -require-kernel-config BINFMT_SCRIPT - -require-kernel-config COMPACTION # virtfs doesn't do well without it - -require-kernel-config PROC_KCORE # XXX Needed? - -require-kernel-config TTY -require-kernel-config VT - -# KVM guest support: -if [[ $have_kvmguest = 1 ]]; then - require-kernel-config HYPERVISOR_GUEST - require-kernel-config PARAVIRT - require-kernel-config KVM_GUEST -fi - -if [[ $have_virtio = 1 ]]; then - require-kernel-config VIRTIO_MENU - require-kernel-config VIRTIO_PCI - require-kernel-config HW_RANDOM_VIRTIO - require-kernel-config VIRTIO_CONSOLE - require-kernel-config VIRTIO_NET - require-kernel-config NET_9P_VIRTIO -fi - -if [[ $have_suspend = 1 ]]; then - require-kernel-config PM - require-kernel-config SUSPEND - require-kernel-config PM_SLEEP - require-kernel-config PM_DEBUG - require-kernel-append no_console_suspend -fi - -case $ktest_storage_bus in - virtio-scsi-pci) - require-kernel-config SCSI_VIRTIO - ;; - ahci) - require-kernel-config ATA - require-kernel-config SATA_AHCI - ;; - piix4-ide) - require-kernel-config ATA - require-kernel-config ATA_SFF - require-kernel-config ATA_PIIX - ;; - lsi) - require-kernel-config SCSI_MPT3SAS -esac - -# PCI: -require-kernel-config PCI - -# Rng: -require-kernel-config HW_RANDOM - -# Clock: -require-kernel-config RTC_CLASS -require-kernel-config RTC_HCTOSYS -require-kernel-config RTC_DRV_CMOS - -# Console: -require-kernel-config SERIAL_8250 # XXX can probably drop -require-kernel-config SERIAL_8250_CONSOLE - -# Block devices: -require-kernel-config SCSI -require-kernel-config SCSI_LOWLEVEL # what's this for? -require-kernel-config BLK_DEV_SD # disk support - -# Networking -require-kernel-config NET -require-kernel-config PACKET -require-kernel-config UNIX -require-kernel-config INET -require-kernel-config IP_MULTICAST -require-kernel-config NETDEVICES - -# Filesystems: -require-kernel-config TMPFS -require-kernel-config INOTIFY_USER -require-kernel-config CONFIGFS_FS # systemd - -# Root filesystem: -require-kernel-config EXT4_FS -require-kernel-config EXT4_FS_POSIX_ACL - -require-kernel-config NET_9P -require-kernel-config NETWORK_FILESYSTEMS -require-kernel-config 9P_FS - -# Fast RNG: -require-kernel-config CONFIG_CRYPTO_DEV_VIRTIO - -# Crash dumps -if [[ $ktest_crashdump = 1 ]]; then - require-kernel-config KEXEC - require-kernel-config CRASH_DUMP - require-kernel-config RELOCATABLE -fi - -# KGDB: -require-kernel-config KGDB -require-kernel-config KGDB_SERIAL_CONSOLE -require-kernel-config VMAP_STACK=n -require-kernel-config RANDOMIZE_BASE=n -require-kernel-config RANDOMIZE_MEMORY=n - -# Profiling: -require-kernel-config PROFILING -require-kernel-config JUMP_LABEL - -# Tracing -require-kernel-config FTRACE -require-kernel-config FTRACE_SYSCALLS -require-kernel-config FUNCTION_TRACER -#require-kernel-config ENABLE_DEFAULT_TRACERS - -require-kernel-config PANIC_ON_OOPS -require-kernel-config SOFTLOCKUP_DETECTOR -require-kernel-config DETECT_HUNG_TASK -#require-kernel-config DEFAULT_HUNG_TASK_TIMEOUT=30 -require-kernel-config WQ_WATCHDOG - -require-kernel-config DEBUG_FS -require-kernel-config MAGIC_SYSRQ -require-kernel-config DEBUG_INFO -require-kernel-config DEBUG_INFO_DWARF4 -require-kernel-config GDB_SCRIPTS -require-kernel-config DEBUG_KERNEL -#require-kernel-config DEBUG_RODATA -#require-kernel-config DEBUG_SET_MODULE_RONX - -require-kernel-config DEBUG_LIST - -# More expensive -#require-kernel-config DYNAMIC_DEBUG - -# Expensive -#require-kernel-config DEBUG_ATOMIC_SLEEP -#require-kernel-config DEBUG_MUTEXES -#require-kernel-config DEBUG_PREEMPT - -#require-kernel-config DEBUG_SLAB -#require-kernel-config DEBUG_SPINLOCK - -#require-kernel-config LOCKDEP_SUPPORT -#require-kernel-config PROVE_LOCKING - -#require-kernel-config PROVE_RCU -#require-kernel-config RCU_CPU_STALL_VERBOSE - -# expensive, doesn't catch that much -# require-kernel-config DEBUG_PAGEALLOC +trap 'echo "Error $? from: $BASH_COMMAND, exiting" >&2' ERR + +ktest_cpus=$(nproc) +ktest_mem="" +ktest_timeout="" +ktest_kernel_append=() +ktest_images=() +ktest_scratch_devs=() +ktest_make_install=() +ktest_kernel_config_require=() +ktest_qemu_append=() + +NEXT_SCRATCH_DEV="b" +BUILD_ON_HOST="" + +require-git() +{ + local req="$1" + local dir=$(basename $req) + dir=${dir%%.git} + + if [[ $# -ge 2 ]]; then + dir=$2 + fi + + dir=$(dirname $(readlink -e "${BASH_SOURCE[1]}"))/$dir + + if [[ ! -d $dir ]]; then + git clone $req $dir + fi +} + +do-build-deb() +{ + local path=$(readlink -e "$1") + local name=$(basename $path) + + get_tmpdir + + make -C "$path" + + cp -drl $path $ktest_tmp + pushd "$ktest_tmp/$name" > /dev/null + + # make -nc actually work: + rm -f debian/*.debhelper.log + + debuild --no-lintian -b -i -I -us -uc -nc + popd > /dev/null +} + +# $1 is a source repository, which will be built (with make) and then turned +# into a dpkg +require-build-deb() +{ + local req=$1 + + if ! [[ -d $req ]]; then + echo "build-deb dependency $req not found" + exit 1 + fi + + checkdep debuild devscripts + + run_quiet "building $(basename $req)" do-build-deb $req +} + +require-make() +{ + local req=$(dirname $(readlink -e ${BASH_SOURCE[1]}))/$1 + + if [[ ! -d $req ]]; then + echo "require-make: $req not found" + exit 1 + fi + + ktest_make_install+=("$req") + + if [[ -n $BUILD_ON_HOST ]]; then + run_quiet "building $1" make -C "$req" + fi +} + +require-kernel-config() +{ + local OLDIFS=$IFS + IFS=',' + + for i in $1; do + ktest_kernel_config_require+=("$i") + done + + IFS=$OLDIFS +} + +require-qemu-append() +{ + local OLDIFS=$IFS + IFS=',' + + for i in $1; do + ktest_kernel_config_require+=("$i") + done + + IFS=$OLDIFS +} + +require-kernel-append() +{ + ktest_kernel_append+=($1) +} + +config-scratch-devs() +{ + ktest_scratch_devs+=("$1") +} + +config-pmem-devs() +{ + ktest_pmem_devs+=("$1") +} + +config-image() +{ + ktest_images+=("$1") +} + +config-cpus() +{ + ktest_cpus=$1 +} + +config-mem() +{ + ktest_mem=$1 +} + +config-timeout() +{ + n=$1 + if [ "${EXTENDED_DEBUG:-0}" == 1 ]; then + n=$((n * 2)) + fi + ktest_timeout=$n +} + +config-arch() +{ + parse_arch "$1" + checkdep_arch +} + +set_watchdog() +{ + echo WATCHDOG $1 +} + +run_test() +{ + local test=test_$1 + + if [[ $(type -t $test) != function ]]; then + echo "test $1 does not exist" + exit 1 + fi + + $test +} + +run_tests() +{ + local tests_passed=() + local tests_failed=() + + echo + echo "Running tests $@" + echo + + for i in $@; do + echo "========= TEST $i" + echo + + local start=$(date '+%s') + local ret=0 + (set -e; run_test $i) + ret=$? + local finish=$(date '+%s') + + pkill -P $$ >/dev/null || true + + # XXX: check dmesg for warnings, oopses, slab corruption, etc. before + # signaling success + + echo + + if [[ $ret = 0 ]]; then + echo "========= PASSED $i in $(($finish - $start))s" + tests_passed+=($i) + else + echo "========= FAILED $i in $(($finish - $start))s" + tests_failed+=($i) + + # Try to clean up after a failed test so we can run the rest of + # the tests - unless failfast is enabled, or there was only one + # test to run: + + $ktest_failfast && break + [[ $# = 1 ]] && break + + for mnt in $(awk '{print $2}' /proc/mounts|grep ^/mnt|sort -r); do + while [[ -n $(fuser -k -M -m $mnt) ]]; do + sleep 1 + done + umount $mnt + done + fi + done + + echo + echo "Passed: ${tests_passed[@]}" + echo "Failed: ${tests_failed[@]}" + + return ${#tests_failed[@]} +} + +list_tests() +{ + declare -F|sed -ne '/ test_/ s/.*test_// p' +} + +main() +{ + if [[ $BASH_ARGC = 0 ]]; then + exit 0 + fi + + local arg=$1 + shift + + case $arg in + deps) + echo "ktest_cpus=$ktest_cpus" + echo "ktest_mem=$ktest_mem" + echo "ktest_timeout=$ktest_timeout" + echo "ktest_kernel_append=${ktest_kernel_append[@]}" + echo "ktest_images=(${ktest_images[@]})" + echo "ktest_scratch_devs=(${ktest_scratch_devs[@]})" + echo "ktest_make_install=(${ktest_make_install[@]})" + echo "ktest_kernel_config_require=(${ktest_kernel_config_require[@]})" + echo "ktest_qemu_append=(${ktest_qemu_append[@]})" + ;; + list-tests) + list_tests + ;; + run-tests) + run_tests "$@" + ;; + *) + usage + exit 1 + ;; + esac +} diff --git a/tests/test-libs.sh b/tests/test-libs.sh index 7b533c2..bea62c4 100644 --- a/tests/test-libs.sh +++ b/tests/test-libs.sh @@ -3,7 +3,8 @@ # ktest framework. # -require-lib prelude.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/prelude.sh +. $(dirname $(readlink -e ${BASH_SOURCE[0]}))/kconfig.sh config-mem 2G diff --git a/tests/timeout.ktest b/tests/timeout.ktest index a33452d..e5c07a5 100755 --- a/tests/timeout.ktest +++ b/tests/timeout.ktest @@ -1,5 +1,7 @@ #!/bin/bash +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/test-libs.sh + config-mem 512M config-timeout 10 @@ -8,3 +10,5 @@ test_timeout() sleep 30 false } + +main "$@" diff --git a/tests/xfs.ktest b/tests/xfs.ktest index 4c06036..06c7ccd 100755 --- a/tests/xfs.ktest +++ b/tests/xfs.ktest @@ -1,5 +1,7 @@ #!/bin/bash +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/xfstests.sh + require-kernel-config XFS_FS require-kernel-config XFS_QUOTA require-kernel-config XFS_POSIX_ACL @@ -7,10 +9,10 @@ require-kernel-config XFS_RT XFS_ONLINE_SCRUB #require-kernel-config XFS_DEBUG require-kernel-config QUOTA -require-lib xfstests.sh - run_tests() { export MKFS_OPTIONS="-m reflink=1,rmapbt=1 -i sparse=1 -b size=1024" run_xfstests xfs "$@" } + +main "$@" diff --git a/tests/xfstests.sh b/tests/xfstests.sh index 257e8df..e33f91c 100644 --- a/tests/xfstests.sh +++ b/tests/xfstests.sh @@ -1,6 +1,6 @@ # xfstests wrapper: -require-lib test-libs.sh +. $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/test-libs.sh require-git https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git xfstests @@ -23,7 +23,7 @@ config-timeout 7200 list_tests() { - (cd "$ktest_dir/tests/xfstests/tests"; echo generic/???) + (cd $(dirname $(readlink -e "${BASH_SOURCE[0]}"))/xfstests/tests; echo generic/???) } hook_xfstests() |