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