Autobahn test script

This commit is contained in:
matt 2015-03-16 00:22:38 -04:00
parent 1833a0f3ec
commit 1970699b75
4 changed files with 106 additions and 0 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
composer.lock composer.lock
vendor vendor
tests/ab/reports

View 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
View 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
View 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;
}
}