<?php
namespace Generics\Tests;
use Generics\Client\HttpClient;
use Generics\Socket\Url;
use Generics\Util\UrlParser;
use Generics\Streams\MemoryStream;
class HttpClientTest extends \PHPUnit\Framework\TestCase
{
public function testSimpleRequest()
{
$url = new Url('httpbin.org', 80);
$http = new HttpClient($url);
$http->setTimeout(2);
$http->request('GET');
$this->assertEquals(200, $http->getResponseCode());
$response = "";
while ($http->getPayload()->ready()) {
$response = $http->getPayload()->read(
$http->getPayload()
->count()
);
}
$this->assertNotEmpty($response);
}
/**
* @expectedException Generics\Socket\SocketException
* @expectedExceptionMessage Socket is not available
*/
public function testRequestAfterClose()
{
$url = new Url('httpbin.org', 80);
$http = new HttpClient($url);
$http->setTimeout(2);
$http->close();
$http->request('GET');
}
public function testRetrieveHeaders()
{
$url = new Url('httpbin.org', 80);
$http = new HttpClient($url);
$http->setHeader('Connection', '');
$http->setTimeout(5);
$headers = $http->retrieveHeaders();
$this->assertEquals(200, $http->getResponseCode());
$headers = $http->getHeaders();
$this->assertGreaterThan(0, $headers['Content-Length']);
$http->resetHeaders();
$this->assertEmpty($http->getHeaders());
}
public function testTimeoutInvalid()
{
$url = new Url('httpbin.org', 80);
$http = new HttpClient($url);
$http->setTimeout(100);
$http->request('GET');
$this->assertEquals(200, $http->getResponseCode());
}
public function testTheRest()
{
$url = new Url('httpbin.org', 80);
$http = new HttpClient($url);
$http->setTimeout(1);
$http->request('HEAD');
$this->assertEquals(200, $http->getResponseCode());
}
public function testConnectionClose()
{
$url = new Url('httpbin.org', 80);
$http = new HttpClient($url);
$http->setHeader('Connection', 'close');
$headers = $http->getHeaders();
$this->assertEquals('close', $headers['Connection']);
$http->connect();
$this->assertTrue($http->isConnected());
$http->request('GET');
$this->assertFalse($http->isConnected());
}
/**
* @expectedException \Generics\Client\HttpException
*/
public function testDelay()
{
$url = UrlParser::parseUrl("http://httpbin.org/delay/4");
$http = new HttpClient($url);
$http->setTimeout(2);
$http->request('GET');
}
public function testSendPayload()
{
$url = new Url('httpbin.org', 80);
$http = new HttpClient($url);
$input = new MemoryStream();
$input->write("Hello Server");
$http->appendPayload($input);
$http->request('GET');
$this->assertEquals(200, $http->getResponseCode());
$http->disconnect();
}
/**
* @expectedException \Generics\Client\HttpException
*/
public function testSSLConnection()
{
$url = UrlParser::parseUrl('https://httpbin.org/');
$http = new HttpClient($url);
$http->request('GET');
}
public function testQueryString()
{
$url = UrlParser::parseUrl('http://httpbin.org/get?foo=bar');
$http = new HttpClient($url);
$http->request('GET');
$this->assertEquals(200, $http->getResponseCode());
$response = "";
while ($http->getPayload()->ready()) {
$response = $http->getPayload()->read(
$http->getPayload()
->count()
);
}
$this->assertNotEmpty($response);
$this->assertContains('"foo": "bar"', $response);
}
public function testGzip()
{
$url = UrlParser::parseUrl('http://httpbin.org/gzip');
$http = new HttpClient($url);
$http->request('GET');
$this->assertEquals(200, $http->getResponseCode());
$response = "";
while ($http->getPayload()->ready()) {
$response = $http->getPayload()->read(
$http->getPayload()
->count()
);
}
$this->assertNotEmpty($response);
$this->assertJson($response);
}
public function testDeflate()
{
$url = UrlParser::parseUrl('http://httpbin.org/deflate');
$http = new HttpClient($url);
$http->request('GET');
$this->assertEquals(200, $http->getResponseCode());
$response = "";
while ($http->getPayload()->ready()) {
$response = $http->getPayload()->read(
$http->getPayload()
->count()
);
}
$this->assertNotEmpty($response);
$this->assertJson($response);
}
}
|