From 1970699b75b8565d6da7b2fff63f568e0ae18c97 Mon Sep 17 00:00:00 2001 From: matt Date: Mon, 16 Mar 2015 00:22:38 -0400 Subject: [PATCH] Autobahn test script --- .gitignore | 1 + tests/ab/fuzzingclient.json | 15 ++++++++ tests/ab/startServer.php | 72 +++++++++++++++++++++++++++++++++++++ tests/bootstrap.php | 18 ++++++++++ 4 files changed, 106 insertions(+) create mode 100644 tests/ab/fuzzingclient.json create mode 100644 tests/ab/startServer.php create mode 100644 tests/bootstrap.php diff --git a/.gitignore b/.gitignore index 987e2a2..06a6b3b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ composer.lock vendor +tests/ab/reports diff --git a/tests/ab/fuzzingclient.json b/tests/ab/fuzzingclient.json new file mode 100644 index 0000000..f2fea0a --- /dev/null +++ b/tests/ab/fuzzingclient.json @@ -0,0 +1,15 @@ +{ + "options": {"failByDrop": false}, + "outdir": "./reports/servers", + + "servers": [ + {"agent": "AutobahnServer", + "url": "ws://localhost:9001", + "options": {"version": 18}} + ], + + "casesy": ["1.1.1", "1.1.2"], + "cases": ["1.*", "2.*", "3.*", "4.*","5.*"], + "exclude-cases": [], + "exclude-agent-cases": {} +} diff --git a/tests/ab/startServer.php b/tests/ab/startServer.php new file mode 100644 index 0000000..7668bec --- /dev/null +++ b/tests/ab/startServer.php @@ -0,0 +1,72 @@ +on('request', function (\React\Http\Request $request, \React\Http\Response $response) { + // saving this for later + $conn = $response; + + // make the React Request a Psr7 request (not perfect) + $psrRequest = new \GuzzleHttp\Psr7\Request($request->getMethod(), $request->getPath(), $request->getHeaders()); + + $negotiator = new \Ratchet\RFC6455\Handshake\Negotiator(new \Ratchet\RFC6455\Encoding\NullValidator()); + + $negotiatorResponse = $negotiator->handshake($psrRequest); + + $response->writeHead( + $negotiatorResponse->getStatusCode(), + array_merge( + $negotiatorResponse->getHeaders(), + ["Content-Length" => "0"] + ) + ); + + if ($negotiatorResponse->getStatusCode() !== 101) { + $response->end(); + return; + } + + $ms = new \Ratchet\RFC6455\Messaging\Streaming\MessageStreamer(); + + $ms->on('message', function (Message $msg) use ($conn) { + $opcode = $msg->isBinary() ? Frame::OP_BINARY : Frame::OP_TEXT; + $frame = new Frame($msg->getPayload(), true, $opcode); + $conn->write($frame->getContents()); + }); + + $ms->on('ping', function (Frame $frame) use ($conn) { + $pong = new Frame($frame->getPayload(), true, Frame::OP_PONG); + $conn->write($pong->getContents()); + }); + + $ms->on('pong', function (Frame $frame) { + echo "got PONG...\n"; + }); + + $ms->on('close', function ($code) use ($conn) { + if ($code === null) { + $conn->close(); + return; + } + $frame = new Frame( + pack('n', $code), + true, + Frame::OP_CLOSE + ); + $conn->end($frame->getContents()); + }); + + $request->on('data', function ($data) use ($ms) { + $ms->onData($data); + }); +}); +$socket->listen(9001); +$loop->run(); \ No newline at end of file diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..6fa5dc9 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,18 @@ +