X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FWebRequestTest.php;h=0d5c59b0dee41b0c6f1340743bac60368d6cd30f;hb=fab912b65c5363466beac64669573c366d74027c;hp=9583921d51741598ae97994f4703776284238c33;hpb=967a96e7fa5910f8fc451590decb381dbfb481ba;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/WebRequestTest.php b/tests/phpunit/includes/WebRequestTest.php index 9583921d51..0d5c59b0de 100644 --- a/tests/phpunit/includes/WebRequestTest.php +++ b/tests/phpunit/includes/WebRequestTest.php @@ -4,16 +4,19 @@ * @group WebRequest */ class WebRequestTest extends MediaWikiTestCase { - protected $oldServer; protected function setUp() { parent::setUp(); $this->oldServer = $_SERVER; + $this->oldWgRequest = $GLOBALS['wgRequest']; + $this->oldWgServer = $GLOBALS['wgServer']; } protected function tearDown() { $_SERVER = $this->oldServer; + $GLOBALS['wgRequest'] = $this->oldWgRequest; + $GLOBALS['wgServer'] = $this->oldWgServer; parent::tearDown(); } @@ -123,7 +126,13 @@ class WebRequestTest extends MediaWikiTestCase { ]; } - protected function mockWebRequest( $data = [] ) { + /** + * @param array $data Request data + * @param array $config + * - float 'requestTime': Mock value for `$_SERVER['REQUEST_TIME_FLOAT']`. + * @return WebRequest + */ + protected function mockWebRequest( array $data = [], array $config = [] ) { // Cannot use PHPUnit getMockBuilder() as it does not support // overriding protected properties afterwards $reflection = new ReflectionClass( WebRequest::class ); @@ -133,9 +142,11 @@ class WebRequestTest extends MediaWikiTestCase { $prop->setAccessible( true ); $prop->setValue( $req, $data ); - $prop = $reflection->getProperty( 'requestTime' ); - $prop->setAccessible( true ); - $prop->setValue( $req, microtime( true ) ); + if ( isset( $config['requestTime'] ) ) { + $prop = $reflection->getProperty( 'requestTime' ); + $prop->setAccessible( true ); + $prop->setValue( $req, $config['requestTime'] ); + } return $req; } @@ -144,9 +155,11 @@ class WebRequestTest extends MediaWikiTestCase { * @covers WebRequest::getElapsedTime */ public function testGetElapsedTime() { - $req = $this->mockWebRequest(); - $this->assertGreaterThanOrEqual( 0.0, $req->getElapsedTime() ); - $this->assertEquals( 0.0, $req->getElapsedTime(), '', /*delta*/ 0.2 ); + $now = microtime( true ) - 10.0; + $req = $this->mockWebRequest( [], [ 'requestTime' => $now ] ); + $this->assertGreaterThanOrEqual( 10.0, $req->getElapsedTime() ); + // Catch common errors, but don't fail on slow hardware or VMs (T199764). + $this->assertEquals( 10.0, $req->getElapsedTime(), '', 60.0 ); } /** @@ -358,11 +371,27 @@ class WebRequestTest extends MediaWikiTestCase { $this->assertSame( [ 'x' ], $req->getValueNames( [ 'y' ] ), 'Exclude keys' ); } + /** + * @covers WebRequest + */ + public function testGetFullRequestURL() { + // Stub this for wfGetServerUrl() + $GLOBALS['wgServer'] = '//wiki.test'; + $req = $this->getMock( WebRequest::class, [ 'getRequestURL', 'getProtocol' ] ); + $req->method( 'getRequestURL' )->willReturn( '/path' ); + $req->method( 'getProtocol' )->willReturn( 'https' ); + + $this->assertSame( + 'https://wiki.test/path', + $req->getFullRequestURL() + ); + } + /** * @dataProvider provideGetIP * @covers WebRequest::getIP */ - public function testGetIP( $expected, $input, $squid, $xffList, $private, $description ) { + public function testGetIP( $expected, $input, $cdn, $xffList, $private, $description ) { $this->setServerVars( $input ); $this->setMwGlobals( [ 'wgUsePrivateIPs' => $private, @@ -376,7 +405,7 @@ class WebRequestTest extends MediaWikiTestCase { ] ] ); - $this->setService( 'ProxyLookup', new ProxyLookup( [], $squid ) ); + $this->setService( 'ProxyLookup', new ProxyLookup( [], $cdn ) ); $request = new WebRequest(); $result = $request->getIP(); @@ -558,8 +587,8 @@ class WebRequestTest extends MediaWikiTestCase { public function testGetIpLackOfRemoteAddrThrowAnException() { // ensure that local install state doesn't interfere with test $this->setMwGlobals( [ - 'wgSquidServersNoPurge' => [], - 'wgSquidServers' => [], + 'wgCdnServers' => [], + 'wgCdnServersNoPurge' => [], 'wgUsePrivateIPs' => false, 'wgHooks' => [], ] );