stack-orchestrator/shred-relay-lab/test.sh

78 lines
2.5 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Test procedure for shred-relay containerlab topology.
#
# Prerequisites:
# sudo containerlab deploy -t topology.yml
#
# This script configures the alpine containers and runs the end-to-end
# redirect test. Run from the shred-relay-lab/ directory.
set -euo pipefail
LAB_PREFIX="clab-shred-relay"
echo "=== Configuring biscayne ==="
sudo docker exec "$LAB_PREFIX-biscayne" sh -c '
ip addr add 172.16.1.189/31 dev eth1
ip addr add 186.233.184.235/32 dev lo
ip route add default via 172.16.1.188
'
echo "=== Configuring turbine-src ==="
sudo docker exec "$LAB_PREFIX-turbine-src" sh -c '
ip addr add 10.0.1.2/24 dev eth1
ip route add default via 64.92.84.81
'
echo "=== Starting UDP listener on biscayne:20000 ==="
sudo docker exec -d "$LAB_PREFIX-biscayne" sh -c '
nc -ul -p 20000 > /tmp/received.txt &
'
sleep 1
echo "=== Sending test shred from turbine-src to 64.92.84.81:20000 ==="
sudo docker exec "$LAB_PREFIX-turbine-src" sh -c '
echo "SHRED_PAYLOAD_TEST" | nc -u -w1 64.92.84.81 20000
'
sleep 2
echo "=== Checking biscayne received the payload ==="
RECEIVED=$(sudo docker exec "$LAB_PREFIX-biscayne" cat /tmp/received.txt 2>/dev/null || true)
if echo "$RECEIVED" | grep -q "SHRED_PAYLOAD_TEST"; then
echo "PASS: biscayne received redirected shred payload"
else
echo "FAIL: payload not received on biscayne (got: '$RECEIVED')"
fi
echo ""
echo "=== Checking traffic-policy counters on was-sw01 ==="
sudo docker exec "$LAB_PREFIX-was-sw01" Cli -c "show traffic-policy counters" 2>/dev/null || \
echo "(traffic-policy counters not available on cEOS)"
echo ""
echo "=== Verifying ping still works (non-redirected traffic) ==="
sudo docker exec "$LAB_PREFIX-turbine-src" ping -c 2 -W 2 64.92.84.81 && \
echo "PASS: ICMP to switch still works" || \
echo "FAIL: ICMP to switch broken"
echo ""
echo "=== Bonus: DNAT test (64.92.84.81:20000 -> 127.0.0.1:9000) ==="
sudo docker exec "$LAB_PREFIX-biscayne" sh -c '
apk add --no-cache iptables 2>/dev/null
iptables -t nat -A PREROUTING -p udp -d 64.92.84.81 --dport 20000 -j DNAT --to-destination 127.0.0.1:9000
nc -ul -p 9000 > /tmp/dnat-received.txt &
'
sleep 1
sudo docker exec "$LAB_PREFIX-turbine-src" sh -c '
echo "DNAT_TEST_PAYLOAD" | nc -u -w1 64.92.84.81 20000
'
sleep 2
DNAT_RECEIVED=$(sudo docker exec "$LAB_PREFIX-biscayne" cat /tmp/dnat-received.txt 2>/dev/null || true)
if echo "$DNAT_RECEIVED" | grep -q "DNAT_TEST_PAYLOAD"; then
echo "PASS: DNAT redirect to localhost:9000 works"
else
echo "FAIL: DNAT payload not received (got: '$DNAT_RECEIVED')"
fi