From dff361dc5ce4501396974785b2be22287b15b895 Mon Sep 17 00:00:00 2001 From: Lukas Reschke Date: Tue, 26 May 2015 11:22:50 +0200 Subject: [PATCH] Add connection timeout to default POST options Fixes https://github.com/owncloud/core/issues/16560 --- lib/private/httphelper.php | 8 +++- tests/lib/httphelper.php | 75 +++++++++++++++++++++++++++++++++++++- 2 files changed, 80 insertions(+), 3 deletions(-) diff --git a/lib/private/httphelper.php b/lib/private/httphelper.php index f7984a72eb..9d9edb6a35 100644 --- a/lib/private/httphelper.php +++ b/lib/private/httphelper.php @@ -102,7 +102,13 @@ class HTTPHelper { $client = $this->clientService->newClient(); try { - $response = $client->post($url, ['body' => $fields]); + $response = $client->post( + $url, + [ + 'body' => $fields, + 'connect_timeout' => 10, + ] + ); } catch (\Exception $e) { return ['success' => false, 'result' => $e->getMessage()]; } diff --git a/tests/lib/httphelper.php b/tests/lib/httphelper.php index e8472ab553..1d0981ba51 100644 --- a/tests/lib/httphelper.php +++ b/tests/lib/httphelper.php @@ -12,15 +12,17 @@ class TestHTTPHelper extends \Test\TestCase { private $config; /** @var \OC\HTTPHelper */ private $httpHelperMock; + /** @var \OCP\Http\Client\IClientService */ + private $clientService; protected function setUp() { parent::setUp(); $this->config = $this->getMockBuilder('\OCP\IConfig') ->disableOriginalConstructor()->getMock(); - $clientService = $this->getMock('\OCP\Http\Client\IClientService'); + $this->clientService = $this->getMock('\OCP\Http\Client\IClientService'); $this->httpHelperMock = $this->getMockBuilder('\OC\HTTPHelper') - ->setConstructorArgs(array($this->config, $clientService)) + ->setConstructorArgs(array($this->config, $this->clientService)) ->setMethods(array('getHeaders')) ->getMock(); } @@ -44,4 +46,73 @@ class TestHTTPHelper extends \Test\TestCase { public function testIsHTTP($url, $expected) { $this->assertSame($expected, $this->httpHelperMock->isHTTPURL($url)); } + + public function testPostSuccess() { + $client = $this->getMockBuilder('\OCP\Http\Client\IClient') + ->disableOriginalConstructor()->getMock(); + $this->clientService + ->expects($this->once()) + ->method('newClient') + ->will($this->returnValue($client)); + $response = $this->getMockBuilder('\OCP\Http\Client\IResponse') + ->disableOriginalConstructor()->getMock(); + $client + ->expects($this->once()) + ->method('post') + ->with( + 'https://owncloud.org', + [ + 'body' => [ + 'Foo' => 'Bar', + ], + 'connect_timeout' => 10, + + ] + ) + ->will($this->returnValue($response)); + $response + ->expects($this->once()) + ->method('getBody') + ->will($this->returnValue('Body of the requested page')); + + + $response = $this->httpHelperMock->post('https://owncloud.org', ['Foo' => 'Bar']); + $expected = [ + 'success' => true, + 'result' => 'Body of the requested page' + ]; + $this->assertSame($expected, $response); + } + + public function testPostException() { + $client = $this->getMockBuilder('\OCP\Http\Client\IClient') + ->disableOriginalConstructor()->getMock(); + $this->clientService + ->expects($this->once()) + ->method('newClient') + ->will($this->returnValue($client)); + $client + ->expects($this->once()) + ->method('post') + ->with( + 'https://owncloud.org', + [ + 'body' => [ + 'Foo' => 'Bar', + ], + 'connect_timeout' => 10, + + ] + ) + ->will($this->throwException(new \Exception('Something failed'))); + + + $response = $this->httpHelperMock->post('https://owncloud.org', ['Foo' => 'Bar']); + $expected = [ + 'success' => false, + 'result' => 'Something failed' + ]; + $this->assertSame($expected, $response); + } + }