From cb466fbc02b83c5788def5fef73f93573f5c1f70 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 5 Nov 2025 07:09:41 +0000 Subject: test: improve test script with unique names and random ports - Remove python3 dependency for port selection - Use RANDOM for port selection in range 20000-30000 - Use unique container names based on PID: grasp-audit-run-294183 - Use unique temp directories: grasp-audit-run-XXXXXXXXXX - Ensures parallel test runs don't conflict --- grasp-audit/README.md | 90 +++++++++++++++++++++++------------- grasp-audit/src/specs/nip01_smoke.rs | 4 +- grasp-audit/test-ngit-relay.sh | 50 ++++++++++++-------- 3 files changed, 93 insertions(+), 51 deletions(-) diff --git a/grasp-audit/README.md b/grasp-audit/README.md index a2b0024..7c0450b 100644 --- a/grasp-audit/README.md +++ b/grasp-audit/README.md @@ -142,13 +142,18 @@ Some NIP-01 smoke tests (like `send_receive_event`) will fail because ngit-relay non-Git events. This is expected behavior - the validation tests should still pass. ```bash -# 1. Create temporary directories for clean state -mkdir -p /tmp/ngit-test/{repos,blossom,relay-db,logs} +# 1. Create temporary directory with unique name for clean state +TEST_DIR=$(mktemp -d -t grasp-audit-run-XXXXXXXXXX) +mkdir -p "$TEST_DIR"/{repos,blossom,relay-db,logs} -# 2. Start ngit-relay with fresh data (using port 8082 to avoid conflicts) +# 2. Pick a random port to avoid conflicts +PORT=$((20000 + RANDOM % 10000)) + +# 3. Start ngit-relay with fresh data +CONTAINER_NAME="grasp-audit-run-$" docker run --rm -d \ - --name ngit-relay-test \ - -p 8082:8081 \ + --name "$CONTAINER_NAME" \ + -p "$PORT:8081" \ -e NGIT_DOMAIN=localhost \ -e NGIT_RELAY_NAME="ngit-relay test instance" \ -e NGIT_RELAY_DESCRIPTION="Test instance for grasp-audit" \ @@ -157,17 +162,17 @@ docker run --rm -d \ -e NGIT_PROACTIVE_SYNC_BLOSSOM=false \ -e NGIT_PROACTIVE_SYNC_NOSTR=false \ -e NGIT_LOG_LEVEL=INFO \ - -v /tmp/ngit-test/repos:/srv/ngit-relay/repos \ - -v /tmp/ngit-test/blossom:/srv/ngit-relay/blossom \ - -v /tmp/ngit-test/relay-db:/srv/ngit-relay/relay-db \ - -v /tmp/ngit-test/logs:/var/log/ngit-relay \ + -v "$TEST_DIR/repos:/srv/ngit-relay/repos" \ + -v "$TEST_DIR/blossom:/srv/ngit-relay/blossom" \ + -v "$TEST_DIR/relay-db:/srv/ngit-relay/relay-db" \ + -v "$TEST_DIR/logs:/var/log/ngit-relay" \ ghcr.io/danconwaydev/ngit-relay:latest -# 3. Wait for relay to start +# 4. Wait for relay to start sleep 3 -# 4. Run tests against ngit-relay on port 8082 -RELAY_URL=ws://localhost:8082 cargo test --ignored +# 5. Run tests against ngit-relay +RELAY_URL="ws://localhost:$PORT" cargo test --ignored # Expected results when testing against ngit-relay: # - โœ“ websocket_connection (basic connectivity) @@ -187,9 +192,10 @@ RELAY_URL=ws://localhost:8082 cargo test --ignored # The test will exit with an error, but the validation tests passing # is what matters for GRASP compliance. -# 5. Stop and cleanup -docker stop ngit-relay-test -rm -rf /tmp/ngit-test +# 6. Stop and cleanup +docker stop "$CONTAINER_NAME" +docker run --rm -v "$TEST_DIR:/data" alpine sh -c "rm -rf /data/*" 2>/dev/null || true +rm -rf "$TEST_DIR" ``` **Why fresh directories?** @@ -235,14 +241,37 @@ Save this as `test-ngit-relay.sh`: #!/bin/bash set -e -echo "๐Ÿงน Cleaning up old test data..." -rm -rf /tmp/ngit-test -mkdir -p /tmp/ngit-test/{repos,blossom,relay-db,logs} +# Create temporary directory with random name +TEST_DIR=$(mktemp -d -t grasp-audit-run-XXXXXXXXXX) +# Pick a random port in the range 20000-30000 +PORT=$((20000 + RANDOM % 10000)) + +echo "๐Ÿงน Using temporary directory: $TEST_DIR" +echo "๐Ÿ”Œ Using port: $PORT" + +# Cleanup function +cleanup() { + echo "๐Ÿ›‘ Stopping relay..." + docker stop "grasp-audit-run-$" 2>/dev/null || true + + echo "๐Ÿงน Cleaning up temporary directory..." + docker run --rm -v "$TEST_DIR:/data" alpine sh -c "rm -rf /data/*" 2>/dev/null || true + rm -rf "$TEST_DIR" +} + +# Set trap to cleanup on exit +trap cleanup EXIT + +echo "๐Ÿ“ Creating data directories..." +mkdir -p "$TEST_DIR"/{repos,blossom,relay-db,logs} echo "๐Ÿš€ Starting ngit-relay..." +# Remove any existing container with this name +CONTAINER_NAME="grasp-audit-run-$" +docker rm -f "$CONTAINER_NAME" 2>/dev/null || true docker run --rm -d \ - --name ngit-relay-test \ - -p 8081:8081 \ + --name "$CONTAINER_NAME" \ + -p "$PORT:8081" \ -e NGIT_DOMAIN=localhost \ -e NGIT_RELAY_NAME="ngit-relay test instance" \ -e NGIT_RELAY_DESCRIPTION="Test instance for grasp-audit" \ @@ -251,23 +280,22 @@ docker run --rm -d \ -e NGIT_PROACTIVE_SYNC_BLOSSOM=false \ -e NGIT_PROACTIVE_SYNC_NOSTR=false \ -e NGIT_LOG_LEVEL=INFO \ - -v /tmp/ngit-test/repos:/srv/ngit-relay/repos \ - -v /tmp/ngit-test/blossom:/srv/ngit-relay/blossom \ - -v /tmp/ngit-test/relay-db:/srv/ngit-relay/relay-db \ - -v /tmp/ngit-test/logs:/var/log/ngit-relay \ + -v "$TEST_DIR/repos:/srv/ngit-relay/repos" \ + -v "$TEST_DIR/blossom:/srv/ngit-relay/blossom" \ + -v "$TEST_DIR/relay-db:/srv/ngit-relay/relay-db" \ + -v "$TEST_DIR/logs:/var/log/ngit-relay" \ ghcr.io/danconwaydev/ngit-relay:latest echo "โณ Waiting for relay to start..." sleep 3 echo "๐Ÿงช Running tests..." -cargo test --ignored - -echo "๐Ÿ›‘ Stopping relay..." -docker stop ngit-relay-test - -echo "๐Ÿงน Cleaning up..." -rm -rf /tmp/ngit-test +echo "" +echo "Note: ngit-relay only accepts Git-related events (NIP-34)." +echo "Some NIP-01 smoke tests will fail (expected behavior)." +echo "Validation tests should pass." +echo "" +RELAY_URL="ws://localhost:$PORT" cargo test --lib -- --ignored --nocapture echo "โœ… Done!" ``` diff --git a/grasp-audit/src/specs/nip01_smoke.rs b/grasp-audit/src/specs/nip01_smoke.rs index 20f80ea..5fddf5d 100644 --- a/grasp-audit/src/specs/nip01_smoke.rs +++ b/grasp-audit/src/specs/nip01_smoke.rs @@ -295,9 +295,9 @@ mod tests { #[tokio::test] #[ignore] // Ignore by default since it needs a running relay async fn test_smoke_tests_against_relay() { - // Use RELAY_URL env var if set, otherwise default to localhost:7000 + // RELAY_URL env var must be set - no default fallback let relay_url = std::env::var("RELAY_URL") - .unwrap_or_else(|_| "ws://localhost:7000".to_string()); + .expect("RELAY_URL environment variable must be set for integration tests"); let config = AuditConfig::ci(); let client = AuditClient::new(&relay_url, config) diff --git a/grasp-audit/test-ngit-relay.sh b/grasp-audit/test-ngit-relay.sh index b719b86..9d5eb4a 100755 --- a/grasp-audit/test-ngit-relay.sh +++ b/grasp-audit/test-ngit-relay.sh @@ -1,17 +1,37 @@ #!/bin/bash set -e -echo "๐Ÿงน Cleaning up old test data..." -# Use docker to cleanup with proper permissions -docker run --rm -v /tmp/ngit-test:/data alpine sh -c "rm -rf /data/*" 2>/dev/null || true -mkdir -p /tmp/ngit-test/{repos,blossom,relay-db,logs} +# Create temporary directory with random name +TEST_DIR=$(mktemp -d -t grasp-audit-run-XXXXXXXXXX) +# Pick a random port in the range 20000-30000 +PORT=$((20000 + RANDOM % 10000)) + +echo "๐Ÿงน Using temporary directory: $TEST_DIR" +echo "๐Ÿ”Œ Using port: $PORT" + +# Cleanup function +cleanup() { + echo "๐Ÿ›‘ Stopping relay..." + docker stop "grasp-audit-run-$" 2>/dev/null || true + + echo "๐Ÿงน Cleaning up temporary directory..." + docker run --rm -v "$TEST_DIR:/data" alpine sh -c "rm -rf /data/*" 2>/dev/null || true + rm -rf "$TEST_DIR" +} + +# Set trap to cleanup on exit +trap cleanup EXIT + +echo "๐Ÿ“ Creating data directories..." +mkdir -p "$TEST_DIR"/{repos,blossom,relay-db,logs} echo "๐Ÿš€ Starting ngit-relay..." # Remove any existing container with this name -docker rm -f ngit-relay-test 2>/dev/null || true +CONTAINER_NAME="grasp-audit-run-$" +docker rm -f "$CONTAINER_NAME" 2>/dev/null || true docker run --rm -d \ - --name ngit-relay-test \ - -p 8082:8081 \ + --name "$CONTAINER_NAME" \ + -p "$PORT:8081" \ -e NGIT_DOMAIN=localhost \ -e NGIT_RELAY_NAME="ngit-relay test instance" \ -e NGIT_RELAY_DESCRIPTION="Test instance for grasp-audit" \ @@ -20,10 +40,10 @@ docker run --rm -d \ -e NGIT_PROACTIVE_SYNC_BLOSSOM=false \ -e NGIT_PROACTIVE_SYNC_NOSTR=false \ -e NGIT_LOG_LEVEL=INFO \ - -v /tmp/ngit-test/repos:/srv/ngit-relay/repos \ - -v /tmp/ngit-test/blossom:/srv/ngit-relay/blossom \ - -v /tmp/ngit-test/relay-db:/srv/ngit-relay/relay-db \ - -v /tmp/ngit-test/logs:/var/log/ngit-relay \ + -v "$TEST_DIR/repos:/srv/ngit-relay/repos" \ + -v "$TEST_DIR/blossom:/srv/ngit-relay/blossom" \ + -v "$TEST_DIR/relay-db:/srv/ngit-relay/relay-db" \ + -v "$TEST_DIR/logs:/var/log/ngit-relay" \ ghcr.io/danconwaydev/ngit-relay:latest echo "โณ Waiting for relay to start..." @@ -35,12 +55,6 @@ echo "Note: ngit-relay only accepts Git-related events (NIP-34)." echo "Some NIP-01 smoke tests will fail (expected behavior)." echo "Validation tests should pass." echo "" -RELAY_URL=ws://localhost:8082 cargo test --lib -- --ignored --nocapture - -echo "๐Ÿ›‘ Stopping relay..." -docker stop ngit-relay-test - -echo "๐Ÿงน Cleaning up..." -docker run --rm -v /tmp/ngit-test:/data alpine sh -c "rm -rf /data/*" 2>/dev/null || true +RELAY_URL="ws://localhost:$PORT" cargo test --lib -- --ignored --nocapture echo "โœ… Done!" -- cgit v1.2.3