aboutsummaryrefslogtreecommitdiffhomepage
path: root/assets/php/vendor/ratchet/rfc6455/tests/ab
diff options
context:
space:
mode:
Diffstat (limited to 'assets/php/vendor/ratchet/rfc6455/tests/ab')
-rw-r--r--assets/php/vendor/ratchet/rfc6455/tests/ab/clientRunner.php228
-rw-r--r--assets/php/vendor/ratchet/rfc6455/tests/ab/fuzzingclient.json14
-rw-r--r--assets/php/vendor/ratchet/rfc6455/tests/ab/fuzzingserver.json10
-rw-r--r--assets/php/vendor/ratchet/rfc6455/tests/ab/run_ab_tests.sh11
-rw-r--r--assets/php/vendor/ratchet/rfc6455/tests/ab/startServer.php55
5 files changed, 318 insertions, 0 deletions
diff --git a/assets/php/vendor/ratchet/rfc6455/tests/ab/clientRunner.php b/assets/php/vendor/ratchet/rfc6455/tests/ab/clientRunner.php
new file mode 100644
index 0000000..0c5578a
--- /dev/null
+++ b/assets/php/vendor/ratchet/rfc6455/tests/ab/clientRunner.php
@@ -0,0 +1,228 @@
+<?php
+use GuzzleHttp\Psr7\Uri;
+use React\Promise\Deferred;
+use Ratchet\RFC6455\Messaging\Frame;
+
+require __DIR__ . '/../bootstrap.php';
+
+define('AGENT', 'RatchetRFC/0.0.0');
+
+$testServer = "127.0.0.1";
+
+$loop = React\EventLoop\Factory::create();
+
+$dnsResolverFactory = new React\Dns\Resolver\Factory();
+$dnsResolver = $dnsResolverFactory->createCached('8.8.8.8', $loop);
+
+$factory = new \React\SocketClient\Connector($loop, $dnsResolver);
+
+function echoStreamerFactory($conn)
+{
+ return new \Ratchet\RFC6455\Messaging\MessageBuffer(
+ new \Ratchet\RFC6455\Messaging\CloseFrameChecker,
+ function (\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($conn) {
+ /** @var Frame $frame */
+ foreach ($msg as $frame) {
+ $frame->maskPayload();
+ }
+ $conn->write($msg->getContents());
+ },
+ function (\Ratchet\RFC6455\Messaging\FrameInterface $frame) use ($conn) {
+ switch ($frame->getOpcode()) {
+ case Frame::OP_PING:
+ return $conn->write((new Frame($frame->getPayload(), true, Frame::OP_PONG))->maskPayload()->getContents());
+ break;
+ case Frame::OP_CLOSE:
+ return $conn->end((new Frame($frame->getPayload(), true, Frame::OP_CLOSE))->maskPayload()->getContents());
+ break;
+ }
+ },
+ false
+ );
+}
+
+function getTestCases() {
+ global $factory;
+ global $testServer;
+
+ $deferred = new Deferred();
+
+ $factory->create($testServer, 9001)->then(function (\React\Stream\Stream $stream) use ($deferred) {
+ $cn = new \Ratchet\RFC6455\Handshake\ClientNegotiator();
+ $cnRequest = $cn->generateRequest(new Uri('ws://127.0.0.1:9001/getCaseCount'));
+
+ $rawResponse = "";
+ $response = null;
+
+ /** @var \Ratchet\RFC6455\Messaging\Streaming\MessageBuffer $ms */
+ $ms = null;
+
+ $stream->on('data', function ($data) use ($stream, &$rawResponse, &$response, &$ms, $cn, $deferred, &$context, $cnRequest) {
+ if ($response === null) {
+ $rawResponse .= $data;
+ $pos = strpos($rawResponse, "\r\n\r\n");
+ if ($pos) {
+ $data = substr($rawResponse, $pos + 4);
+ $rawResponse = substr($rawResponse, 0, $pos + 4);
+ $response = \GuzzleHttp\Psr7\parse_response($rawResponse);
+
+ if (!$cn->validateResponse($cnRequest, $response)) {
+ $stream->end();
+ $deferred->reject();
+ } else {
+ $ms = new \Ratchet\RFC6455\Messaging\MessageBuffer(
+ new \Ratchet\RFC6455\Messaging\CloseFrameChecker,
+ function (\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($deferred, $stream) {
+ $deferred->resolve($msg->getPayload());
+ $stream->close();
+ },
+ null,
+ false
+ );
+ }
+ }
+ }
+
+ // feed the message streamer
+ if ($ms) {
+ $ms->onData($data);
+ }
+ });
+
+ $stream->write(\GuzzleHttp\Psr7\str($cnRequest));
+ });
+
+ return $deferred->promise();
+}
+
+function runTest($case)
+{
+ global $factory;
+ global $testServer;
+
+ $casePath = "/runCase?case={$case}&agent=" . AGENT;
+
+ $deferred = new Deferred();
+
+ $factory->create($testServer, 9001)->then(function (\React\Stream\Stream $stream) use ($deferred, $casePath, $case) {
+ $cn = new \Ratchet\RFC6455\Handshake\ClientNegotiator();
+ $cnRequest = $cn->generateRequest(new Uri('ws://127.0.0.1:9001' . $casePath));
+
+ $rawResponse = "";
+ $response = null;
+
+ $ms = null;
+
+ $stream->on('data', function ($data) use ($stream, &$rawResponse, &$response, &$ms, $cn, $deferred, &$context, $cnRequest) {
+ if ($response === null) {
+ $rawResponse .= $data;
+ $pos = strpos($rawResponse, "\r\n\r\n");
+ if ($pos) {
+ $data = substr($rawResponse, $pos + 4);
+ $rawResponse = substr($rawResponse, 0, $pos + 4);
+ $response = \GuzzleHttp\Psr7\parse_response($rawResponse);
+
+ if (!$cn->validateResponse($cnRequest, $response)) {
+ $stream->end();
+ $deferred->reject();
+ } else {
+ $ms = echoStreamerFactory($stream);
+ }
+ }
+ }
+
+ // feed the message streamer
+ if ($ms) {
+ $ms->onData($data);
+ }
+ });
+
+ $stream->on('close', function () use ($deferred) {
+ $deferred->resolve();
+ });
+
+ $stream->write(\GuzzleHttp\Psr7\str($cnRequest));
+ });
+
+ return $deferred->promise();
+}
+
+function createReport() {
+ global $factory;
+ global $testServer;
+
+ $deferred = new Deferred();
+
+ $factory->create($testServer, 9001)->then(function (\React\Stream\Stream $stream) use ($deferred) {
+ $reportPath = "/updateReports?agent=" . AGENT . "&shutdownOnComplete=true";
+ $cn = new \Ratchet\RFC6455\Handshake\ClientNegotiator();
+ $cnRequest = $cn->generateRequest(new Uri('ws://127.0.0.1:9001' . $reportPath));
+
+ $rawResponse = "";
+ $response = null;
+
+ /** @var \Ratchet\RFC6455\Messaging\MessageBuffer $ms */
+ $ms = null;
+
+ $stream->on('data', function ($data) use ($stream, &$rawResponse, &$response, &$ms, $cn, $deferred, &$context, $cnRequest) {
+ if ($response === null) {
+ $rawResponse .= $data;
+ $pos = strpos($rawResponse, "\r\n\r\n");
+ if ($pos) {
+ $data = substr($rawResponse, $pos + 4);
+ $rawResponse = substr($rawResponse, 0, $pos + 4);
+ $response = \GuzzleHttp\Psr7\parse_response($rawResponse);
+
+ if (!$cn->validateResponse($cnRequest, $response)) {
+ $stream->end();
+ $deferred->reject();
+ } else {
+ $ms = new \Ratchet\RFC6455\Messaging\MessageBuffer(
+ new \Ratchet\RFC6455\Messaging\CloseFrameChecker,
+ function (\Ratchet\RFC6455\Messaging\MessageInterface $msg) use ($deferred, $stream) {
+ $deferred->resolve($msg->getPayload());
+ $stream->close();
+ },
+ null,
+ false
+ );
+ }
+ }
+ }
+
+ // feed the message streamer
+ if ($ms) {
+ $ms->onData($data);
+ }
+ });
+
+ $stream->write(\GuzzleHttp\Psr7\str($cnRequest));
+ });
+
+ return $deferred->promise();
+}
+
+
+$testPromises = [];
+
+getTestCases()->then(function ($count) use ($loop) {
+ $allDeferred = new Deferred();
+
+ $runNextCase = function () use (&$i, &$runNextCase, $count, $allDeferred) {
+ $i++;
+ if ($i > $count) {
+ $allDeferred->resolve();
+ return;
+ }
+ runTest($i)->then($runNextCase);
+ };
+
+ $i = 0;
+ $runNextCase();
+
+ $allDeferred->promise()->then(function () {
+ createReport();
+ });
+});
+
+$loop->run();
diff --git a/assets/php/vendor/ratchet/rfc6455/tests/ab/fuzzingclient.json b/assets/php/vendor/ratchet/rfc6455/tests/ab/fuzzingclient.json
new file mode 100644
index 0000000..d2fd0d0
--- /dev/null
+++ b/assets/php/vendor/ratchet/rfc6455/tests/ab/fuzzingclient.json
@@ -0,0 +1,14 @@
+{
+ "options": {
+ "failByDrop": false
+ }
+ , "outdir": "./reports/servers"
+ , "servers": [{
+ "agent": "RatchetRFC/0.1.0"
+ , "url": "ws://localhost:9001"
+ , "options": {"version": 18}
+ }]
+ , "cases": ["*"]
+ , "exclude-cases": ["6.4.*", "12.*","13.*"]
+ , "exclude-agent-cases": {}
+}
diff --git a/assets/php/vendor/ratchet/rfc6455/tests/ab/fuzzingserver.json b/assets/php/vendor/ratchet/rfc6455/tests/ab/fuzzingserver.json
new file mode 100644
index 0000000..0422560
--- /dev/null
+++ b/assets/php/vendor/ratchet/rfc6455/tests/ab/fuzzingserver.json
@@ -0,0 +1,10 @@
+{
+ "url": "ws://127.0.0.1:9001"
+ , "options": {
+ "failByDrop": false
+ }
+ , "outdir": "./reports/clients"
+ , "cases": ["*"]
+ , "exclude-cases": ["6.4.*", "12.*", "13.*"]
+ , "exclude-agent-cases": {}
+}
diff --git a/assets/php/vendor/ratchet/rfc6455/tests/ab/run_ab_tests.sh b/assets/php/vendor/ratchet/rfc6455/tests/ab/run_ab_tests.sh
new file mode 100644
index 0000000..8fa9ced
--- /dev/null
+++ b/assets/php/vendor/ratchet/rfc6455/tests/ab/run_ab_tests.sh
@@ -0,0 +1,11 @@
+cd tests/ab
+
+wstest -m fuzzingserver -s fuzzingserver.json &
+sleep 5
+php clientRunner.php
+
+sleep 2
+
+php startServer.php &
+sleep 3
+wstest -m fuzzingclient -s fuzzingclient.json
diff --git a/assets/php/vendor/ratchet/rfc6455/tests/ab/startServer.php b/assets/php/vendor/ratchet/rfc6455/tests/ab/startServer.php
new file mode 100644
index 0000000..b256ec2
--- /dev/null
+++ b/assets/php/vendor/ratchet/rfc6455/tests/ab/startServer.php
@@ -0,0 +1,55 @@
+<?php
+use Ratchet\RFC6455\Messaging\MessageInterface;
+use Ratchet\RFC6455\Messaging\FrameInterface;
+use Ratchet\RFC6455\Messaging\Frame;
+
+require_once __DIR__ . "/../bootstrap.php";
+
+$loop = \React\EventLoop\Factory::create();
+
+$socket = new \React\Socket\Server($loop);
+$server = new \React\Http\Server($socket);
+
+$closeFrameChecker = new \Ratchet\RFC6455\Messaging\CloseFrameChecker;
+$negotiator = new \Ratchet\RFC6455\Handshake\ServerNegotiator(new \Ratchet\RFC6455\Handshake\RequestVerifier);
+
+$uException = new \UnderflowException;
+
+$server->on('request', function (\React\Http\Request $request, \React\Http\Response $response) use ($negotiator, $closeFrameChecker, $uException) {
+ $psrRequest = new \GuzzleHttp\Psr7\Request($request->getMethod(), $request->getPath(), $request->getHeaders());
+
+ $negotiatorResponse = $negotiator->handshake($psrRequest);
+
+ $response->writeHead(
+ $negotiatorResponse->getStatusCode(),
+ array_merge(
+ $negotiatorResponse->getHeaders(),
+ ["Content-Length" => "0"]
+ )
+ );
+
+ if ($negotiatorResponse->getStatusCode() !== 101) {
+ $response->end();
+ return;
+ }
+
+ $parser = new \Ratchet\RFC6455\Messaging\MessageBuffer($closeFrameChecker, function(MessageInterface $message) use ($response) {
+ $response->write($message->getContents());
+ }, function(FrameInterface $frame) use ($response, &$parser) {
+ switch ($frame->getOpCode()) {
+ case Frame::OP_CLOSE:
+ $response->end($frame->getContents());
+ break;
+ case Frame::OP_PING:
+ $response->write($parser->newFrame($frame->getPayload(), true, Frame::OP_PONG)->getContents());
+ break;
+ }
+ }, true, function() use ($uException) {
+ return $uException;
+ });
+
+ $request->on('data', [$parser, 'onData']);
+});
+
+$socket->listen(9001, '0.0.0.0');
+$loop->run();