summaryrefslogtreecommitdiff
path: root/vendor/github.com/cilium/ebpf/run-tests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/cilium/ebpf/run-tests.sh')
-rw-r--r--vendor/github.com/cilium/ebpf/run-tests.sh91
1 files changed, 91 insertions, 0 deletions
diff --git a/vendor/github.com/cilium/ebpf/run-tests.sh b/vendor/github.com/cilium/ebpf/run-tests.sh
new file mode 100644
index 000000000..647a61aab
--- /dev/null
+++ b/vendor/github.com/cilium/ebpf/run-tests.sh
@@ -0,0 +1,91 @@
+#!/bin/bash
+# Test the current package under a different kernel.
+# Requires virtme and qemu to be installed.
+
+set -eu
+set -o pipefail
+
+if [[ "${1:-}" = "--in-vm" ]]; then
+ shift
+
+ mount -t bpf bpf /sys/fs/bpf
+ export CGO_ENABLED=0
+ export GOFLAGS=-mod=readonly
+ export GOPATH=/run/go-path
+ export GOPROXY=file:///run/go-path/pkg/mod/cache/download
+ export GOSUMDB=off
+ export GOCACHE=/run/go-cache
+
+ if [[ -d "/run/input/bpf" ]]; then
+ export KERNEL_SELFTESTS="/run/input/bpf"
+ fi
+
+ readonly output="${1}"
+ shift
+
+ echo Running tests...
+ go test -v -coverpkg=./... -coverprofile="$output/coverage.txt" -count 1 ./...
+ touch "$output/success"
+ exit 0
+fi
+
+# Pull all dependencies, so that we can run tests without the
+# vm having network access.
+go mod download
+
+# Use sudo if /dev/kvm isn't accessible by the current user.
+sudo=""
+if [[ ! -r /dev/kvm || ! -w /dev/kvm ]]; then
+ sudo="sudo"
+fi
+readonly sudo
+
+readonly kernel_version="${1:-}"
+if [[ -z "${kernel_version}" ]]; then
+ echo "Expecting kernel version as first argument"
+ exit 1
+fi
+
+readonly kernel="linux-${kernel_version}.bz"
+readonly selftests="linux-${kernel_version}-selftests-bpf.bz"
+readonly input="$(mktemp -d)"
+readonly output="$(mktemp -d)"
+readonly tmp_dir="${TMPDIR:-/tmp}"
+readonly branch="${BRANCH:-master}"
+
+fetch() {
+ echo Fetching "${1}"
+ wget -nv -N -P "${tmp_dir}" "https://github.com/cilium/ci-kernels/raw/${branch}/${1}"
+}
+
+fetch "${kernel}"
+
+if fetch "${selftests}"; then
+ mkdir "${input}/bpf"
+ tar --strip-components=4 -xjf "${tmp_dir}/${selftests}" -C "${input}/bpf"
+else
+ echo "No selftests found, disabling"
+fi
+
+echo Testing on "${kernel_version}"
+$sudo virtme-run --kimg "${tmp_dir}/${kernel}" --memory 512M --pwd \
+ --rw \
+ --rwdir=/run/input="${input}" \
+ --rwdir=/run/output="${output}" \
+ --rodir=/run/go-path="$(go env GOPATH)" \
+ --rwdir=/run/go-cache="$(go env GOCACHE)" \
+ --script-sh "PATH=\"$PATH\" $(realpath "$0") --in-vm /run/output" \
+ --qemu-opts -smp 2 # need at least two CPUs for some tests
+
+if [[ ! -e "${output}/success" ]]; then
+ echo "Test failed on ${kernel_version}"
+ exit 1
+else
+ echo "Test successful on ${kernel_version}"
+ if [[ -v COVERALLS_TOKEN ]]; then
+ goveralls -coverprofile="${output}/coverage.txt" -service=semaphore -repotoken "$COVERALLS_TOKEN"
+ fi
+fi
+
+$sudo rm -r "${input}"
+$sudo rm -r "${output}"