wasm-smoke.sh raw
1 #!/bin/sh
2 # End-to-end smoke test of the js/wasm light client:
3 #
4 # torly relay <- WebSocket -> bridge <- TCP P2P -> test node
5 # wasm client <- NIP-44 events -> relay -> bridge
6 #
7 # Requirements: tinygo, node (21+, or 20 with --experimental-websocket), and a
8 # built torly. Set TORLY_BIN if torly is not at ../torly/torly.
9 set -eu
10
11 ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
12 TORLY_BIN=${TORLY_BIN:-$HOME/s/tinygo/torly/torly}
13 TINYGO=${TINYGO:-tinygo}
14 NODE=${NODE:-node}
15 if [ -x "$HOME/.local/goroot/bin/go" ]; then
16 GOROOT=$HOME/.local/goroot
17 export GOROOT
18 PATH=$GOROOT/bin:$PATH
19 export PATH
20 fi
21 if [ ! -x "$TORLY_BIN" ]; then
22 echo "wasm-smoke: torly not found at $TORLY_BIN (set TORLY_BIN)" >&2
23 exit 2
24 fi
25 if ! command -v "$NODE" >/dev/null 2>&1; then
26 echo "wasm-smoke: node not found" >&2
27 exit 2
28 fi
29
30 TMP=$(mktemp -d "${TMPDIR:-/tmp}/nostrino-smoke.XXXXXX")
31 PORT=${PORT:-34567}
32 NODE_PORT=$((PORT + 1))
33 BRIDGE_PORT=$((PORT + 2))
34 PIDS=
35 cleanup() {
36 for pid in $PIDS; do
37 kill "$pid" 2>/dev/null || true
38 done
39 wait 2>/dev/null || true
40 rm -rf "$TMP"
41 }
42 trap cleanup EXIT INT TERM
43
44 echo "== building commands =="
45 (cd "$ROOT" && go build -o "$TMP/nostrino-bridge" ./cmd/nostrino-bridge \
46 && go build -o "$TMP/nostrino-testnode" ./cmd/nostrino-testnode)
47
48 if [ -n "${WASM:-}" ] && [ -f "${WASM}" ]; then
49 echo "== using wasm $WASM =="
50 cp "$WASM" "$TMP/nostrino.wasm"
51 else
52 echo "== building wasm =="
53 (cd "$ROOT" && "$TINYGO" build -target wasm -o "$TMP/nostrino.wasm" ./cmd/nostrino-wasm)
54 fi
55
56 echo "== starting torly on 127.0.0.1:$PORT =="
57 TORLY_PORT=$PORT TORLY_DATA_DIR="$TMP/torly" TORLY_BLOSSOM_ENABLED=false \
58 "$TORLY_BIN" serve >"$TMP/torly.log" 2>&1 &
59 PIDS="$PIDS $!"
60 for i in $(seq 1 100); do
61 if curl -fsS -m 1 "http://127.0.0.1:$PORT/" >/dev/null 2>&1; then break; fi
62 sleep 0.1
63 done
64
65 echo "== starting test node on 127.0.0.1:$NODE_PORT =="
66 "$TMP/nostrino-testnode" -listen "127.0.0.1:$NODE_PORT" -blocks 50 >"$TMP/testnode.log" 2>&1 &
67 PIDS="$PIDS $!"
68 sleep 0.5
69
70 echo "== starting bridge =="
71 "$TMP/nostrino-bridge" -relay "ws://127.0.0.1:$PORT" -node "127.0.0.1:$NODE_PORT" \
72 -bridge-listen "127.0.0.1:$BRIDGE_PORT" -bridge-url "ws://127.0.0.1:$BRIDGE_PORT/nostrino" \
73 -chain regtest -data "$TMP/bridge" >"$TMP/bridge.log" 2>&1 &
74 PIDS="$PIDS $!"
75 for i in $(seq 1 100); do
76 if [ -f "$TMP/bridge/gateway.uri" ]; then break; fi
77 sleep 0.1
78 done
79 if [ ! -f "$TMP/bridge/gateway.uri" ]; then
80 echo "wasm-smoke: no gateway URI" >&2
81 cat "$TMP/bridge.log" >&2
82 exit 1
83 fi
84
85 echo "== running wasm client in node =="
86 "$NODE" --experimental-websocket "$ROOT/scripts/wasm-smoke.cjs" \
87 "$TMP/nostrino.wasm" "$TMP/bridge/gateway.uri" "626c6f636b2d37"
88