Blob


1 #!/bin/sh
2 #
3 # Run external tests, requires a common lisp interpreter (sbcl by
4 # default) to be available.
6 SUDO=${SUDO:-doas}
7 USER=${USER?:user not set}
8 SBCL=${SBCL:-sbcl}
10 set -e
12 if ! which kamid 2>/dev/null >/dev/null; then
13 echo "can't find kamid in PATH" >&2
14 exit 1
15 fi
17 # gencerts name
18 gencerts() {
19 echo "generating keypairs for $1..."
20 openssl req -x509 \
21 -newkey rsa:4096 \
22 -out "$1.pem" \
23 -keyout "$1.key" \
24 -days 365 \
25 -nodes \
26 -subj "/CN=$1"
27 }
29 # h cert
30 h() {
31 printf "SHA256:"
32 openssl x509 -in "$1" -noout -fingerprint -sha256 | \
33 sed -e 's/^.*=//' -e 's/://g' | \
34 tr A-Z a-z
35 }
37 if [ ! -f client.pem -o ! -f client.key ]; then
38 gencerts client
39 fi
41 if [ ! -f kamid.pem -o ! -f kamid.key ]; then
42 gencerts kamid
43 fi
45 kamid_hash="$(h client.pem)"
46 tmpdir="$(mktemp -d -t kamid-regress.XXXXXXXXXX)"
47 testroot="$tmpdir/root"
49 cp -R ../root/ "$tmpdir"
51 cat > regress.conf <<EOF
52 pki localhost cert "$PWD/kamid.pem"
53 pki localhost key "$PWD/kamid.key"
55 table users { "$kamid_hash" => "flan" }
56 table virt { "flan" => "$USER" }
57 table data { "flan" => "$testroot" }
59 listen on localhost port 1337 tls pki localhost \
60 auth <users> \
61 virtual <virt> \
62 userdata <data>
63 EOF
65 logfile="$tmpdir/$(date +%Y-%m-%d-%H-%M).log"
67 export REGRESS_CERT="$PWD/client.pem"
68 export REGRESS_KEY="$PWD/client.key"
69 export REGRESS_HOSTNAME=localhost
70 export REGRESS_PORT=1337
71 export REGRESS_ROOT="$testroot"
73 echo "REGRESS_CERT: $REGRESS_CERT"
74 echo "REGRESS_KEY: $REGRESS_KEY"
75 echo "REGRESS_HOSTNAME: $REGRESS_HOSTNAME"
76 echo "REGRESS_PORT: $REGRESS_PORT"
77 echo "REGRESS_ROOT: $REGRESS_ROOT"
78 echo
80 echo "logging on $logfile"
81 ${SUDO} "$(which kamid)" -d -vvv -f regress.conf > "$logfile" 2>&1 &
83 set +e
84 cd 9p-test/ && \
85 ${SBCL} --noinform \
86 --eval "(require 'asdf)" \
87 --eval "(push \"$(pwd)/\" asdf:*central-registry*)" \
88 --eval "(asdf:make \"9p-test\")" \
89 --eval "(all-tests:run-all-tests)"
91 ret=$?
92 if [ $ret -ne 0 ]; then
93 echo
94 echo "Test failed, leaving root at $testroot"
95 sleep 1
96 else
97 rm -rf "$testroot"
98 fi
100 ${SUDO} pkill kamid
102 exit $ret