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