Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ci
Path: blob/main/scripts/test/run-tests.sh
1130 views
1
#!/bin/sh
2
3
SSL_CA_CERT_FILE=/usr/local/share/certs/ca-root-nss.crt
4
5
if [ -z "${GIT_COMMIT}" ]; then
6
echo "No git commit id specified"
7
exit 1
8
fi
9
10
_GIT_COMMIT="${GIT_COMMIT}"
11
12
if [ ! -z "${USE_GIT_COMMIT}" -a "${USE_GIT_COMMIT}" != "${GIT_COMMIT}" ]; then
13
echo "GIT_COMMIT ${GIT_COMMIT} does not match USE_GIT_COMMIT ${USE_GIT_COMMIT}, use USE_GIT_COMMIT for test"
14
_GIT_COMMIT="${USE_GIT_COMMIT}"
15
fi
16
17
KERNCONF=${KERNCONF:-GENERIC}
18
ARTIFACT_SERVER=${ARTIFACT_SERVER:-artifact.ci.freebsd.org}
19
ARTIFACT_SUBDIR=snapshot/${FBSD_BRANCH}/${_GIT_COMMIT}/${TARGET}/${TARGET_ARCH}
20
if [ "${KERNCONF}" = "GENERIC" ]; then
21
IMG_NAME=disk-test.img
22
else
23
IMG_NAME=disk-test-${KERNCONF}.img
24
fi
25
JOB_DIR=freebsd-ci/jobs/${JOB_NAME}
26
TEST_BASE=`dirname $0`
27
28
TIMEOUT_MS=${BUILD_TIMEOUT:-5400000}
29
TIMEOUT=$((${TIMEOUT_MS} / 1000))
30
TIMEOUT_EXPECT=$((${TIMEOUT} - 60))
31
TIMEOUT_VM=$((${TIMEOUT_EXPECT} - 120))
32
33
: ${VM_CPU_COUNT:=2}
34
: ${VM_MEM_SIZE:=8192m}
35
36
EXTRA_DISK_NUM=5
37
BHYVE_EXTRA_DISK_PARAM=""
38
39
METADIR=meta
40
METAOUTDIR=meta-out
41
42
fetch https://${ARTIFACT_SERVER}/${ARTIFACT_SUBDIR}/${IMG_NAME}.zst
43
zstd --rm -fd ${IMG_NAME}.zst
44
45
# for cam(4) tests
46
truncate -s 128m disk-cam
47
BHYVE_EXTRA_DISK_PARAM="${BHYVE_EXTRA_DISK_PARAM} -s 4:0,ahci-hd,disk-cam"
48
49
for i in `jot ${EXTRA_DISK_NUM}`; do
50
truncate -s 128m disk${i}
51
BHYVE_EXTRA_DISK_PARAM="${BHYVE_EXTRA_DISK_PARAM} -s $((i + 4)):0,virtio-blk,disk${i}"
52
done
53
54
# prepare meta disk to pass information to testvm
55
rm -fr ${METADIR}
56
mkdir ${METADIR}
57
cp -R ${JOB_DIR}/${METADIR}/ ${METADIR}/
58
for i in ${USE_TEST_SUBR}; do
59
cp ${TEST_BASE}/subr/${i} ${METADIR}/
60
done
61
touch ${METADIR}/auto-shutdown
62
sh -ex ${TEST_BASE}/create-meta.sh
63
64
FBSD_BRANCH_SHORT=`echo ${FBSD_BRANCH} | sed -e 's,.*-,,'`
65
TEST_VM_NAME="testvm-${FBSD_BRANCH_SHORT}-${TARGET_ARCH}-${BUILD_NUMBER}"
66
67
if [ "${USE_QEMU}" = 1 ]; then
68
# run test VM image with qemu
69
set +e
70
71
: ${QEMU_DEVICES:="-device virtio-blk,drive=hd0 -device virtio-blk,drive=hd1"}
72
timeout -k 60 ${TIMEOUT_VM} /usr/local/bin/qemu-system-${QEMU_ARCH} \
73
-machine ${QEMU_MACHINE} \
74
-smp ${VM_CPU_COUNT} \
75
-m ${VM_MEM_SIZE} \
76
-nographic \
77
-no-reboot \
78
${QEMU_EXTRA_PARAM} \
79
-drive if=none,file=${IMG_NAME},format=raw,id=hd0 \
80
-drive if=none,file=meta.tar,format=raw,id=hd1 \
81
${QEMU_DEVICES}
82
rc=$?
83
echo "qemu return code = $rc"
84
else
85
# run test VM image with bhyve
86
sudo /usr/sbin/bhyvectl --vm=${TEST_VM_NAME} --destroy || true
87
sudo /usr/sbin/bhyveload -c stdio -m ${VM_MEM_SIZE} -d ${IMG_NAME} ${TEST_VM_NAME}
88
set +e
89
expect -c "set timeout ${TIMEOUT_EXPECT}; \
90
spawn sudo /usr/bin/timeout -k 60 ${TIMEOUT_VM} /usr/sbin/bhyve \
91
-c ${VM_CPU_COUNT} -m ${VM_MEM_SIZE} -A -H -P \
92
-s 0:0,hostbridge \
93
-s 1:0,lpc \
94
-s 2:0,virtio-blk,${IMG_NAME} \
95
-s 3:0,virtio-blk,meta.tar \
96
${BHYVE_EXTRA_DISK_PARAM} \
97
-l com1,stdio \
98
${TEST_VM_NAME}; \
99
expect { eof }"
100
rc=$?
101
echo "bhyve return code = $rc"
102
sudo /usr/sbin/bhyvectl --vm=${TEST_VM_NAME} --destroy
103
fi
104
105
# extract test result
106
sh -ex ${TEST_BASE}/extract-meta.sh
107
rm -f test-report.*
108
mv ${METAOUTDIR}/test-report.* .
109
110
# Turn known test failures into xfails.
111
report="test-report.xml"
112
if [ -e ${JOB_DIR}/xfail-list -a -e "${report}" ]; then
113
while IFS=":" read classname name; do
114
xpath="/testsuite/testcase[@classname=\"${classname}\"][@name=\"${name}\"]"
115
if ! xml sel -Q -t -c "${xpath}/*[self::error or self::failure]" "${report}"; then
116
if ! xml sel -Q -t -c "${xpath}" "${report}"; then
117
echo "Testcase ${classname}:${name} vanished"
118
else
119
echo "Testcase ${classname}:${name} unexpectedly succeeded"
120
fi
121
else
122
xml ed -P -L -r "${xpath}/*[self::error or self::failure]" -v skipped "${report}"
123
fi
124
done < ${JOB_DIR}/xfail-list
125
fi
126
127
rm -f disk-cam
128
for i in `jot ${EXTRA_DISK_NUM}`; do
129
rm -f disk${i}
130
done
131
rm -f ${IMG_NAME}
132
133