summaryrefslogtreecommitdiff
path: root/run_test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'run_test.sh')
-rwxr-xr-xrun_test.sh97
1 files changed, 97 insertions, 0 deletions
diff --git a/run_test.sh b/run_test.sh
new file mode 100755
index 0000000..33b53d2
--- /dev/null
+++ b/run_test.sh
@@ -0,0 +1,97 @@
1#!/bin/bash
2set -e
3
4DIR=/root/w/packet_ebpf
5CERTS=/tmp/ebpf_certs
6PIDS=()
7
8# Cleanup on exit
9cleanup() { kill "${PIDS[@]}" 2>/dev/null; rm -rf "$CERTS"; }
10trap cleanup EXIT
11
12# Start background process and track PID
13bg() { "$@" &>/dev/null & PIDS+=($!); }
14
15# Print result
16ok() { echo " $1: OK"; }
17fail() { echo " $1: FAIL"; }
18
19# Build
20echo "=== Building ==="
21cd "$DIR"
22cargo xtask build-ebpf --release &>/dev/null
23cargo build --release -p packet-detector &>/dev/null
24echo "Done"
25echo
26
27# Test 1: UDP - test actual packet delivery
28echo "=== UDP Magic Word (only 'hell0123' passes) ==="
29
30# Start XDP filter
31./target/release/packet-detector lo &>/dev/null & PIDS+=($!)
32sleep 1
33
34RECV_FILE=$(mktemp)
35
36# Test valid packet
37timeout 2 bash -c "nc -u -l 127.0.0.1 9999 > $RECV_FILE" &
38sleep 0.3
39echo 'hell0123' | nc -u -w1 127.0.0.1 9999 2>/dev/null || true
40sleep 0.5
41grep -q 'hell0123' "$RECV_FILE" && ok "hell0123 passed (XDP_PASS)" || fail "hell0123 dropped"
42
43# Test invalid packet
44> "$RECV_FILE" # clear file
45timeout 2 bash -c "nc -u -l 127.0.0.1 9999 > $RECV_FILE" &
46sleep 0.3
47echo 'wrongmsg' | nc -u -w1 127.0.0.1 9999 2>/dev/null || true
48sleep 0.5
49grep -q 'wrongmsg' "$RECV_FILE" && fail "wrongmsg passed (should drop)" || ok "wrongmsg dropped (XDP_DROP)"
50
51rm -f "$RECV_FILE"
52kill "${PIDS[-1]}" 2>/dev/null; unset 'PIDS[-1]'
53echo
54
55# Test 2: TLS
56echo "=== TLS Certificate ==="
57
58# Create two separate PKI environments
59BAD_CERTS="$CERTS/bad"
60GOOD_CERTS="$CERTS/good"
61mkdir -p "$BAD_CERTS" "$GOOD_CERTS"
62
63# Start server with UNTRUSTED certs on port 8443
64cd "$BAD_CERTS"
65bg "$DIR/target/release/tls_server" 8443
66sleep 3
67
68# Start server with TRUSTED certs on port 8444
69cd "$GOOD_CERTS"
70bg "$DIR/target/release/tls_server" 8444
71sleep 3
72
73# Start packet-detector with ONLY the good CA (won't trust bad server)
74"$DIR/target/release/packet-detector" lo "$GOOD_CERTS/ca_cert.pem" &>/dev/null & PIDS+=($!)
75sleep 2
76
77# Test 1: Connect to BAD server (untrusted cert)
78# Handshake completes, but HTTP request should fail (blocked after validation)
79cd "$BAD_CERTS"
80BAD_OUT=$(timeout 5 "$DIR/target/release/tls_client" 127.0.0.1 8443 2>&1) || true
81if echo "$BAD_OUT" | grep -q "HTTP/1.1 200"; then
82 fail "Untrusted cert - HTTP should have been blocked"
83else
84 ok "Untrusted cert - HTTP blocked (XDP_DROP after validation)"
85fi
86
87# Test 2: Connect to GOOD server (trusted cert) - should succeed fully
88cd "$GOOD_CERTS"
89GOOD_OUT=$(timeout 5 "$DIR/target/release/tls_client" 127.0.0.1 8444 2>&1) || true
90if echo "$GOOD_OUT" | grep -q "HTTP/1.1 200"; then
91 ok "Trusted cert - HTTP succeeded (XDP_PASS)"
92else
93 fail "Trusted cert - HTTP failed"
94fi
95
96echo
97echo "=== Done ==="