From 036778c2e8e159ef1e586de4102f823367b7c554 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Wed, 26 Apr 2023 17:55:48 +0530 Subject: chore(ext/websocket): Add autobahn|testsuite fuzzingclient (#18846) Closes #17242 --- ext/websocket/autobahn/autobahn_server.js | 20 +++++++++++++++++++ ext/websocket/autobahn/fuzzingclient.js | 33 +++++++++++++++++++++++++++++++ ext/websocket/autobahn/fuzzingclient.json | 26 ++++++++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 ext/websocket/autobahn/autobahn_server.js create mode 100644 ext/websocket/autobahn/fuzzingclient.js create mode 100644 ext/websocket/autobahn/fuzzingclient.json (limited to 'ext/websocket') diff --git a/ext/websocket/autobahn/autobahn_server.js b/ext/websocket/autobahn/autobahn_server.js new file mode 100644 index 000000000..c678dfc1a --- /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((request) => { + const { socket, response } = Deno.upgradeWebSocket(request); + socket.onmessage = (event) => { + socket.send(event.data); + }; + return response; +}, { port }); 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": {} +} -- cgit v1.2.3