| 
<?phpnamespace 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);
 }
 }
 
 |