summaryrefslogtreecommitdiffstats
path: root/debian/tests/selftests
blob: c19064ca61a70434c5dfb768c7c90f1984df4ae9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/bash -eu

PATH=/usr/sbin:/sbin:/usr/bin:/bin

getconfig() {
    debian/bin/getconfig.py "$@"
}

# Look up current ABI name and 'localversion' (featureset/flavour) suffixes
abiname=$(getconfig version abiname)
arch=$(dpkg --print-architecture)
localversion=()
for featureset in $(getconfig base $arch featuresets); do
    if [ "$(getconfig base '' $featureset enabled || echo True)" = True ]; then
	for flavour in $(getconfig base $arch $featureset flavours); do
	    if [ "$featureset" = none ]; then
		localversion+=(-$flavour)
	    else
		localversion+=(-$featureset-$flavour)
	    fi
	done
    fi
done
steps=${#localversion[*]}

case "${ADT_REBOOT_MARK:-}" in
    "")
	step=-1
	;;
    step*)
	step=${ADT_REBOOT_MARK#step}
	;;
esac

if [ "$step" -ge 0 ]; then
    ver=$abiname${localversion[$step]}

    if [ "$(uname -r)" != "$ver" ]; then
	echo >&2 "Should be running: $ver"
	echo >&2 "Actually running: $(uname -r)"
    else
	cp -lR . $ADTTMP/build
	cd $ADTTMP/build
	make headers_install

	# Ignore compiler warnings
	{
	    make -C tools/testing/selftests &&
	    make -C tools/testing/selftests/memfd build_fuse
	} 2>&1 || echo >&2 "Build failed"

	# Enable testing CLONE_USERNS by unprivileged users
	sysctl kernel.unprivileged_userns_clone=1

	# Some tests will write to stderr despite being successful,
	# and the exit code from make will be 0 even if tests failed.
	# So we have to do some post-analysis...
	set -o pipefail
	{
	    make -C tools/testing/selftests quicktest=1 run_tests &&
	    make -C tools/testing/selftests/cpu-hotplug run_full_test &&
	    make -C tools/testing/selftests/memory-hotplug run_full_test &&
	    make -C tools/testing/selftests/memfd run_fuse &&
	    make -C tools/testing/selftests/timers run_destructive_tests
	} 2>&1 | tee $ADTTMP/log
	set +o pipefail
	if grep -E '\[(FAIL|UNSUPPORTED)\]|recipe for target .run_tests. failed' $ADTTMP/log | \
	    grep -q -v \
		 -e '^selftests: fw_userhelper.sh \[FAIL\]' \
		 -e 'ftrace - function profiler with function tracing   \[UNSUPPORTED\]' \
		 -e '^selftests: ftracetest \[FAIL\]' \
		 -e '|| echo .*\[FAIL\]' \
		 ; then
	    echo >&2 "Unexpected failures found"
	fi
    fi
fi

step=$((step + 1))

if [ "$step" -lt "$steps" ]; then
    # Load the next kernel
    ver=$abiname${localversion[$step]}
    kexec -l /boot/vmlinuz-$ver --initrd /boot/initrd.img-$ver --reuse-cmdline
    /tmp/autopkgtest-reboot step$step
fi

exit 0