Merge pull request #133 from zachborboa/master

Fix #86: Add default timeout of 30 seconds
This commit is contained in:
Zach Borboa
2015-02-08 23:18:10 +07:00
5 changed files with 70 additions and 2 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)
+1 -1
View File
@@ -9,7 +9,7 @@
"name": "Zach Borboa"
}
],
"version": "2.1.4",
"version": "2.1.5",
"require": {
"php": ">=5.3",
"ext-curl": "*"
+13 -1
View File
@@ -4,7 +4,8 @@ namespace Curl;
class Curl
{
const VERSION = '2.1.4';
const VERSION = '2.1.5';
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);