#!/usr/bin/env bash # # Run CNI plugin tests. # # This needs sudo, as we'll be creating net interfaces. # set -e # switch into the repo root directory cd "$(dirname "$0")" # Build all plugins before testing . ./build_linux.sh echo "Running tests" testrun() { sudo -E sh -c "umask 0; PATH=${GOPATH}/bin:$(pwd)/bin:${PATH} go test -race $*" } ensure_sysctl() { local key local val local existing key="$1" val="$2" existing="$(sysctl -ben "$key")" sysctl -r if [ "$val" -ne "$existing" ]; then echo "sudo sysctl -we '$key'='$val'" sudo sysctl -we "$key"="$val" fi } COVERALLS=${COVERALLS:-""} if [ -n "${COVERALLS}" ]; then echo "with coverage profile generation..." else echo "without coverage profile generation..." fi PKG=${PKG:-$(go list ./... | xargs echo)} i=0 for t in ${PKG}; do if [ -n "${COVERALLS}" ]; then COVERFLAGS="-covermode atomic -coverprofile ${i}.coverprofile" fi echo "${t}" testrun "${COVERFLAGS:-""} ${t}" i=$((i+1)) done # Run the pkg/ns tests as non root user mkdir -p /tmp/cni-rootless ensure_sysctl kernel.unprivileged_userns_clone 1 ensure_sysctl kernel.apparmor_restrict_unprivileged_userns 0 (export XDG_RUNTIME_DIR=/tmp/cni-rootless; cd pkg/ns/; unshare -rmn go test)