Skip to content

test(dmsg,wasmhv): Tier A headless browser-edge regression gate + mdisc check wss health probe - #3637

Merged
0pcom merged 1 commit into
skycoin:developfrom
0pcom:feat/wasm-tier-a-tests-and-wss-probe
Jul 30, 2026
Merged

test(dmsg,wasmhv): Tier A headless browser-edge regression gate + mdisc check wss health probe#3637
0pcom merged 1 commit into
skycoin:developfrom
0pcom:feat/wasm-tier-a-tests-and-wss-probe

Conversation

@0pcom

@0pcom 0pcom commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Tier A of the wasm-visor testing plan

The browser profile — a wss-only dmsg client (Carriers=[ws]) — exercised headlessly against real in-process dmsg servers: no browser, ordinary go test, CI-gating. Locks everything the recent reachability campaign fixed:

pkg/dmsg/dmsg/browser_edge_test.go — 4 e2e regressions on the on-demand rendezvous model:

  1. reach a peer delegated to a different server via an on-demand ws session;
  2. never fall back to TCP — the peer's first delegated server is tcp-only and live/dialable (the pre-fix(dmsg): browser client never falls back to TCP — robust on-demand rendezvous #3634 fallback would happily connect to it — the capability violation that showed up in browsers as futile dial tcpdmsg error 202); the dial must skip it cleanly and rendezvous via the next server, ending with ws-only sessions;
  3. a peer only on a tcp-only server is honestly unreachable (clear error, no sneaked tcp session);
  4. ConnectToAllServers (fix(wasm/dmsg): robust on-demand rendezvous — browser never falls back to TCP (+ live server discovery) #3632) honors the carrier contract per server (ws connect; tcp-only lands in Failed).

pkg/dmsg/dmsgclient/fallback_disc_test.goAllServers prefers the live discovery (seeded edge must learn the whole deployment, not stay pinned to 2 seeds), seed-fallback on failure/empty; AvailableServers stays direct (boot path never blocks on a not-yet-reachable discovery).

pkg/wasmhv/self_test.go — the wasm core's POST /dmsg/connect-all route returns the DmsgConnectAllResult shape; GET → 405.

skywire cli mdisc check + scheduled CI

The operator-requested probe that would have auto-caught the 2026-07-30 wss breakage (2 stale DNS records pointing at a dead shared proxy + 1 failed cert issuance). For every discovery server's advertised AddressWS: DNS cross-check vs the server's own address (warning — shared fronts are legitimate), then a plain HTTP/1.1 GET with normal TLS verification expecting 426 Upgrade Required; exits nonzero when an advertised front doesn't serve. dmsg:// discovery URLs use the CLI's resolving fetch (local visor); http(s):// is fetched directly (CI). Scheduled workflow (deployment-health.yml, 6-hourly + manual) probes via the clearnet mirror.

Live run against the deployment right now: 9 servers, 0 advertised wss fronts failing

golangci-lint 0 issues; all suites green.

…isc check` wss health probe

Tier A of the wasm-visor testing plan: the browser profile (a wss-only dmsg
client, Carriers=[ws]) exercised headlessly against real in-process dmsg
servers — no browser, ordinary `go test`, CI-gating.

- pkg/dmsg/dmsg/browser_edge_test.go: four e2e regressions locking the
  on-demand rendezvous model the wasm visor lives on —
  (1) reach a peer delegated to a DIFFERENT server via an on-demand ws session;
  (2) NEVER fall back to TCP: peer's first delegated server is tcp-only (live,
      dialable — the pre-skycoin#3634 fallback would connect to it, a capability
      violation that manifested in browsers as futile `dial tcp` → dmsg error
      202) — the dial must skip it cleanly and rendezvous via the next server,
      ending with ws-only sessions;
  (3) a peer ONLY on a tcp-only server is honestly unreachable (clear error,
      no sneaked tcp session);
  (4) ConnectToAllServers (skycoin#3632) honors the carrier contract per server: ws
      servers connect, the tcp-only one lands in Failed.
- pkg/dmsg/dmsgclient/fallback_disc_test.go: AllServers prefers the LIVE
  discovery (a seeded edge must learn the whole deployment, not stay pinned to
  its 2 seeds) with seed fallback on failure/empty; AvailableServers stays on
  the direct client (boot path never blocks on a not-yet-reachable discovery).
- pkg/wasmhv/self_test.go: the wasm core's POST /dmsg/connect-all route
  (404'd before skycoin#3632) returns the DmsgConnectAllResult shape; GET is 405.

Plus the operator-requested deployment probe that would have auto-caught the
2026-07-30 wss breakage (2 stale DNS records at a dead shared proxy + 1 failed
cert issuance):

- `skywire cli mdisc check`: probes every discovery server's advertised
  AddressWS — DNS resolution vs the server's own address (warning; shared
  fronts are legitimate), then a plain HTTP/1.1 GET with normal TLS
  verification expecting 426 Upgrade Required. Exits nonzero when an
  advertised front doesn't serve. dmsg:// discovery URLs go through the CLI's
  resolving fetch (local visor); http(s):// is fetched directly (CI).
  Live run against the deployment: 9 servers, 0 failing.
- .github/workflows/deployment-health.yml: scheduled (6h) + manual probe via
  the clearnet discovery mirror.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XzckVqHX624RpdEWcvVosA
@0pcom
0pcom merged commit 4814b06 into skycoin:develop Jul 30, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant