Fix #86: Add default timeout of 30 seconds

This commit is contained in:
Zach Borboa
2015-02-08 23:13:25 +07:00
parent dc4e45fd12
commit bbdba6d907
4 changed files with 68 additions and 0 deletions
+2
View File
@@ -166,12 +166,14 @@ setCookie($key, $value)
setCookieFile($cookie_file)
setCookieJar($cookie_jar)
setDefaultJsonDecoder()
setDefaultTimeout()
setDefaultUserAgent()
setHeader($key, $value)
setJsonDecoder($func)
setOpt($option, $value)
setReferer($referer)
setReferrer($referrer)
setTimeout($seconds)
setUserAgent($user_agent)
success($callback)
unsetHeader($key)
+12
View File
@@ -5,6 +5,7 @@ namespace Curl;
class Curl
{
const VERSION = '2.1.4';
const DEFAULT_TIMEOUT = 30;
private $cookies = array();
private $headers = array();
@@ -52,6 +53,7 @@ class Curl
$this->curl = curl_init();
$this->setDefaultUserAgent();
$this->setDefaultJsonDecoder();
$this->setDefaultTimeout();
$this->setOpt(CURLINFO_HEADER_OUT, true);
$this->setOpt(CURLOPT_RETURNTRANSFER, true);
$this->headers = new CaseInsensitiveArray();
@@ -268,6 +270,16 @@ class Curl
$this->setOpt(CURLOPT_USERAGENT, $user_agent);
}
public function setTimeout($seconds)
{
$this->setOpt(CURLOPT_TIMEOUT, $seconds);
}
public function setDefaultTimeout()
{
$this->setTimeout(self::DEFAULT_TIMEOUT);
}
public function setReferer($referer)
{
$this->setReferrer($referer);
+40
View File
@@ -483,6 +483,44 @@ class CurlTest extends PHPUnit_Framework_TestCase
$this->assertEquals('cookie1=scrumptious,cookie2=mouthwatering', $test->curl->response_headers['Set-Cookie']);
}
public function testDefaultTimeout() {
$test = new Test();
$test->server('timeout', 'GET', array(
'seconds' => '31',
));
$this->assertTrue($test->curl->error);
$this->assertTrue($test->curl->curl_error);
$this->assertEquals(CURLE_OPERATION_TIMEOUTED, $test->curl->error_code);
$this->assertEquals(CURLE_OPERATION_TIMEOUTED, $test->curl->curl_error_code);
$this->assertFalse($test->curl->http_error);
}
public function testTimeoutError() {
$test = new Test();
$test->curl->setTimeout(5);
$test->server('timeout', 'GET', array(
'seconds' => '10',
));
$this->assertTrue($test->curl->error);
$this->assertTrue($test->curl->curl_error);
$this->assertEquals(CURLE_OPERATION_TIMEOUTED, $test->curl->error_code);
$this->assertEquals(CURLE_OPERATION_TIMEOUTED, $test->curl->curl_error_code);
$this->assertFalse($test->curl->http_error);
}
public function testTimeout() {
$test = new Test();
$test->curl->setTimeout(10);
$test->server('timeout', 'GET', array(
'seconds' => '5',
));
$this->assertFalse($test->curl->error);
$this->assertFalse($test->curl->curl_error);
$this->assertNotEquals(CURLE_OPERATION_TIMEOUTED, $test->curl->error_code);
$this->assertNotEquals(CURLE_OPERATION_TIMEOUTED, $test->curl->curl_error_code);
$this->assertFalse($test->curl->http_error);
}
public function testError()
{
$test = new Test();
@@ -490,6 +528,7 @@ class CurlTest extends PHPUnit_Framework_TestCase
$test->curl->get(Test::ERROR_URL);
$this->assertTrue($test->curl->error);
$this->assertTrue($test->curl->curl_error);
$this->assertEquals(CURLE_OPERATION_TIMEOUTED, $test->curl->error_code);
$this->assertEquals(CURLE_OPERATION_TIMEOUTED, $test->curl->curl_error_code);
}
@@ -875,6 +914,7 @@ class CurlTest extends PHPUnit_Framework_TestCase
$curl->complete(function ($instance) use (&$success_called, &$error_called, &$complete_called) {
PHPUnit_Framework_Assert::assertTrue($instance->error);
PHPUnit_Framework_Assert::assertTrue($instance->curl_error);
PHPUnit_Framework_Assert::assertEquals(CURLE_OPERATION_TIMEOUTED, $instance->error_code);
PHPUnit_Framework_Assert::assertEquals(CURLE_OPERATION_TIMEOUTED, $instance->curl_error_code);
});
$curl->get(array(
+14
View File
@@ -145,6 +145,20 @@ if ($test == 'http_basic_auth') {
header('ETag: ' . md5_file($unsafe_file_path));
readfile($unsafe_file_path);
exit;
} elseif ($test === 'timeout') {
$unsafe_seconds = $_GET['seconds'];
$start = time();
while (true) {
echo '.';
ob_flush();
flush();
sleep(1);
$elapsed = time() - $start;
if ($elapsed >= $unsafe_seconds) {
break;
}
}
exit;
} elseif ($test === 'error_message') {
if (function_exists('http_response_code')) {
http_response_code(401);