upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/grasp-audit
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2025-11-05 07:09:41 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2025-11-05 07:17:47 +0000
commitcb466fbc02b83c5788def5fef73f93573f5c1f70 (patch)
treeeb9d0293d2be16b8c4ed8a3a278ed9207f54b52d /grasp-audit
parent74c7b090a6ec7f749a3a79dcb0c9a0a6bc198702 (diff)
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
Diffstat (limited to 'grasp-audit')
-rw-r--r--grasp-audit/README.md90
-rw-r--r--grasp-audit/src/specs/nip01_smoke.rs4
-rwxr-xr-xgrasp-audit/test-ngit-relay.sh50
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
142non-Git events. This is expected behavior - the validation tests should still pass. 142non-Git events. This is expected behavior - the validation tests should still pass.
143 143
144```bash 144```bash
145# 1. Create temporary directories for clean state 145# 1. Create temporary directory with unique name for clean state
146mkdir -p /tmp/ngit-test/{repos,blossom,relay-db,logs} 146TEST_DIR=$(mktemp -d -t grasp-audit-run-XXXXXXXXXX)
147mkdir -p "$TEST_DIR"/{repos,blossom,relay-db,logs}
147 148
148# 2. Start ngit-relay with fresh data (using port 8082 to avoid conflicts) 149# 2. Pick a random port to avoid conflicts
150PORT=$((20000 + RANDOM % 10000))
151
152# 3. Start ngit-relay with fresh data
153CONTAINER_NAME="grasp-audit-run-$"
149docker run --rm -d \ 154docker run --rm -d \
150 --name ngit-relay-test \ 155 --name "$CONTAINER_NAME" \
151 -p 8082:8081 \ 156 -p "$PORT:8081" \
152 -e NGIT_DOMAIN=localhost \ 157 -e NGIT_DOMAIN=localhost \
153 -e NGIT_RELAY_NAME="ngit-relay test instance" \ 158 -e NGIT_RELAY_NAME="ngit-relay test instance" \
154 -e NGIT_RELAY_DESCRIPTION="Test instance for grasp-audit" \ 159 -e NGIT_RELAY_DESCRIPTION="Test instance for grasp-audit" \
@@ -157,17 +162,17 @@ docker run --rm -d \
157 -e NGIT_PROACTIVE_SYNC_BLOSSOM=false \ 162 -e NGIT_PROACTIVE_SYNC_BLOSSOM=false \
158 -e NGIT_PROACTIVE_SYNC_NOSTR=false \ 163 -e NGIT_PROACTIVE_SYNC_NOSTR=false \
159 -e NGIT_LOG_LEVEL=INFO \ 164 -e NGIT_LOG_LEVEL=INFO \
160 -v /tmp/ngit-test/repos:/srv/ngit-relay/repos \ 165 -v "$TEST_DIR/repos:/srv/ngit-relay/repos" \
161 -v /tmp/ngit-test/blossom:/srv/ngit-relay/blossom \ 166 -v "$TEST_DIR/blossom:/srv/ngit-relay/blossom" \
162 -v /tmp/ngit-test/relay-db:/srv/ngit-relay/relay-db \ 167 -v "$TEST_DIR/relay-db:/srv/ngit-relay/relay-db" \
163 -v /tmp/ngit-test/logs:/var/log/ngit-relay \ 168 -v "$TEST_DIR/logs:/var/log/ngit-relay" \
164 ghcr.io/danconwaydev/ngit-relay:latest 169 ghcr.io/danconwaydev/ngit-relay:latest
165 170
166# 3. Wait for relay to start 171# 4. Wait for relay to start
167sleep 3 172sleep 3
168 173
169# 4. Run tests against ngit-relay on port 8082 174# 5. Run tests against ngit-relay
170RELAY_URL=ws://localhost:8082 cargo test --ignored 175RELAY_URL="ws://localhost:$PORT" cargo test --ignored
171 176
172# Expected results when testing against ngit-relay: 177# Expected results when testing against ngit-relay:
173# - โœ“ websocket_connection (basic connectivity) 178# - โœ“ websocket_connection (basic connectivity)
@@ -187,9 +192,10 @@ RELAY_URL=ws://localhost:8082 cargo test --ignored
187# The test will exit with an error, but the validation tests passing 192# The test will exit with an error, but the validation tests passing
188# is what matters for GRASP compliance. 193# is what matters for GRASP compliance.
189 194
190# 5. Stop and cleanup 195# 6. Stop and cleanup
191docker stop ngit-relay-test 196docker stop "$CONTAINER_NAME"
192rm -rf /tmp/ngit-test 197docker run --rm -v "$TEST_DIR:/data" alpine sh -c "rm -rf /data/*" 2>/dev/null || true
198rm -rf "$TEST_DIR"
193``` 199```
194 200
195**Why fresh directories?** 201**Why fresh directories?**
@@ -235,14 +241,37 @@ Save this as `test-ngit-relay.sh`:
235#!/bin/bash 241#!/bin/bash
236set -e 242set -e
237 243
238echo "๐Ÿงน Cleaning up old test data..." 244# Create temporary directory with random name
239rm -rf /tmp/ngit-test 245TEST_DIR=$(mktemp -d -t grasp-audit-run-XXXXXXXXXX)
240mkdir -p /tmp/ngit-test/{repos,blossom,relay-db,logs} 246# Pick a random port in the range 20000-30000
247PORT=$((20000 + RANDOM % 10000))
248
249echo "๐Ÿงน Using temporary directory: $TEST_DIR"
250echo "๐Ÿ”Œ Using port: $PORT"
251
252# Cleanup function
253cleanup() {
254 echo "๐Ÿ›‘ Stopping relay..."
255 docker stop "grasp-audit-run-$" 2>/dev/null || true
256
257 echo "๐Ÿงน Cleaning up temporary directory..."
258 docker run --rm -v "$TEST_DIR:/data" alpine sh -c "rm -rf /data/*" 2>/dev/null || true
259 rm -rf "$TEST_DIR"
260}
261
262# Set trap to cleanup on exit
263trap cleanup EXIT
264
265echo "๐Ÿ“ Creating data directories..."
266mkdir -p "$TEST_DIR"/{repos,blossom,relay-db,logs}
241 267
242echo "๐Ÿš€ Starting ngit-relay..." 268echo "๐Ÿš€ Starting ngit-relay..."
269# Remove any existing container with this name
270CONTAINER_NAME="grasp-audit-run-$"
271docker rm -f "$CONTAINER_NAME" 2>/dev/null || true
243docker run --rm -d \ 272docker run --rm -d \
244 --name ngit-relay-test \ 273 --name "$CONTAINER_NAME" \
245 -p 8081:8081 \ 274 -p "$PORT:8081" \
246 -e NGIT_DOMAIN=localhost \ 275 -e NGIT_DOMAIN=localhost \
247 -e NGIT_RELAY_NAME="ngit-relay test instance" \ 276 -e NGIT_RELAY_NAME="ngit-relay test instance" \
248 -e NGIT_RELAY_DESCRIPTION="Test instance for grasp-audit" \ 277 -e NGIT_RELAY_DESCRIPTION="Test instance for grasp-audit" \
@@ -251,23 +280,22 @@ docker run --rm -d \
251 -e NGIT_PROACTIVE_SYNC_BLOSSOM=false \ 280 -e NGIT_PROACTIVE_SYNC_BLOSSOM=false \
252 -e NGIT_PROACTIVE_SYNC_NOSTR=false \ 281 -e NGIT_PROACTIVE_SYNC_NOSTR=false \
253 -e NGIT_LOG_LEVEL=INFO \ 282 -e NGIT_LOG_LEVEL=INFO \
254 -v /tmp/ngit-test/repos:/srv/ngit-relay/repos \ 283 -v "$TEST_DIR/repos:/srv/ngit-relay/repos" \
255 -v /tmp/ngit-test/blossom:/srv/ngit-relay/blossom \ 284 -v "$TEST_DIR/blossom:/srv/ngit-relay/blossom" \
256 -v /tmp/ngit-test/relay-db:/srv/ngit-relay/relay-db \ 285 -v "$TEST_DIR/relay-db:/srv/ngit-relay/relay-db" \
257 -v /tmp/ngit-test/logs:/var/log/ngit-relay \ 286 -v "$TEST_DIR/logs:/var/log/ngit-relay" \
258 ghcr.io/danconwaydev/ngit-relay:latest 287 ghcr.io/danconwaydev/ngit-relay:latest
259 288
260echo "โณ Waiting for relay to start..." 289echo "โณ Waiting for relay to start..."
261sleep 3 290sleep 3
262 291
263echo "๐Ÿงช Running tests..." 292echo "๐Ÿงช Running tests..."
264cargo test --ignored 293echo ""
265 294echo "Note: ngit-relay only accepts Git-related events (NIP-34)."
266echo "๐Ÿ›‘ Stopping relay..." 295echo "Some NIP-01 smoke tests will fail (expected behavior)."
267docker stop ngit-relay-test 296echo "Validation tests should pass."
268 297echo ""
269echo "๐Ÿงน Cleaning up..." 298RELAY_URL="ws://localhost:$PORT" cargo test --lib -- --ignored --nocapture
270rm -rf /tmp/ngit-test
271 299
272echo "โœ… Done!" 300echo "โœ… Done!"
273``` 301```
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 {
295 #[tokio::test] 295 #[tokio::test]
296 #[ignore] // Ignore by default since it needs a running relay 296 #[ignore] // Ignore by default since it needs a running relay
297 async fn test_smoke_tests_against_relay() { 297 async fn test_smoke_tests_against_relay() {
298 // Use RELAY_URL env var if set, otherwise default to localhost:7000 298 // RELAY_URL env var must be set - no default fallback
299 let relay_url = std::env::var("RELAY_URL") 299 let relay_url = std::env::var("RELAY_URL")
300 .unwrap_or_else(|_| "ws://localhost:7000".to_string()); 300 .expect("RELAY_URL environment variable must be set for integration tests");
301 301
302 let config = AuditConfig::ci(); 302 let config = AuditConfig::ci();
303 let client = AuditClient::new(&relay_url, config) 303 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 @@
1#!/bin/bash 1#!/bin/bash
2set -e 2set -e
3 3
4echo "๐Ÿงน Cleaning up old test data..." 4# Create temporary directory with random name
5# Use docker to cleanup with proper permissions 5TEST_DIR=$(mktemp -d -t grasp-audit-run-XXXXXXXXXX)
6docker run --rm -v /tmp/ngit-test:/data alpine sh -c "rm -rf /data/*" 2>/dev/null || true 6# Pick a random port in the range 20000-30000
7mkdir -p /tmp/ngit-test/{repos,blossom,relay-db,logs} 7PORT=$((20000 + RANDOM % 10000))
8
9echo "๐Ÿงน Using temporary directory: $TEST_DIR"
10echo "๐Ÿ”Œ Using port: $PORT"
11
12# Cleanup function
13cleanup() {
14 echo "๐Ÿ›‘ Stopping relay..."
15 docker stop "grasp-audit-run-$" 2>/dev/null || true
16
17 echo "๐Ÿงน Cleaning up temporary directory..."
18 docker run --rm -v "$TEST_DIR:/data" alpine sh -c "rm -rf /data/*" 2>/dev/null || true
19 rm -rf "$TEST_DIR"
20}
21
22# Set trap to cleanup on exit
23trap cleanup EXIT
24
25echo "๐Ÿ“ Creating data directories..."
26mkdir -p "$TEST_DIR"/{repos,blossom,relay-db,logs}
8 27
9echo "๐Ÿš€ Starting ngit-relay..." 28echo "๐Ÿš€ Starting ngit-relay..."
10# Remove any existing container with this name 29# Remove any existing container with this name
11docker rm -f ngit-relay-test 2>/dev/null || true 30CONTAINER_NAME="grasp-audit-run-$"
31docker rm -f "$CONTAINER_NAME" 2>/dev/null || true
12docker run --rm -d \ 32docker run --rm -d \
13 --name ngit-relay-test \ 33 --name "$CONTAINER_NAME" \
14 -p 8082:8081 \ 34 -p "$PORT:8081" \
15 -e NGIT_DOMAIN=localhost \ 35 -e NGIT_DOMAIN=localhost \
16 -e NGIT_RELAY_NAME="ngit-relay test instance" \ 36 -e NGIT_RELAY_NAME="ngit-relay test instance" \
17 -e NGIT_RELAY_DESCRIPTION="Test instance for grasp-audit" \ 37 -e NGIT_RELAY_DESCRIPTION="Test instance for grasp-audit" \
@@ -20,10 +40,10 @@ docker run --rm -d \
20 -e NGIT_PROACTIVE_SYNC_BLOSSOM=false \ 40 -e NGIT_PROACTIVE_SYNC_BLOSSOM=false \
21 -e NGIT_PROACTIVE_SYNC_NOSTR=false \ 41 -e NGIT_PROACTIVE_SYNC_NOSTR=false \
22 -e NGIT_LOG_LEVEL=INFO \ 42 -e NGIT_LOG_LEVEL=INFO \
23 -v /tmp/ngit-test/repos:/srv/ngit-relay/repos \ 43 -v "$TEST_DIR/repos:/srv/ngit-relay/repos" \
24 -v /tmp/ngit-test/blossom:/srv/ngit-relay/blossom \ 44 -v "$TEST_DIR/blossom:/srv/ngit-relay/blossom" \
25 -v /tmp/ngit-test/relay-db:/srv/ngit-relay/relay-db \ 45 -v "$TEST_DIR/relay-db:/srv/ngit-relay/relay-db" \
26 -v /tmp/ngit-test/logs:/var/log/ngit-relay \ 46 -v "$TEST_DIR/logs:/var/log/ngit-relay" \
27 ghcr.io/danconwaydev/ngit-relay:latest 47 ghcr.io/danconwaydev/ngit-relay:latest
28 48
29echo "โณ Waiting for relay to start..." 49echo "โณ Waiting for relay to start..."
@@ -35,12 +55,6 @@ echo "Note: ngit-relay only accepts Git-related events (NIP-34)."
35echo "Some NIP-01 smoke tests will fail (expected behavior)." 55echo "Some NIP-01 smoke tests will fail (expected behavior)."
36echo "Validation tests should pass." 56echo "Validation tests should pass."
37echo "" 57echo ""
38RELAY_URL=ws://localhost:8082 cargo test --lib -- --ignored --nocapture 58RELAY_URL="ws://localhost:$PORT" cargo test --lib -- --ignored --nocapture
39
40echo "๐Ÿ›‘ Stopping relay..."
41docker stop ngit-relay-test
42
43echo "๐Ÿงน Cleaning up..."
44docker run --rm -v /tmp/ngit-test:/data alpine sh -c "rm -rf /data/*" 2>/dev/null || true
45 59
46echo "โœ… Done!" 60echo "โœ… Done!"