Skip to content

Commit

Permalink
chore(ext/websocket): Add autobahn|testsuite fuzzingclient (#18846)
Browse files Browse the repository at this point in the history
Closes #17242
  • Loading branch information
littledivy committed Apr 26, 2023
1 parent fbefcee commit 036778c
Show file tree
Hide file tree
Showing 7 changed files with 100 additions and 2 deletions.
7 changes: 5 additions & 2 deletions .dprint.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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.0.wasm",
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/ci.generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -642,6 +642,15 @@ const ci = {
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: [
"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: [
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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' &&
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
20 changes: 20 additions & 0 deletions ext/websocket/autobahn/autobahn_server.js
Original file line number Diff line number Diff line change
@@ -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((request) => {
const { socket, response } = Deno.upgradeWebSocket(request);
socket.onmessage = (event) => {
socket.send(event.data);
};
return response;
}, { port });
33 changes: 33 additions & 0 deletions ext/websocket/autobahn/fuzzingclient.js
Original file line number Diff line number Diff line change
@@ -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);
26 changes: 26 additions & 0 deletions ext/websocket/autobahn/fuzzingclient.json
Original file line number Diff line number Diff line change
@@ -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": {}
}

0 comments on commit 036778c

Please sign in to comment.