Autobahn test script
This commit is contained in:
parent
1833a0f3ec
commit
1970699b75
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
composer.lock
|
||||
vendor
|
||||
tests/ab/reports
|
||||
|
15
tests/ab/fuzzingclient.json
Normal file
15
tests/ab/fuzzingclient.json
Normal file
@ -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": {}
|
||||
}
|
72
tests/ab/startServer.php
Normal file
72
tests/ab/startServer.php
Normal file
@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
use Ratchet\RFC6455\Messaging\Protocol\Frame;
|
||||
use Ratchet\RFC6455\Messaging\Protocol\Message;
|
||||
|
||||
require_once __DIR__ . "/../bootstrap.php";
|
||||
|
||||
$loop = \React\EventLoop\Factory::create();
|
||||
$socket = new \React\Socket\Server($loop);
|
||||
|
||||
$server = new \React\Http\Server($socket);
|
||||
|
||||
$server->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();
|
18
tests/bootstrap.php
Normal file
18
tests/bootstrap.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Find the auto loader file
|
||||
*/
|
||||
$files = [
|
||||
__DIR__ . '/../../../../vendor/autoload.php',
|
||||
__DIR__ . '/../../../vendor/autoload.php',
|
||||
__DIR__ . '/../../vendor/autoload.php',
|
||||
__DIR__ . '/../vendor/autoload.php',
|
||||
];
|
||||
|
||||
foreach ($files as $file) {
|
||||
if (file_exists($file)) {
|
||||
require $file;
|
||||
break;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user