<?php
/**
* TEST: Client request test.
*/
use AmK\FastCGI;
use Tester\Assert;
require(__DIR__ . '/../../bootstrap.php');
$connection = new class extends Evenement\EventEmitter implements React\Socket\ConnectionInterface
{
public function getRemoteAddress()
{
return '127.0.0.1';
}
public function getLocalAddress()
{
return '127.0.0.1';
}
public function isReadable()
{
return true;
}
public function pause()
{
}
public function resume()
{
}
public function pipe(React\Stream\WritableStreamInterface $dest, array $options = [])
{
}
public function close()
{
}
public function isWritable()
{
return true;
}
public function write($data)
{
$this->emit('write', [$data]);
return true;
}
public function end($data = null)
{
}
};
$request = new FastCGI\Client\Request(10, $connection);
$request->promise()->then(function(React\Http\Response $v) use(&$response): void {
$response = $v;
});
$finished = false;
$request->on('end', function() use(&$finished): void {
$finished = true;
});
$request->writeBuffer("Status: 200 OK\r\n\r\n");
/** @var $response React\Http\Response */
$body = $response->getBody();
assert($body instanceof React\Http\Io\HttpBodyStream);
$body->on('data', function($data) use(&$contents): void {
$contents = $data;
});
$request->writeBuffer('Hello World!');
Assert::same(200, $response->getStatusCode());
Assert::same('Hello World!', $contents);
Assert::false($finished);
$request->writeEnd(Lisachenko\Protocol\FCGI::REQUEST_COMPLETE);
Assert::true($finished);
$request = new FastCGI\Client\Request(10, $connection);
$connection->on('write', function(string $data) use(&$end): void {
$end = Lisachenko\Protocol\FCGI\FrameParser::parseFrame($data);
});
$request->abort();
Assert::true($end instanceof Lisachenko\Protocol\FCGI\Record\EndRequest);