Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions diam/server_sctp_tls_restart_wire_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
// RFC 9846 §6.2 covers failed TLS closure. Go 1.27.2's readRecordOrCCS caches
// non-temporary transport read errors, so that TLS reader cannot resume.
func TestBuiltInSCTPTLSRestartWireServer(t *testing.T) {
addr := os.Getenv("F4_SERVER_ADDR")
addr := os.Getenv("SCTP_TLS_RESTART_SERVER_ADDR")
if addr == "" {
t.Skip("requires the two-container SCTP/TLS restart harness")
}
Expand Down Expand Up @@ -72,7 +72,7 @@ func TestBuiltInSCTPTLSRestartWireServer(t *testing.T) {
case <-time.After(10 * time.Second):
t.Fatal("real TLS CER/CEA did not finish")
}
if err := os.WriteFile("/tmp/f4-admitted", []byte("ready"), 0600); err != nil {
if err := os.WriteFile("/tmp/sctp-tls-restart-admitted", []byte("ready"), 0600); err != nil {
t.Fatal(err)
}
// No ReadTimeout is configured. The restarted peer sends no DATA, so a
Expand All @@ -99,7 +99,7 @@ func TestBuiltInSCTPTLSRestartWireServer(t *testing.T) {
func TestBuiltInSCTPTLSRestartWireClient(t *testing.T) {
testDict := newTestDictionary(dict.Base())

addr, local, phase := os.Getenv("F4_SERVER_ADDR"), os.Getenv("F4_CLIENT_ADDR"), os.Getenv("F4_PHASE")
addr, local, phase := os.Getenv("SCTP_TLS_RESTART_SERVER_ADDR"), os.Getenv("SCTP_TLS_RESTART_CLIENT_ADDR"), os.Getenv("SCTP_TLS_RESTART_PHASE")
if addr == "" || local == "" || phase == "" {
t.Skip("requires the two-container SCTP/TLS restart harness")
}
Expand Down Expand Up @@ -160,7 +160,7 @@ func TestBuiltInSCTPTLSRestartWireClient(t *testing.T) {
t.Fatal("TLS CEA identifiers do not match")
}
t.Log("INITIAL_TLS_CER_CEA_COMPLETE SO_LINGER=0")
if err := os.WriteFile("/tmp/f4-client-ready", []byte("ready"), 0600); err != nil {
if err := os.WriteFile("/tmp/sctp-tls-restart-client-ready", []byte("ready"), 0600); err != nil {
t.Fatal(err)
}
select {}
Expand Down
18 changes: 9 additions & 9 deletions diam/testdata/sctptlsrestart/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ variant=basic
source=$(realpath "$1")
output=$(realpath -m "$2")
fixture=
build=(test -c -tags=sctptlsrestart -o /out/f4.test ./diam)
binary=f4.test
wire_path=/f4.test
build=(test -c -tags=sctptlsrestart -o /out/sctp-tls-restart.test ./diam)
binary=sctp-tls-restart.test
wire_path=/sctp-tls-restart.test
server_port=5868
client_port=43869
capture_suffix=-wire
Expand All @@ -21,20 +21,20 @@ analyze_on_failure=true
hashes=(diam/server.go diam/network_sctp.go diam/accepted_generation.go diam/server_sctp_tls_restart_wire_test.go)

wire_scenario() {
docker exec -d -e F4_SERVER_ADDR="$sip:5868" "$server" sh -c '/f4.test -test.run "^TestBuiltInSCTPTLSRestartWireServer$" -test.v -test.timeout 20s >/tmp/server.log 2>&1 & pid=$!; echo "$pid" >/tmp/server.pid; wait "$pid"; echo "$?" >/tmp/server.exit'
docker exec -d -e SCTP_TLS_RESTART_SERVER_ADDR="$sip:5868" "$server" sh -c '/sctp-tls-restart.test -test.run "^TestBuiltInSCTPTLSRestartWireServer$" -test.v -test.timeout 20s >/tmp/server.log 2>&1 & pid=$!; echo "$pid" >/tmp/server.pid; wait "$pid"; echo "$?" >/tmp/server.exit'
sleep .5
docker exec -d -e F4_SERVER_ADDR="$sip:5868" -e F4_CLIENT_ADDR="$cip:43869" -e F4_PHASE=initial "$client" sh -c '/f4.test -test.run "^TestBuiltInSCTPTLSRestartWireClient$" -test.v -test.timeout 20s >/tmp/initial.log 2>&1 & pid=$!; echo "$pid" >/tmp/initial.pid; wait "$pid"; echo "$?" >/tmp/initial.exit'
for ((i=0;i<100;i++)); do if docker exec "$client" test -s /tmp/f4-client-ready; then break; fi; sleep .1; done
docker exec "$client" test -s /tmp/f4-client-ready
docker exec "$server" test -s /tmp/f4-admitted
docker exec -d -e SCTP_TLS_RESTART_SERVER_ADDR="$sip:5868" -e SCTP_TLS_RESTART_CLIENT_ADDR="$cip:43869" -e SCTP_TLS_RESTART_PHASE=initial "$client" sh -c '/sctp-tls-restart.test -test.run "^TestBuiltInSCTPTLSRestartWireClient$" -test.v -test.timeout 20s >/tmp/initial.log 2>&1 & pid=$!; echo "$pid" >/tmp/initial.pid; wait "$pid"; echo "$?" >/tmp/initial.exit'
for ((i=0;i<100;i++)); do if docker exec "$client" test -s /tmp/sctp-tls-restart-client-ready; then break; fi; sleep .1; done
docker exec "$client" test -s /tmp/sctp-tls-restart-client-ready
docker exec "$server" test -s /tmp/sctp-tls-restart-admitted
docker exec "$client" sh -c 'kill -KILL "$(cat /tmp/initial.pid)"'
for ((i=0;i<30;i++)); do if docker exec "$client" test -s /tmp/initial.exit; then break; fi; sleep .1; done
docker exec "$client" test -s /tmp/initial.exit
docker cp "$client:/tmp/initial.exit" "$out/initial.exit" >/dev/null
if [[ $(cat "$out/initial.exit") != 137 ]]; then echo "initial client was not killed and reaped" >&2; exit 1; fi
sleep .15
set +e
docker exec -e F4_SERVER_ADDR="$sip:5868" -e F4_CLIENT_ADDR="$cip:43869" -e F4_PHASE=restart "$client" /f4.test -test.run '^TestBuiltInSCTPTLSRestartWireClient$' -test.v -test.timeout 12s > "$out/restart.log" 2>&1
docker exec -e SCTP_TLS_RESTART_SERVER_ADDR="$sip:5868" -e SCTP_TLS_RESTART_CLIENT_ADDR="$cip:43869" -e SCTP_TLS_RESTART_PHASE=restart "$client" /sctp-tls-restart.test -test.run '^TestBuiltInSCTPTLSRestartWireClient$' -test.v -test.timeout 12s > "$out/restart.log" 2>&1
client_result=$?
set -e
for ((i=0;i<50;i++)); do if docker exec "$server" test -s /tmp/server.exit; then break; fi; sleep .1; done
Expand Down
6 changes: 5 additions & 1 deletion scripts/check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,12 @@ check_format() {
}

check_test() {
local file v
for file in scripts/sctp-wire/*_test.py; do
echo "== $file"
python3 -B "$file" || return 1
done
sctp_loaded || return 1
local v
for v in "$GO_STABLE" "$GO_OLDSTABLE"; do
echo "== $v"
in_container "$v" go test ./... -count=1 -timeout 900s || return 1
Expand Down
38 changes: 27 additions & 11 deletions scripts/sctp-wire/harness.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@ wire_stop() {
fi
}

wire_cleanup() {
wire_cleanup() (
# Keep the deadline wrapper local to cleanup, including stop/wait helpers.
docker() {
command timeout --kill-after="${SCTP_WIRE_CLEANUP_KILL_AFTER:-5s}" \
"${SCTP_WIRE_CLEANUP_TIMEOUT:-60s}" docker "$@"
}
local peer child signal file destination resource
for peer in "$client" "$server"; do
# Never stop or remove a resource owned by another run.
Expand Down Expand Up @@ -52,17 +57,28 @@ wire_cleanup() {
[[ -n $resource ]] || continue
docker rm -f -v "$resource" >/dev/null 2>&1 || true
done < <(docker ps -aq --filter "label=harness=$run")
docker ps -a --filter "label=harness=$run" --format '{{.Names}}' > "$out/cleanup-containers.txt"
docker volume ls --filter "label=harness=$run" --format '{{.Name}}' > "$out/cleanup-volumes.txt"
docker network ls --filter "label=harness=$run" --format '{{.Name}}' > "$out/cleanup-networks.txt"
docker ps -a --filter "name=$run" --format '{{.Names}}' > "$out/cleanup-name.txt"
docker volume ls --filter "name=$run" --format '{{.Name}}' > "$out/cleanup-name-volumes.txt"
docker network ls --filter "name=$run" --format '{{.Name}}' > "$out/cleanup-name-networks.txt"
}
docker ps -a --filter "label=harness=$run" --format '{{.Names}}' > "$out/cleanup-containers.txt" || true
docker volume ls --filter "label=harness=$run" --format '{{.Name}}' > "$out/cleanup-volumes.txt" || true
docker network ls --filter "label=harness=$run" --format '{{.Name}}' > "$out/cleanup-networks.txt" || true
docker ps -a --filter "name=$run" --format '{{.Names}}' > "$out/cleanup-name.txt" || true
docker volume ls --filter "name=$run" --format '{{.Name}}' > "$out/cleanup-name-volumes.txt" || true
docker network ls --filter "name=$run" --format '{{.Name}}' > "$out/cleanup-name-networks.txt" || true
)

wire_exit() {
wire_cleanup
rm -rf "$rig"
local status=$? int_handler term_handler
int_handler=$(trap -p INT)
term_handler=$(trap -p TERM)
# Further signals must not abandon cleanup or replace the saved status.
trap '' INT TERM
wire_cleanup || true
rm -rf "$rig" || true
# EXIT keeps its shield through termination; explicit calls restore handlers.
if [[ ${1:-} != EXIT ]]; then
eval "${int_handler:-trap - INT}"
eval "${term_handler:-trap - TERM}"
fi
return "$status"
}

wire_build() {
Expand Down Expand Up @@ -167,7 +183,7 @@ wire_run() {
server=$run-server
client=$run-client
builder=$run-build
trap wire_exit EXIT
trap 'wire_exit EXIT' EXIT
trap 'exit 130' INT TERM
printf '%s\n' "$run" > "$out/run-id"
wire_build
Expand Down
Loading
Loading