Linux SRV-16 6.18.44-paas #1 SMP PREEMPT_DYNAMIC Thu Aug 13 10:08:12 UTC 2026 x86_64
/
opt
/
php-7.3.31-202110251509
/
share
/
test
/
HTTP_Request2
/
Request2
/
Adapter
/
//opt/php-7.3.31-202110251509/share/test/HTTP_Request2/Request2/Adapter/SocketTest.php
<?php /** * Unit tests for HTTP_Request2 package * * PHP version 5 * * LICENSE * * This source file is subject to BSD 3-Clause License that is bundled * with this package in the file LICENSE and available at the URL * https://raw.github.com/pear/HTTP_Request2/trunk/docs/LICENSE * * @category HTTP * @package HTTP_Request2 * @author Alexey Borzov <avb@php.net> * @copyright 2008-2021 Alexey Borzov <avb@php.net> * @license http://opensource.org/licenses/BSD-3-Clause BSD 3-Clause License * @link http://pear.php.net/package/HTTP_Request2 */ /** Tests for HTTP_Request2 package that require a working webserver */ require_once __DIR__ . '/CommonNetworkTest.php'; /** * Unit test for Socket Adapter of HTTP_Request2 */ class HTTP_Request2_Adapter_SocketTest extends HTTP_Request2_Adapter_CommonNetworkTest { /** * Configuration for HTTP Request object * @var array */ protected $config = [ 'adapter' => \HTTP_Request2_Adapter_Socket::class ]; /** * @doesNotPerformAssertions */ public function testBug17826() { $adapter = new HTTP_Request2_Adapter_Socket(); $request1 = new HTTP_Request2($this->baseUrl . 'redirects.php?redirects=2'); $request1->setConfig(['follow_redirects' => true, 'max_redirects' => 3]) ->setAdapter($adapter) ->send(); $request2 = new HTTP_Request2($this->baseUrl . 'redirects.php?redirects=2'); $request2->setConfig(['follow_redirects' => true, 'max_redirects' => 3]) ->setAdapter($adapter) ->send(); } /** * Infinite loop with stream wrapper passed as upload * * Dunno how the original reporter managed to pass a file pointer * that doesn't support fstat() to MultipartBody, maybe he didn't use * addUpload(). So we don't use it, either. * * @link http://pear.php.net/bugs/bug.php?id=19934 */ public function testBug19934() { if (!in_array('http', stream_get_wrappers())) { $this->markTestSkipped("This test requires an HTTP fopen wrapper enabled"); } $fp = fopen($this->baseUrl . '/bug19934.php', 'rb'); $body = new HTTP_Request2_MultipartBody( [], [ 'upload' => [ 'fp' => $fp, 'filename' => 'foo.txt', 'type' => 'text/plain', 'size' => 20000 ] ] ); $this->request->setMethod(HTTP_Request2::METHOD_POST) ->setUrl($this->baseUrl . 'uploads.php') ->setBody($body); set_error_handler([$this, 'rewindWarningsHandler']); $response = $this->request->send(); restore_error_handler(); $this->assertStringContainsString("upload foo.txt text/plain 20000", $response->getBody()); } public function rewindWarningsHandler($errno, $errstr) { if (($errno & E_WARNING) && false !== strpos($errstr, 'rewind')) { return true; } return false; } /** * Do not send request body twice to URLs protected by digest auth * * @link http://pear.php.net/bugs/bug.php?id=19233 */ public function test100ContinueHandling() { if (!HTTP_REQUEST2_TESTS_DIGEST_URL) { $this->markTestSkipped('This test requires an URL protected by server digest auth'); } $fp = fopen(dirname(dirname(__DIR__)) . '/_files/bug_15305', 'rb'); $body = $this->getMockBuilder(\HTTP_Request2_MultipartBody::class) ->setMethods(['read']) ->setConstructorArgs([ [], [ 'upload' => [ 'fp' => $fp, 'filename' => 'bug_15305', 'type' => 'application/octet-stream', 'size' => 16338 ] ] ]) ->getMock(); $body->expects($this->never())->method('read'); $this->request->setMethod(HTTP_Request2::METHOD_POST) ->setUrl(HTTP_REQUEST2_TESTS_DIGEST_URL) ->setBody($body); $this->assertEquals(401, $this->request->send()->getStatus()); } public function test100ContinueTimeoutBug() { $fp = fopen(dirname(dirname(__DIR__)) . '/_files/bug_15305', 'rb'); $body = new HTTP_Request2_MultipartBody( [], [ 'upload' => [ 'fp' => $fp, 'filename' => 'bug_15305', 'type' => 'application/octet-stream', 'size' => 16338 ] ] ); $this->request->setMethod(HTTP_Request2::METHOD_POST) ->setUrl($this->baseUrl . 'uploads.php?slowpoke') ->setBody($body); $response = $this->request->send(); $this->assertStringContainsString('upload bug_15305 application/octet-stream 16338', $response->getBody()); } /** * Socket adapter should not throw an exception (invalid chunk length '') * if a buggy server doesn't send last zero-length chunk when using chunked encoding * * @link http://pear.php.net/bugs/bug.php?id=20228 */ public function testBug20228() { $events = ['receivedBodyPart', 'warning', 'receivedBody']; $this->request->setHeader('Accept-Encoding', 'identity') ->attach($observer = new HTTP_Request2_Adapter_EventSequenceObserver($events)); $response = $this->request->send(); if (false === strpos((string)$response->getHeader('Server'), 'Apache')) { $this->markTestSkipped("This test will likely fail on non-Apache web server"); } $this->assertEquals('This is a test', $response->getBody()); $this->assertEquals($events, $observer->sequence); } public function testHowsMySSL() { if (!in_array('ssl', stream_get_transports())) { $this->markTestSkipped("This test requires SSL support"); } $this->request->setUrl('https://www.howsmyssl.com/a/check') ->setConfig('ssl_verify_peer', false); if (null === ($responseData = json_decode($this->request->send()->getBody(), true))) { $this->fail('Cannot decode JSON from howsmyssl.com response'); } $this->assertEmpty($responseData['insecure_cipher_suites']); $this->assertEquals('Probably Okay', $responseData['rating']); } public function testDefaultSocketTimeout() { ini_set('default_socket_timeout', 2); $this::expectException(\HTTP_Request2_MessageException::class); $this::expectExceptionMessageMatches('/default_socket_timeout/'); try { $this->request->setConfig('timeout', 0) ->setUrl($this->baseUrl . 'timeout.php') ->send(); } finally { ini_restore('default_socket_timeout'); } } } ?>