Skip to content

Commit d708235

Browse files
committed
Now passing Autobahn tests
1 parent 0363cf2 commit d708235

File tree

6 files changed

+49
-26
lines changed

6 files changed

+49
-26
lines changed

src/Client.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
use Ratchet\RFC6455\Handshake\ClientNegotiator;
1010
use React\EventLoop\LoopInterface;
1111
use React\Http\Client\Client as HttpClient;
12-
use React\Http\Client\Request;
13-
use React\Http\Message\Response;
1412
use React\Socket\ConnectionInterface;
1513
use React\Socket\ConnectorInterface;
1614
use Rx\Disposable\CallbackDisposable;
@@ -113,8 +111,11 @@ public function _subscribe(ObserverInterface $clientObserver): DisposableInterfa
113111
$observer->onError($e);
114112
});
115113

116-
$request->on('close', function () use ($observer) {
114+
$request->on('close', function () use ($observer, $clientObserver) {
117115
$observer->onCompleted();
116+
117+
// complete the parent observer - we only do 1 connection
118+
$clientObserver->onCompleted();
118119
});
119120

120121
$request->on('end', function () use ($observer, $clientObserver) {

src/Server.php

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,24 @@
22

33
namespace Rx\Websocket;
44

5-
use GuzzleHttp\Psr7\Request;
65
use Psr\Http\Message\ServerRequestInterface;
76
use Ratchet\RFC6455\Handshake\RequestVerifier;
87
use Ratchet\RFC6455\Handshake\ServerNegotiator;
98
use React\EventLoop\LoopInterface;
109
use React\Http\Message\Response;
11-
use React\Http\Middleware\StreamingRequestMiddleware;
12-
use React\Http\Server as HttpServer;
13-
use React\Socket\Server as SocketServer;
10+
use React\Http\Middleware\StreamingRequestMiddleware as StreamingRequestMiddlewareAlias;
11+
use React\Http\HttpServer;
12+
use React\Socket\SocketServer;
1413
use React\Stream\CompositeStream;
15-
use React\Stream\ReadableStreamInterface;
1614
use React\Stream\ThroughStream;
1715
use Rx\Disposable\CallbackDisposable;
16+
use Rx\Disposable\EmptyDisposable;
1817
use Rx\DisposableInterface;
1918
use Rx\Observable;
2019
use Rx\Observable\AnonymousObservable;
2120
use Rx\Observer\CallbackObserver;
2221
use Rx\ObserverInterface;
22+
use function RingCentral\Psr7\str;
2323

2424
class Server extends Observable
2525
{
@@ -41,7 +41,7 @@ public function __construct(string $bindAddressOrPort, bool $useMessageObject =
4141

4242
public function _subscribe(ObserverInterface $observer): DisposableInterface
4343
{
44-
$socket = new SocketServer($this->bindAddress, $this->loop);
44+
$socket = new SocketServer($this->bindAddress, [], $this->loop);
4545

4646
$negotiator = new ServerNegotiator(new RequestVerifier());
4747
if (!empty($this->subProtocols)) {
@@ -50,15 +50,14 @@ public function _subscribe(ObserverInterface $observer): DisposableInterface
5050

5151
$http = new HttpServer(
5252
$this->loop,
53-
new StreamingRequestMiddleware(),
53+
new StreamingRequestMiddlewareAlias(),
5454
function (ServerRequestInterface $request) use ($negotiator, $observer) {
5555
// cram the remote address into the header in our own X- header so
5656
// the user will have access to it
5757
$request = $request->withAddedHeader('X-RxWebsocket-Remote-Address', $request->getServerParams()['REMOTE_ADDR'] ?? '');
5858

5959
$negotiatorResponse = $negotiator->handshake($request);
6060

61-
/** @var ReadableStreamInterface $requestStream */
6261
$requestStream = new ThroughStream();
6362
$responseStream = new ThroughStream();
6463

@@ -74,8 +73,8 @@ function (ServerRequestInterface $request) use ($negotiator, $observer) {
7473
);
7574

7675
if ($negotiatorResponse->getStatusCode() !== 101) {
77-
$responseStream->close();
78-
return;
76+
$responseStream->end(str($negotiatorResponse));
77+
return new EmptyDisposable();
7978
}
8079

8180
$subProtocol = "";
@@ -87,7 +86,6 @@ function (ServerRequestInterface $request) use ($negotiator, $observer) {
8786
new AnonymousObservable(
8887
function (ObserverInterface $observer) use ($requestStream) {
8988
$requestStream->on('data', function ($data) use ($observer) {
90-
var_export($data);
9189
$observer->onNext($data);
9290
});
9391
$requestStream->on('error', function ($error) use ($observer) {
@@ -115,7 +113,7 @@ function ($error) use ($responseStream) {
115113
$responseStream->close();
116114
},
117115
function () use ($responseStream) {
118-
$responseStream->close();
116+
$responseStream->end();
119117
}
120118
),
121119
false,

test/ab/clientRunner.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,14 @@
1212
$reportUrl = "ws://127.0.0.1:9001/updateReports?agent=" . AGENT . "&shutdownOnComplete=true";
1313
$client = new \Rx\Websocket\Client($reportUrl);
1414

15-
$client->subscribe();
15+
$client->subscribe(
16+
function () {},
17+
function (\Throwable $e) {
18+
// wstest is mean and hangs up on you without even sending a response
19+
// this is empty so we don't see HttpClient's complaints about that
20+
},
21+
function () {}
22+
);
1623
};
1724

1825
$runIndividualTest = function ($case, $timeout = 60000) {
@@ -83,6 +90,7 @@ function () use ($case, $deferred) {
8390
->subscribe(
8491
$runTests,
8592
function ($error) {
86-
echo $error . "\n";
87-
}
93+
echo "Err: " . $error . "\n";
94+
},
95+
function () { printf("completed.\n"); }
8896
);

test/ab/fuzzingclient.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
"servers": [
66
{"agent": "RxWebsocketServer/0.0.0",
7-
"url": "ws://localhost:9001",
7+
"url": "ws://host.docker.internal:9001",
88
"options": {"version": 18}}
99
],
1010
"cases": ["*"],

test/ab/run_ab_tests.sh

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,28 @@
11
cd test/ab
22

3-
wstest -m fuzzingserver -s fuzzingserver.json &
4-
sleep 5
5-
php clientRunner.php
3+
docker run --rm \
4+
-d \
5+
-v ${PWD}:/config \
6+
-v ${PWD}/reports:/reports \
7+
-p 9001:9001 \
8+
--name rxwsfuzzingserver \
9+
crossbario/autobahn-testsuite wstest -m fuzzingserver -s /config/fuzzingserver.json
10+
sleep 10
11+
php -d memory_limit=256M clientRunner.php
12+
13+
docker stop rxwsfuzzingserver
614

7-
sleep 2
15+
16+
sleep 5
817

918
php testServer.php 600 &
1019
sleep 3
11-
wstest -m fuzzingclient -s fuzzingclient.json
12-
sleep 12
20+
21+
docker run --rm \
22+
\
23+
-v ${PWD}:/config \
24+
-v ${PWD}/reports:/reports \
25+
-p 9001:9001 \
26+
--name rxwsfuzzingclient \
27+
crossbario/autobahn-testsuite wstest -m fuzzingclient -s /config/fuzzingclient.json
28+
sleep 12

test/ab/testServer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
$timerObservable = Observable::timer(1000 * $argv[1]);
1212
}
1313

14-
$server = new \Rx\Websocket\Server("tcp://127.0.0.1:9001", true);
14+
$server = new \Rx\Websocket\Server("tcp://0.0.0.0:9001", true);
1515

1616
$server
1717
->takeUntil($timerObservable)

0 commit comments

Comments
 (0)