summaryrefslogtreecommitdiffstats
path: root/ci/vmtest/run_selftests.sh
blob: 1dcde765bb5f6f7720d32232c36a4bd66951eafa (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
#!/bin/bash

set -euo pipefail

source $(cd $(dirname $0) && pwd)/helpers.sh

ARCH=$(uname -m)

STATUS_FILE=/exitstatus

read_lists() {
	(for path in "$@"; do
		if [[ -s "$path" ]]; then
			cat "$path"
		fi;
	done) | cut -d'#' -f1 | tr -s ' \t\n' ','
}

test_progs() {
	if [[ "${KERNEL}" != '4.9.0' ]]; then
		foldable start test_progs "Testing test_progs"
		# "&& true" does not change the return code (it is not executed
		# if the Python script fails), but it prevents exiting on a
		# failure due to the "set -e".
		./test_progs ${DENYLIST:+-d$DENYLIST} ${ALLOWLIST:+-a$ALLOWLIST} && true
		echo "test_progs:$?" >> "${STATUS_FILE}"
		foldable end test_progs
	fi
}

test_progs_no_alu32() {
	foldable start test_progs-no_alu32 "Testing test_progs-no_alu32"
	./test_progs-no_alu32 ${DENYLIST:+-d$DENYLIST} ${ALLOWLIST:+-a$ALLOWLIST} && true
	echo "test_progs-no_alu32:$?" >> "${STATUS_FILE}"
	foldable end test_progs-no_alu32
}

test_maps() {
	if [[ "${KERNEL}" == 'latest' ]]; then
		foldable start test_maps "Testing test_maps"
		./test_maps && true
		echo "test_maps:$?" >> "${STATUS_FILE}"
		foldable end test_maps
	fi
}

test_verifier() {
	if [[ "${KERNEL}" == 'latest' ]]; then
		foldable start test_verifier "Testing test_verifier"
		./test_verifier && true
		echo "test_verifier:$?" >> "${STATUS_FILE}"
		foldable end test_verifier
	fi
}

foldable end vm_init

configs_path=/${PROJECT_NAME}/selftests/bpf
local_configs_path=${PROJECT_NAME}/vmtest/configs
DENYLIST=$(read_lists \
	"$configs_path/DENYLIST" \
	"$configs_path/DENYLIST.${ARCH}" \
	"$local_configs_path/DENYLIST-${KERNEL}" \
	"$local_configs_path/DENYLIST-${KERNEL}.${ARCH}" \
)
ALLOWLIST=$(read_lists \
	"$configs_path/ALLOWLIST" \
	"$configs_path/ALLOWLIST.${ARCH}" \
	"$local_configs_path/ALLOWLIST-${KERNEL}" \
	"$local_configs_path/ALLOWLIST-${KERNEL}.${ARCH}" \
)

echo "DENYLIST: ${DENYLIST}"
echo "ALLOWLIST: ${ALLOWLIST}"

cd ${PROJECT_NAME}/selftests/bpf

if [ $# -eq 0 ]; then
	test_progs
	test_progs_no_alu32
	# test_maps
	test_verifier
else
	for test_name in "$@"; do
		"${test_name}"
	done
fi