summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.dprint.json7
-rwxr-xr-x.github/workflows/ci.generate.ts9
-rw-r--r--.github/workflows/ci.yml5
-rw-r--r--.gitignore2
-rw-r--r--ext/websocket/autobahn/autobahn_server.js20
-rw-r--r--ext/websocket/autobahn/fuzzingclient.js33
-rw-r--r--ext/websocket/autobahn/fuzzingclient.json26
7 files changed, 100 insertions, 2 deletions
diff --git a/.dprint.json b/.dprint.json
index b8af9469f..07124d662 100644
--- a/.dprint.json
+++ b/.dprint.json
@@ -13,7 +13,9 @@
"associations": "**/*.rs",
"rustfmt": "rustfmt --config imports_granularity=item"
},
- "includes": ["**/*.{ts,tsx,js,jsx,json,md,toml,rs}"],
+ "includes": [
+ "**/*.{ts,tsx,js,jsx,json,md,toml,rs}"
+ ],
"excludes": [
".cargo_home",
".git",
@@ -48,7 +50,8 @@
"tools/node_compat/TODO.md",
"tools/node_compat/versions",
"tools/wpt/expectation.json",
- "tools/wpt/manifest.json"
+ "tools/wpt/manifest.json",
+ "ext/websocket/autobahn/reports"
],
"plugins": [
"https://plugins.dprint.dev/typescript-0.84.2.wasm",
diff --git a/.github/workflows/ci.generate.ts b/.github/workflows/ci.generate.ts
index ea9f93bc1..b5fa91afb 100755
--- a/.github/workflows/ci.generate.ts
+++ b/.github/workflows/ci.generate.ts
@@ -643,6 +643,15 @@ const ci = {
'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/canary/$(git rev-parse HEAD)/',
},
{
+ name: "Autobahn testsuite",
+ if: [
+ "matrix.job == 'test' && matrix.profile == 'release' &&",
+ "!startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'ubuntu')",
+ ].join("\n"),
+ run:
+ "target/release/deno run -A --unstable ext/websocket/autobahn/fuzzingclient.js",
+ },
+ {
name: "Test debug",
if: [
"matrix.job == 'test' && matrix.profile == 'debug' &&",
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 205e5c069..9f2c788c2 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -399,6 +399,11 @@ jobs:
env:
CLOUDSDK_PYTHON: '${{env.pythonLocation}}\python.exe'
run: 'gsutil -h "Cache-Control: public, max-age=3600" cp ./target/release/*.zip gs://dl.deno.land/canary/$(git rev-parse HEAD)/'
+ - name: Autobahn testsuite
+ if: |-
+ !(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'test' && matrix.profile == 'release' &&
+ !startsWith(github.ref, 'refs/tags/') && startsWith(matrix.os, 'ubuntu'))
+ run: target/release/deno run -A --unstable ext/websocket/autobahn/fuzzingclient.js
- name: Test debug
if: |-
!(github.event_name == 'pull_request' && matrix.skip_pr) && (matrix.job == 'test' && matrix.profile == 'debug' &&
diff --git a/.gitignore b/.gitignore
index 6f806b143..a8738ea41 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,5 @@ gclient_config.py_entries
# WPT generated cert files
/tools/wpt/certs/index.txt*
/tools/wpt/certs/serial*
+
+/ext/websocket/autobahn/reports
diff --git a/ext/websocket/autobahn/autobahn_server.js b/ext/websocket/autobahn/autobahn_server.js
new file mode 100644
index 000000000..b5f399a5b
--- /dev/null
+++ b/ext/websocket/autobahn/autobahn_server.js
@@ -0,0 +1,20 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+import { parse } from "../../../test_util/std/flags/mod.ts";
+
+const { port } = parse(Deno.args, {
+ number: ["port"],
+ default: {
+ port: 6969,
+ },
+});
+
+const { serve } = Deno;
+
+// A message-based WebSocket echo server.
+serve({ port }, (request) => {
+ const { socket, response } = Deno.upgradeWebSocket(request);
+ socket.onmessage = (event) => {
+ socket.send(event.data);
+ };
+ return response;
+});
diff --git a/ext/websocket/autobahn/fuzzingclient.js b/ext/websocket/autobahn/fuzzingclient.js
new file mode 100644
index 000000000..8aa716695
--- /dev/null
+++ b/ext/websocket/autobahn/fuzzingclient.js
@@ -0,0 +1,33 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+// deno-lint-ignore-file
+
+import { $ } from "https://deno.land/x/dax@0.31.0/mod.ts";
+
+const pwd = new URL(".", import.meta.url).pathname;
+
+const AUTOBAHN_TESTSUITE_DOCKER =
+ "crossbario/autobahn-testsuite:0.8.2@sha256:5d4ba3aa7d6ab2fdbf6606f3f4ecbe4b66f205ce1cbc176d6cdf650157e52242";
+
+const self = Deno.execPath();
+$`${self} run -A --unstable ${pwd}/autobahn_server.js`.spawn();
+await $`docker run --name fuzzingserver -v ${pwd}/fuzzingclient.json:/fuzzingclient.json:ro -v ${pwd}/reports:/reports -p 9001:9001 --net=host --rm ${AUTOBAHN_TESTSUITE_DOCKER} wstest -m fuzzingclient -s fuzzingclient.json`
+ .cwd(pwd);
+
+const { deno_websocket } = JSON.parse(
+ Deno.readTextFileSync(`${pwd}/reports/servers/index.json`),
+);
+const result = Object.values(deno_websocket);
+
+function failed(name) {
+ return name != "OK" && name != "INFORMATIONAL" && name != "NON-STRICT";
+}
+
+const failedtests = result.filter((outcome) => failed(outcome.behavior));
+
+console.log(
+ `%c${result.length - failedtests.length} / ${result.length} tests OK`,
+ `color: ${failedtests.length == 0 ? "green" : "red"}`,
+);
+
+Deno.exit(failedtests.length == 0 ? 0 : 1);
diff --git a/ext/websocket/autobahn/fuzzingclient.json b/ext/websocket/autobahn/fuzzingclient.json
new file mode 100644
index 000000000..fcee80c99
--- /dev/null
+++ b/ext/websocket/autobahn/fuzzingclient.json
@@ -0,0 +1,26 @@
+{
+ "outdir": "./reports/servers",
+ "servers": [
+ {
+ "agent": "deno_websocket",
+ "url": "ws://localhost:6969"
+ }
+ ],
+ "cases": [
+ "1.*",
+ "2.*",
+ "3.*",
+ "4.*",
+ "5.*",
+ "6.*",
+ "7.*",
+ "9.*",
+ "10.*"
+ ],
+ "exclude-cases": [
+ "11.*",
+ "12.*",
+ "13.*"
+ ],
+ "exclude-agent-cases": {}
+}