public function testHttpRouter_HandlesIncomingHTTPMessages()
{
$this->simulate(function (SimulationInterface $sim) {
$compA = $this->createComponent();
$compB = $this->createComponent();
$loop = $sim->getLoop();
$router = $this->createServer($loop);
$server = $this->server;
$router->addRoute('/A', $compA);
$router->addRoute('/B', $compB);
$sim->delayOnce('pass', 2, function () use($sim) {
$sim->done();
});
$compA->on('connect', function (NetworkConnectionInterface $conn) use($sim) {
$sim->expect('connect A');
});
$compA->on('message', function (NetworkConnectionInterface $conn, HttpRequestInterface $message) use($sim) {
$sim->assertSame('GET', $message->getMethod());
$sim->assertSame('/A', $message->getTarget());
$sim->assertSame(['Host' => ['localhost:10080'], 'Connection' => ['keep-alive'], 'Accept-Encoding' => ['gzip, deflate'], 'Accept-Language' => ['en-US, en'], 'Accept' => ['text/html, application/xhtml+xml, application/xml']], $message->getHeaders());
$sim->assertSame('Hello A', (string) $message->getBody());
$sim->expect('message', [$message->read()]);
$sim->emit('pass');
});
$compB->on('connect', function (NetworkConnectionInterface $conn) use($sim) {
$sim->expect('connect B');
});
$compB->on('message', function (NetworkConnectionInterface $conn, HttpRequestInterface $message) use($sim) {
$sim->assertSame('GET', $message->getMethod());
$sim->assertSame('/B', $message->getTarget());
$sim->assertSame(['Host' => ['localhost:10080'], 'Connection' => ['keep-alive'], 'Accept-Encoding' => ['gzip, deflate'], 'Accept-Language' => ['en-US, en'], 'Accept' => ['text/html, application/xhtml+xml, application/xml']], $message->getHeaders());
$sim->assertSame('Hello B', (string) $message->getBody());
$sim->expect('message', [$message->read()]);
$sim->emit('pass');
});
$sim->onStart(function () use($loop) {
$client = $this->createClient($loop);
$client->write($this->createHttpMessage('GET', '/A', ['Host' => 'localhost:10080', 'Connection' => 'keep-alive', 'Accept-Encoding' => 'gzip, deflate', 'Accept-Language' => 'en-US, en', 'Accept' => 'text/html, application/xhtml+xml, application/xml'], "Hello A"));
$client->stop();
$client = $this->createClient($loop);
$client->write($this->createHttpMessage('GET', '/B', ['Host' => 'localhost:10080', 'Connection' => 'keep-alive', 'Accept-Encoding' => 'gzip, deflate', 'Accept-Language' => 'en-US, en', 'Accept' => 'text/html, application/xhtml+xml, application/xml'], 'Hello B'));
$client->stop();
});
$sim->onStop(function () use($server) {
$server->stop();
});
unset($router);
unset($server);
unset($component);
unset($loop);
})->expect([['connect A'], ['message', ['Hello A']], ['connect B'], ['message', ['Hello B']]], Simulation::EVENTS_COMPARE_RANDOMLY);
}