summaryrefslogtreecommitdiff
path: root/ext/curl/tests
diff options
context:
space:
mode:
Diffstat (limited to 'ext/curl/tests')
-rw-r--r--ext/curl/tests/bug27023.phpt48
-rw-r--r--ext/curl/tests/bug45161.phpt52
-rw-r--r--ext/curl/tests/bug46711.phpt36
-rw-r--r--ext/curl/tests/bug46739.phpt19
-rw-r--r--ext/curl/tests/bug48203.phpt36
-rw-r--r--ext/curl/tests/bug48203_multi.phpt90
-rw-r--r--ext/curl/tests/bug48207.phpt47
-rw-r--r--ext/curl/tests/bug48514.phpt27
-rw-r--r--ext/curl/tests/bug52202.phpt16
-rw-r--r--ext/curl/tests/bug52827.phpt32
-rw-r--r--ext/curl/tests/bug54798.phpt72
-rw-r--r--ext/curl/tests/bug55767.phpt53
-rw-r--r--ext/curl/tests/bug61948-win32.phpt25
-rw-r--r--ext/curl/tests/bug61948.phpt23
-rw-r--r--ext/curl/tests/bug62839.phpt18
-rw-r--r--ext/curl/tests/bug63363.phpt34
-rw-r--r--ext/curl/tests/bug63795.phpt34
-rw-r--r--ext/curl/tests/curl_CURLOPT_READDATA.phpt44
-rw-r--r--ext/curl/tests/curl_basic_001.phpt45
-rw-r--r--ext/curl/tests/curl_basic_002.phpt41
-rw-r--r--ext/curl/tests/curl_basic_003.phpt56
-rw-r--r--ext/curl/tests/curl_basic_004.phpt41
-rw-r--r--ext/curl/tests/curl_basic_005.phpt41
-rw-r--r--ext/curl/tests/curl_basic_006.phpt41
-rw-r--r--ext/curl/tests/curl_basic_007.phpt24
-rw-r--r--ext/curl/tests/curl_basic_008.phpt29
-rw-r--r--ext/curl/tests/curl_basic_009.phpt23
-rw-r--r--ext/curl/tests/curl_basic_010.phpt30
-rw-r--r--ext/curl/tests/curl_basic_011.phpt38
-rw-r--r--ext/curl/tests/curl_basic_012.phpt38
-rw-r--r--ext/curl/tests/curl_basic_013.phpt38
-rw-r--r--ext/curl/tests/curl_basic_014.phpt15
-rw-r--r--ext/curl/tests/curl_basic_015.phpt16
-rw-r--r--ext/curl/tests/curl_basic_016.phpt63
-rw-r--r--ext/curl/tests/curl_basic_017.phpt69
-rw-r--r--ext/curl/tests/curl_basic_018.phpt72
-rw-r--r--ext/curl/tests/curl_basic_019.phpt28
-rw-r--r--ext/curl/tests/curl_basic_020.phpt25
-rw-r--r--ext/curl/tests/curl_basic_021.phpt24
-rw-r--r--ext/curl/tests/curl_close_basic.phpt19
-rw-r--r--ext/curl/tests/curl_copy_handle_basic.phpt30
-rw-r--r--ext/curl/tests/curl_copy_handle_basic_001.phpt42
-rw-r--r--ext/curl/tests/curl_copy_handle_basic_002.phpt47
-rw-r--r--ext/curl/tests/curl_copy_handle_basic_004.phpt44
-rw-r--r--ext/curl/tests/curl_copy_handle_basic_005.phpt50
-rw-r--r--ext/curl/tests/curl_copy_handle_basic_006.phpt37
-rw-r--r--ext/curl/tests/curl_copy_handle_basic_007.phpt45
-rw-r--r--ext/curl/tests/curl_copy_handle_basic_008.phpt25
-rw-r--r--ext/curl/tests/curl_copy_handle_variation1.phpt32
-rw-r--r--ext/curl/tests/curl_copy_handle_variation2.phpt44
-rw-r--r--ext/curl/tests/curl_error_basic.phpt41
-rw-r--r--ext/curl/tests/curl_file_deleted_before_curl_close.phpt38
-rw-r--r--ext/curl/tests/curl_ftp_pasv.phpt59
-rw-r--r--ext/curl/tests/curl_multi_close_basic.phpt19
-rw-r--r--ext/curl/tests/curl_multi_getcontent_basic3.phpt62
-rw-r--r--ext/curl/tests/curl_multi_getcontent_error1.phpt51
-rw-r--r--ext/curl/tests/curl_multi_getcontent_error2.phpt51
-rw-r--r--ext/curl/tests/curl_multi_getcontent_error3.phpt53
-rw-r--r--ext/curl/tests/curl_multi_getcontent_error4.phpt66
-rw-r--r--ext/curl/tests/curl_multi_init_basic.phpt31
-rw-r--r--ext/curl/tests/curl_multi_segfault.phpt56
-rw-r--r--ext/curl/tests/curl_multi_select_basic1.phpt27
-rw-r--r--ext/curl/tests/curl_setopt_CURLOPT_FOLLOWLOCATION_open_basedir.phpt22
-rw-r--r--ext/curl/tests/curl_setopt_CURLOPT_READFUNCTION.phpt54
-rw-r--r--ext/curl/tests/curl_setopt_array_basic.phpt56
-rw-r--r--ext/curl/tests/curl_setopt_basic002.phpt52
-rw-r--r--ext/curl/tests/curl_setopt_basic003.phpt43
-rw-r--r--ext/curl/tests/curl_setopt_basic004.phpt44
-rw-r--r--ext/curl/tests/curl_setopt_error.phpt45
-rw-r--r--ext/curl/tests/curl_testdata1.txt1
-rw-r--r--ext/curl/tests/curl_testdata2.txt1
-rw-r--r--ext/curl/tests/curl_version_error.phpt35
-rw-r--r--ext/curl/tests/curl_version_variation1.phpt165
-rw-r--r--ext/curl/tests/curl_write_callback.phpt36
-rw-r--r--ext/curl/tests/curl_write_file.phpt38
-rw-r--r--ext/curl/tests/curl_write_return.phpt33
-rw-r--r--ext/curl/tests/curl_write_stdout.phpt30
-rw-r--r--ext/curl/tests/curl_writeheader_callback.phpt37
-rw-r--r--ext/curl/tests/responder/get.php39
79 files changed, 3203 insertions, 0 deletions
diff --git a/ext/curl/tests/bug27023.phpt b/ext/curl/tests/bug27023.phpt
new file mode 100644
index 0000000..b738c95
--- /dev/null
+++ b/ext/curl/tests/bug27023.phpt
@@ -0,0 +1,48 @@
+--TEST--
+Bug #27023 (CURLOPT_POSTFIELDS does not parse content types for files)
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+?>
+--FILE--
+<?php
+
+$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_URL, "{$host}/get.php?test=file");
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+
+$params = array('file' => '@' . __DIR__ . '/curl_testdata1.txt');
+curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
+var_dump(curl_exec($ch));
+
+$params = array('file' => '@' . __DIR__ . '/curl_testdata1.txt;type=text/plain');
+curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
+var_dump(curl_exec($ch));
+
+$params = array('file' => '@' . __DIR__ . '/curl_testdata1.txt;filename=foo.txt');
+curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
+var_dump(curl_exec($ch));
+
+$params = array('file' => '@' . __DIR__ . '/curl_testdata1.txt;type=text/plain;filename=foo.txt');
+curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
+var_dump(curl_exec($ch));
+
+$params = array('file' => '@' . __DIR__ . '/curl_testdata1.txt;filename=foo.txt;type=text/plain');
+curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
+var_dump(curl_exec($ch));
+
+
+curl_close($ch);
+?>
+--EXPECTF--
+string(%d) "curl_testdata1.txt|application/octet-stream"
+string(%d) "curl_testdata1.txt|text/plain"
+string(%d) "foo.txt|application/octet-stream"
+string(%d) "foo.txt|text/plain"
+string(%d) "foo.txt|text/plain"
diff --git a/ext/curl/tests/bug45161.phpt b/ext/curl/tests/bug45161.phpt
new file mode 100644
index 0000000..9fdc7a7
--- /dev/null
+++ b/ext/curl/tests/bug45161.phpt
@@ -0,0 +1,52 @@
+--TEST--
+Bug #45161 (Reusing a curl handle leaks memory)
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == 'WIN') {
+ exit("skip not for Windows");
+}
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+$curl_version = curl_version();
+if ($curl_version['version_number'] < 0x071100) {
+ exit("skip: test works only with curl >= 7.17.0");
+}
+?>
+--FILE--
+<?php
+
+// Fill memory for test
+$ch = curl_init();
+$fp = fopen('/dev/null', 'w');
+
+/*
+$i = $start = $end = 100000.00;
+for ($i = 0; $i < 100; $i++) {
+ curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:9/');
+ curl_setopt($ch, CURLOPT_FILE, $fp);
+ curl_exec($ch);
+}
+*/
+
+// Start actual test
+$start = memory_get_usage() + 1024;
+for($i = 0; $i < 1024; $i++) {
+ curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:9/');
+ curl_setopt($ch, CURLOPT_FILE, $fp);
+ curl_exec($ch);
+}
+if ($start < memory_get_usage()) {
+ echo 'FAIL';
+} else {
+ echo 'PASS';
+}
+echo "\n";
+fclose($fp);
+unset($fp);
+?>
+--EXPECT--
+PASS
diff --git a/ext/curl/tests/bug46711.phpt b/ext/curl/tests/bug46711.phpt
new file mode 100644
index 0000000..8eef556
--- /dev/null
+++ b/ext/curl/tests/bug46711.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #46711 (lost memory when foreach is used for values passed to curl_setopt())
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+?>
+--FILE--
+<?php
+$ch = curl_init();
+
+$opt = array(
+ CURLOPT_AUTOREFERER => TRUE,
+ CURLOPT_BINARYTRANSFER => TRUE
+);
+
+curl_setopt( $ch, CURLOPT_AUTOREFERER , TRUE );
+
+foreach( $opt as $option => $value ) {
+ curl_setopt( $ch, $option, $value );
+}
+
+var_dump($opt); // with this bug, $opt[58] becomes NULL
+
+?>
+--EXPECT--
+array(2) {
+ [58]=>
+ bool(true)
+ [19914]=>
+ bool(true)
+}
diff --git a/ext/curl/tests/bug46739.phpt b/ext/curl/tests/bug46739.phpt
new file mode 100644
index 0000000..895bba7
--- /dev/null
+++ b/ext/curl/tests/bug46739.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Bug #46739 (array returned by curl_getinfo should contain content_type key)
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+?>
+--FILE--
+<?php
+$ch = curl_init('http://127.0.0.1:9/');
+
+curl_exec($ch);
+$info = curl_getinfo($ch);
+
+echo (array_key_exists('content_type', $info)) ? "set" : "not set";
+?>
+--EXPECT--
+set
diff --git a/ext/curl/tests/bug48203.phpt b/ext/curl/tests/bug48203.phpt
new file mode 100644
index 0000000..d8f4d22
--- /dev/null
+++ b/ext/curl/tests/bug48203.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #48203 (Crash when CURLOPT_STDERR is set to regular file)
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+?>
+--FILE--
+<?php
+
+$fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w');
+
+$ch = curl_init();
+
+curl_setopt($ch, CURLOPT_VERBOSE, 1);
+curl_setopt($ch, CURLOPT_STDERR, $fp);
+curl_setopt($ch, CURLOPT_URL, getenv('PHP_CURL_HTTP_REMOTE_SERVER'));
+
+fclose($fp); // <-- premature close of $fp caused a crash!
+
+curl_exec($ch);
+curl_close($ch);
+
+echo "Ok\n";
+
+?>
+--CLEAN--
+<?php @unlink(dirname(__FILE__) . '/bug48203.tmp'); ?>
+--EXPECTF--
+Warning: curl_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %sbug48203.php on line %d
+%A
+Ok
diff --git a/ext/curl/tests/bug48203_multi.phpt b/ext/curl/tests/bug48203_multi.phpt
new file mode 100644
index 0000000..7d4ee47
--- /dev/null
+++ b/ext/curl/tests/bug48203_multi.phpt
@@ -0,0 +1,90 @@
+--TEST--
+Variation of bug #48203 with curl_multi_exec (Crash when file pointers passed to curl are closed before calling curl_multi_exec)
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+?>
+--FILE--
+<?php
+
+function checkForClosedFilePointer($curl_option, $description) {
+ $fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w');
+
+ $ch1 = curl_init();
+ $ch2 = curl_init();
+
+ $options = array(
+ CURLOPT_RETURNTRANSFER => 1,
+ $curl_option => $fp,
+ CURLOPT_URL => getenv("PHP_CURL_HTTP_REMOTE_SERVER")
+ );
+
+ // we also need to set CURLOPT_VERBOSE to test CURLOPT_STDERR properly
+ if (CURLOPT_STDERR == $curl_option) {
+ $options[CURLOPT_VERBOSE] = 1;
+ }
+
+ if (CURLOPT_INFILE == $curl_option) {
+ $options[CURLOPT_UPLOAD] = 1;
+ }
+
+ curl_setopt_array($ch1, $options);
+ curl_setopt_array($ch2, $options);
+
+ fclose($fp); // <-- premature close of $fp caused a crash!
+
+ $mh = curl_multi_init();
+
+ curl_multi_add_handle($mh, $ch1);
+ curl_multi_add_handle($mh, $ch2);
+
+ $active = 0;
+ do {
+ curl_multi_exec($mh, $active);
+ } while ($active > 0);
+
+ curl_multi_remove_handle($mh, $ch1);
+ curl_multi_remove_handle($mh, $ch2);
+ curl_multi_close($mh);
+
+ echo "Ok for $description\n";
+}
+
+$options_to_check = array(
+ "CURLOPT_STDERR", "CURLOPT_WRITEHEADER", "CURLOPT_FILE", "CURLOPT_INFILE"
+);
+
+foreach($options_to_check as $option) {
+ checkForClosedFilePointer(constant($option), $option);
+}
+
+?>
+--CLEAN--
+<?php @unlink(dirname(__FILE__) . '/bug48203.tmp'); ?>
+--EXPECTF--
+Warning: curl_multi_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %sbug48203_multi.php on line 36
+
+Warning: curl_multi_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %sbug48203_multi.php on line 36
+%A
+Ok for CURLOPT_STDERR
+%A
+Warning: curl_multi_exec(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %sbug48203_multi.php on line 36
+
+Warning: curl_multi_exec(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %sbug48203_multi.php on line 36
+Ok for CURLOPT_WRITEHEADER
+
+Warning: curl_multi_exec(): CURLOPT_FILE resource has gone away, resetting to default in %sbug48203_multi.php on line 36
+
+Warning: curl_multi_exec(): CURLOPT_FILE resource has gone away, resetting to default in %sbug48203_multi.php on line 36
+%A
+Ok for CURLOPT_FILE
+
+Warning: curl_multi_exec(): CURLOPT_INFILE resource has gone away, resetting to default in %sbug48203_multi.php on line 36
+
+Warning: curl_multi_exec(): CURLOPT_INFILE resource has gone away, resetting to default in %sbug48203_multi.php on line 36
+Ok for CURLOPT_INFILE
diff --git a/ext/curl/tests/bug48207.phpt b/ext/curl/tests/bug48207.phpt
new file mode 100644
index 0000000..6ac16f5
--- /dev/null
+++ b/ext/curl/tests/bug48207.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test curl_setopt() CURLOPT_FILE readonly file handle
+--CREDITS--
+Mark van der Velden
+#testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+/*
+ * Description : Adds a file which stores the received data from curl_exec();
+ * Source code : ext/curl/multi.c
+ * Test documentation: http://wiki.php.net/qa/temp/ext/curl
+ */
+
+// Figure out what handler to use
+$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+if(!empty($host)) {
+
+ // Use the set Environment variable
+ $url = "$host/get.php?test=1";
+
+} else {
+
+ // Create a temporary file for the test
+ $tempname = tempnam(sys_get_temp_dir(), 'CURL_HANDLE');
+ $url = 'file://'. $tempname;
+
+ // add the test data to the file
+ file_put_contents($tempname, "Hello World!\nHello World!");
+}
+
+
+$tempfile = tempnam(sys_get_temp_dir(), 'CURL_FILE_HANDLE');
+
+$ch = curl_init($url);
+$fp = fopen($tempfile, "r"); // Opening 'fubar' with the incorrect readonly flag
+curl_setopt($ch, CURLOPT_FILE, $fp);
+curl_exec($ch);
+curl_close($ch);
+is_file($tempfile) and @unlink($tempfile);
+isset($tempname) and is_file($tempname) and @unlink($tempname);
+?>
+--EXPECTF--
+Warning: curl_setopt(): the provided file handle is not writable in %s on line %d
+Hello World!
+Hello World!
diff --git a/ext/curl/tests/bug48514.phpt b/ext/curl/tests/bug48514.phpt
new file mode 100644
index 0000000..0ea2575
--- /dev/null
+++ b/ext/curl/tests/bug48514.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Bug #48514 (cURL extension uses same resource name for simple and multi APIs)
+--SKIPIF--
+<?php
+
+if (!extension_loaded('curl')) {
+ exit("skip curl extension not loaded");
+}
+
+?>
+--FILE--
+<?php
+
+$ch1 = curl_init();
+var_dump($ch1);
+var_dump(get_resource_type($ch1));
+
+$ch2 = curl_multi_init();
+var_dump($ch2);
+var_dump(get_resource_type($ch2));
+
+?>
+--EXPECTF--
+resource(%d) of type (curl)
+%string|unicode%(4) "curl"
+resource(%d) of type (curl_multi)
+%string|unicode%(10) "curl_multi"
diff --git a/ext/curl/tests/bug52202.phpt b/ext/curl/tests/bug52202.phpt
new file mode 100644
index 0000000..a304d7f
--- /dev/null
+++ b/ext/curl/tests/bug52202.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #52202 (CURLOPT_PRIVATE gets clobbered)
+--SKIPIF--
+<?php
+if (!extension_loaded('curl')) exit("skip curl extension not loaded");
+?>
+--FILE--
+<?php
+$curl = curl_init("http://www.google.com");
+curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($curl, CURLOPT_PRIVATE, "123");
+curl_exec($curl);
+
+var_dump(curl_getinfo($curl, CURLINFO_PRIVATE));
+--EXPECT--
+string(3) "123"
diff --git a/ext/curl/tests/bug52827.phpt b/ext/curl/tests/bug52827.phpt
new file mode 100644
index 0000000..85a73fa
--- /dev/null
+++ b/ext/curl/tests/bug52827.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #52827 (curl_setopt with CURLOPT_STDERR erroneously increments the resource refcount)
+--SKIPIF--
+<?php
+
+if (!extension_loaded('curl')) {
+ exit("skip curl extension not loaded");
+}
+
+?>
+--FILE--
+<?php
+$s = fopen('php://temp/maxmemory=1024','wb+');
+
+/* force conversion of inner stream to STDIO.
+ * This is not necessary in Windows because the
+ * cast to a FILE* handle in curl_setopt already
+ * forces the conversion in that platform. The
+ * reason for this conversion is that the memory
+ * stream has an ugly but working mechanism to
+ * prevent being double freed when it's encapsulated,
+ * while STDIO streams don't. */
+$i = 0;
+while ($i++ < 5000) {
+fwrite($s, str_repeat('a',1024));
+}
+$handle=curl_init('http://www.example.com');
+curl_setopt($handle, CURLOPT_STDERR, $s);
+
+echo "Done.";
+--EXPECTF--
+Done.
diff --git a/ext/curl/tests/bug54798.phpt b/ext/curl/tests/bug54798.phpt
new file mode 100644
index 0000000..7ec84ad
--- /dev/null
+++ b/ext/curl/tests/bug54798.phpt
@@ -0,0 +1,72 @@
+--TEST--
+Bug #54798 (Segfault when CURLOPT_STDERR file pointer is closed before calling curl_exec)
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+?>
+--FILE--
+<?php
+
+function checkForClosedFilePointer($host, $curl_option, $description) {
+ $fp = fopen(dirname(__FILE__) . '/bug54798.tmp', 'w+');
+
+ $ch = curl_init();
+
+ // we also need CURLOPT_VERBOSE to be set to test CURLOPT_STDERR properly
+ if (CURLOPT_STDERR == $curl_option) {
+ curl_setopt($ch, CURLOPT_VERBOSE, 1);
+ }
+
+ if (CURLOPT_INFILE == $curl_option) {
+ curl_setopt($ch, CURLOPT_UPLOAD, 1);
+ }
+
+ curl_setopt($ch, $curl_option, $fp);
+
+ curl_setopt($ch, CURLOPT_URL, $host);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+
+ fclose($fp); // <-- premature close of $fp caused a crash!
+
+ curl_exec($ch);
+
+ curl_close($ch);
+
+ echo "Ok for $description\n";
+}
+
+$options_to_check = array(
+ "CURLOPT_STDERR",
+ "CURLOPT_WRITEHEADER",
+ "CURLOPT_FILE",
+ "CURLOPT_INFILE"
+);
+
+$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+foreach($options_to_check as $option) {
+ checkForClosedFilePointer($host, constant($option), $option);
+}
+
+?>
+--CLEAN--
+<?php @unlink(dirname(__FILE__) . '/bug54798.tmp'); ?>
+--EXPECTF--
+Warning: curl_exec(): CURLOPT_STDERR resource has gone away, resetting to stderr in %sbug54798.php on line %d
+* About to connect() %a
+* Closing connection #%d
+Ok for CURLOPT_STDERR
+
+Warning: curl_exec(): CURLOPT_WRITEHEADER resource has gone away, resetting to default in %sbug54798.php on line 24
+Ok for CURLOPT_WRITEHEADER
+
+Warning: curl_exec(): CURLOPT_FILE resource has gone away, resetting to default in %sbug54798.php on line 24
+%a
+Ok for CURLOPT_FILE
+
+Warning: curl_exec(): CURLOPT_INFILE resource has gone away, resetting to default in %sbug54798.php on line %d
+Ok for CURLOPT_INFILE
diff --git a/ext/curl/tests/bug55767.phpt b/ext/curl/tests/bug55767.phpt
new file mode 100644
index 0000000..321f67b
--- /dev/null
+++ b/ext/curl/tests/bug55767.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Test curl_opt() function with POST params from array with a numeric key
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo '*** Testing curl sending through GET an POST ***' . "\n";
+
+ $url = "{$host}/get.php?test=getpost&get_param=Hello%20World";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, array('Hello'=>'World','Foo'=>'Bar',100=>'John Doe'));
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $curl_content = curl_exec($ch);
+ curl_close($ch);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl sending through GET an POST ***
+string(203) "array(2) {
+ ["test"]=>
+ string(7) "getpost"
+ ["get_param"]=>
+ string(11) "Hello World"
+}
+array(3) {
+ ["Hello"]=>
+ string(5) "World"
+ ["Foo"]=>
+ string(3) "Bar"
+ [100]=>
+ string(8) "John Doe"
+}
+"
+===DONE===
diff --git a/ext/curl/tests/bug61948-win32.phpt b/ext/curl/tests/bug61948-win32.phpt
new file mode 100644
index 0000000..dc86526
--- /dev/null
+++ b/ext/curl/tests/bug61948-win32.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #61948 (CURLOPT_COOKIEFILE '' raises open_basedir restriction)
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip";
+if(substr(PHP_OS, 0, 3) != 'WIN' )
+ die("skip Not Valid for Linux");
+?>
+--INI--
+open_basedir="c:/tmp"
+--FILE--
+<?php
+ $ch = curl_init();
+ var_dump(curl_setopt($ch, CURLOPT_COOKIEFILE, ""));
+ var_dump(curl_setopt($ch, CURLOPT_COOKIEFILE, "c:/tmp/foo"));
+ var_dump(curl_setopt($ch, CURLOPT_COOKIEFILE, "c:/xxx/bar"));
+ curl_close($ch);
+?>
+--EXPECTF--
+%a
+
+Warning: curl_setopt(): open_basedir restriction in effect. File(c:/tmp/foo) is not within the allowed path(s): (c:/tmp) in %sbug61948-win32.php on line %d
+bool(false)
+
+Warning: curl_setopt(): open_basedir restriction in effect. File(c:/xxx/bar) is not within the allowed path(s): (c:/tmp) in %sbug61948-win32.php on line %d
+bool(false)
diff --git a/ext/curl/tests/bug61948.phpt b/ext/curl/tests/bug61948.phpt
new file mode 100644
index 0000000..00df07d
--- /dev/null
+++ b/ext/curl/tests/bug61948.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #61948 (CURLOPT_COOKIEFILE '' raises open_basedir restriction)
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip";
+if(substr(PHP_OS, 0, 3) == 'WIN' )
+ die("skip Not Valid for Windows");
+?>
+--INI--
+open_basedir="/tmp"
+--FILE--
+<?php
+ $ch = curl_init();
+ var_dump(curl_setopt($ch, CURLOPT_COOKIEFILE, ""));
+ var_dump(curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/foo"));
+ var_dump(curl_setopt($ch, CURLOPT_COOKIEFILE, "/xxx/bar"));
+ curl_close($ch);
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+
+Warning: curl_setopt(): open_basedir restriction in effect. File(/xxx/bar) is not within the allowed path(s): (/tmp) in %sbug61948.php on line %d
+bool(false)
diff --git a/ext/curl/tests/bug62839.phpt b/ext/curl/tests/bug62839.phpt
new file mode 100644
index 0000000..e6988d6
--- /dev/null
+++ b/ext/curl/tests/bug62839.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #62839 (curl_copy_handle segfault with CURLOPT_FILE)
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip";
+?>
+--FILE--
+<?php
+$curl = curl_init();
+
+$fd = tmpfile();
+curl_setopt($curl, CURLOPT_FILE, $fd);
+
+curl_copy_handle($curl);
+
+echo 'DONE!';
+?>
+--EXPECTF--
+DONE!
diff --git a/ext/curl/tests/bug63363.phpt b/ext/curl/tests/bug63363.phpt
new file mode 100644
index 0000000..36abc5e
--- /dev/null
+++ b/ext/curl/tests/bug63363.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Bug #63363 (CURL silently accepts boolean value for SSL_VERIFYHOST)
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+$curl_version = curl_version();
+if ($curl_version['version_number'] >= 0x071c01) {
+ exit("skip: test valid for libcurl < 7.28.1");
+}
+?>
+--FILE--
+<?php
+$ch = curl_init();
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false));
+/* Case that should throw an error */
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true));
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0));
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1));
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2));
+
+curl_close($ch);
+?>
+--EXPECTF--
+bool(true)
+
+Notice: curl_setopt(): CURLOPT_SSL_VERIFYHOST with value 1 is deprecated and will be removed as of libcurl 7.28.1. It is recommended to use value 2 instead in %s on line %d
+bool(true)
+bool(true)
+
+Notice: curl_setopt(): CURLOPT_SSL_VERIFYHOST with value 1 is deprecated and will be removed as of libcurl 7.28.1. It is recommended to use value 2 instead in %s on line %d
+bool(true)
+bool(true)
diff --git a/ext/curl/tests/bug63795.phpt b/ext/curl/tests/bug63795.phpt
new file mode 100644
index 0000000..798faa6
--- /dev/null
+++ b/ext/curl/tests/bug63795.phpt
@@ -0,0 +1,34 @@
+--TEST--
+Bug #63795 (CURL >= 7.28.0 no longer support value 1 for CURLOPT_SSL_VERIFYHOST)
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ exit("skip curl extension not loaded");
+}
+$curl_version = curl_version();
+if ($curl_version['version_number'] < 0x071c01) {
+ exit("skip: test valid for libcurl >= 7.28.1");
+}
+?>
+--FILE--
+<?php
+$ch = curl_init();
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false));
+/* Case that should throw an error */
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true));
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0));
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1));
+var_dump(curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2));
+
+curl_close($ch);
+?>
+--EXPECTF--
+bool(true)
+
+Notice: curl_setopt(): CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used instead in %s on line %d
+bool(true)
+bool(true)
+
+Notice: curl_setopt(): CURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used instead in %s on line %d
+bool(true)
+bool(true)
diff --git a/ext/curl/tests/curl_CURLOPT_READDATA.phpt b/ext/curl/tests/curl_CURLOPT_READDATA.phpt
new file mode 100644
index 0000000..ea63d44
--- /dev/null
+++ b/ext/curl/tests/curl_CURLOPT_READDATA.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test CURLOPT_READDATA without a callback function
+--CREDITS--
+Mattijs Hoitink mattijshoitink@gmail.com
+#Testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+
+// The URL to POST to
+$url = getenv('PHP_CURL_HTTP_REMOTE_SERVER') . '/get.php?test=post';
+
+// Create a temporary file to read the data from
+$tempname = tempnam(sys_get_temp_dir(), 'CURL_DATA');
+$datalen = file_put_contents($tempname, "hello=world&smurf=blue");
+
+ob_start();
+
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_URL, $url);
+curl_setopt($ch, CURLOPT_POST, true);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+curl_setopt($ch, CURLOPT_READDATA, fopen($tempname, 'rb'));
+curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:', "Content-Length: {$datalen}"));
+
+if (false === $response = curl_exec($ch)) {
+ echo 'Error #' . curl_errno($ch) . ': ' . curl_error($ch);
+} else {
+ echo $response;
+}
+
+curl_close($ch);
+
+// Clean the temporary file
+@unlink($tempname);
+
+--EXPECT--
+array(2) {
+ ["hello"]=>
+ string(5) "world"
+ ["smurf"]=>
+ string(4) "blue"
+}
diff --git a/ext/curl/tests/curl_basic_001.phpt b/ext/curl/tests/curl_basic_001.phpt
new file mode 100644
index 0000000..fa362b3
--- /dev/null
+++ b/ext/curl/tests/curl_basic_001.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test curl_exec() function with basic functionality
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch@9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype : bool curl_exec(resource ch)
+ * Description: Perform a cURL session
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo "*** Testing curl_exec() : basic functionality ***\n";
+
+ $url = "{$host}/get.php?test=get";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+ $ok = curl_exec($ch);
+ curl_close($ch);
+ $curl_content = ob_get_contents();
+ ob_end_clean();
+
+ if($ok) {
+ var_dump( $curl_content );
+ } else {
+ echo "curl_exec returned false";
+ }
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_exec() : basic functionality ***
+string(25) "Hello World!
+Hello World!"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_002.phpt b/ext/curl/tests/curl_basic_002.phpt
new file mode 100644
index 0000000..e46f323
--- /dev/null
+++ b/ext/curl/tests/curl_basic_002.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test curl_opt() function with CURLOPT_RETURNTRANSFER parameter set to 1
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch@9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo '*** Testing curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); ***' . "\n";
+
+ $url = "{$host}/get.php?test=get";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $curl_content = curl_exec($ch);
+ curl_close($ch);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); ***
+string(25) "Hello World!
+Hello World!"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_003.phpt b/ext/curl/tests/curl_basic_003.phpt
new file mode 100644
index 0000000..eb2aecd
--- /dev/null
+++ b/ext/curl/tests/curl_basic_003.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Test curl_opt() function with POST parameters
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch@9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo '*** Testing curl sending through GET an POST ***' . "\n";
+
+ $url = "{$host}/get.php?test=getpost&get_param=Hello%20World";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, "Hello=World&Foo=Bar&Person=John%20Doe");
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $curl_content = curl_exec($ch);
+ curl_close($ch);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl sending through GET an POST ***
+string(208) "array(2) {
+ ["test"]=>
+ string(7) "getpost"
+ ["get_param"]=>
+ string(11) "Hello World"
+}
+array(3) {
+ ["Hello"]=>
+ string(5) "World"
+ ["Foo"]=>
+ string(3) "Bar"
+ ["Person"]=>
+ string(8) "John Doe"
+}
+"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_004.phpt b/ext/curl/tests/curl_basic_004.phpt
new file mode 100644
index 0000000..ea2eeca
--- /dev/null
+++ b/ext/curl/tests/curl_basic_004.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test curl_opt() function with setting referer
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch@9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo '*** Testing curl setting referer ***' . "\n";
+
+ $url = "{$host}/get.php?test=referer";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_REFERER, 'http://www.refer.er');
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $curl_content = curl_exec($ch);
+ curl_close($ch);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl setting referer ***
+string(19) "http://www.refer.er"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_005.phpt b/ext/curl/tests/curl_basic_005.phpt
new file mode 100644
index 0000000..9285c10
--- /dev/null
+++ b/ext/curl/tests/curl_basic_005.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test curl_opt() function with user agent
+--CREDITS--
+Sebastian Deutsch <sebastian.deutsch@9elements.com>
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo '*** Testing curl with user agent ***' . "\n";
+
+ $url = "{$host}/get.php?test=useragent";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_USERAGENT, 'cURL phpt');
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $curl_content = curl_exec($ch);
+ curl_close($ch);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl with user agent ***
+string(9) "cURL phpt"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_006.phpt b/ext/curl/tests/curl_basic_006.phpt
new file mode 100644
index 0000000..5f1a4f4
--- /dev/null
+++ b/ext/curl/tests/curl_basic_006.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Test curl_opt() function with CURLOPT_WRITEFUNCTION parameter set to a closure
+--CREDITS--
+?
+TestFest 2009 - AFUP - Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo '*** Testing curl_setopt($ch, CURLOPT_WRITEFUNCTION, <closure>); ***' . "\n";
+
+ $url = "{$host}/get.php?test=get";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+ curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $data) {
+ echo 'Data: '.$data;
+ return strlen ($data);
+ });
+
+ curl_exec($ch);
+ curl_close($ch);
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_setopt($ch, CURLOPT_WRITEFUNCTION, <closure>); ***
+Data: Hello World!
+Hello World!===DONE===
diff --git a/ext/curl/tests/curl_basic_007.phpt b/ext/curl/tests/curl_basic_007.phpt
new file mode 100644
index 0000000..b7eba4b
--- /dev/null
+++ b/ext/curl/tests/curl_basic_007.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test curl_error() & curl_errno() function without url
+--CREDITS--
+TestFest 2009 - AFUP - Perrick Penet <perrick@noparking.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+//In January 2008 , level 7.18.0 of the curl lib, many of the messages changed.
+//The final crlf was removed. This test is coded to work with or without the crlf.
+
+$ch = curl_init();
+
+curl_exec($ch);
+var_dump(curl_error($ch));
+var_dump(curl_errno($ch));
+curl_close($ch);
+
+
+?>
+--EXPECTF--
+%string|unicode%(%d) "No URL set!%w"
+int(3)
diff --git a/ext/curl/tests/curl_basic_008.phpt b/ext/curl/tests/curl_basic_008.phpt
new file mode 100644
index 0000000..29e3343
--- /dev/null
+++ b/ext/curl/tests/curl_basic_008.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Test curl_error() & curl_errno() function with problematic host
+--CREDITS--
+TestFest 2009 - AFUP - Perrick Penet <perrick@noparking.net>
+--SKIPIF--
+<?php
+ if (!extension_loaded("curl")) print "skip";
+ $addr = "www.".uniqid().".".uniqid();
+ if (gethostbyname($addr) != $addr) {
+ print "skip catch all dns";
+ }
+?>
+--FILE--
+<?php
+
+$url = "http://www.".uniqid().".".uniqid();
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_URL, $url);
+
+curl_exec($ch);
+var_dump(curl_error($ch));
+var_dump(curl_errno($ch));
+curl_close($ch);
+
+
+?>
+--EXPECTF--
+%unicode|string%(%d) "%r(Couldn't resolve host|Could not resolve host:)%r %Swww.%s"
+int(6)
diff --git a/ext/curl/tests/curl_basic_009.phpt b/ext/curl/tests/curl_basic_009.phpt
new file mode 100644
index 0000000..529e590
--- /dev/null
+++ b/ext/curl/tests/curl_basic_009.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Test curl_error() & curl_errno() function with problematic protocol
+--CREDITS--
+TestFest 2009 - AFUP - Perrick Penet <perrick@noparking.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+$url = uniqid()."://www.".uniqid().".".uniqid();
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_URL, $url);
+
+curl_exec($ch);
+var_dump(curl_error($ch));
+var_dump(curl_errno($ch));
+curl_close($ch);
+
+
+?>
+--EXPECTF--
+%unicode|string%(%d) "%Srotocol%s"
+int(1)
diff --git a/ext/curl/tests/curl_basic_010.phpt b/ext/curl/tests/curl_basic_010.phpt
new file mode 100644
index 0000000..0fc2fe6
--- /dev/null
+++ b/ext/curl/tests/curl_basic_010.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test curl_error() & curl_errno() function with problematic proxy
+--CREDITS--
+TestFest 2009 - AFUP - Perrick Penet <perrick@noparking.net>
+--SKIPIF--
+<?php
+ if (!extension_loaded("curl")) print "skip";
+ $addr = "www.".uniqid().".".uniqid();
+ if (gethostbyname($addr) != $addr) {
+ print "skip catch all dns";
+ }
+?>
+--FILE--
+<?php
+
+$url = "http://www.example.org";
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_PROXY, uniqid().":".uniqid());
+curl_setopt($ch, CURLOPT_URL, $url);
+
+curl_exec($ch);
+var_dump(curl_error($ch));
+var_dump(curl_errno($ch));
+curl_close($ch);
+
+
+?>
+--EXPECTF--
+%unicode|string%(%d) "%r(Couldn't resolve proxy|Could not resolve proxy:|Could not resolve host:)%r %s"
+int(5)
diff --git a/ext/curl/tests/curl_basic_011.phpt b/ext/curl/tests/curl_basic_011.phpt
new file mode 100644
index 0000000..10c90b1
--- /dev/null
+++ b/ext/curl/tests/curl_basic_011.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test curl_opt() function with COOKIE
+--CREDITS--
+TestFest 2009 - AFUP - Xavier Gorse <xgorse@elao.com>
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv(b'PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo '*** Testing curl with cookie ***' . "\n";
+
+ $url = "{$host}/get.php?test=cookie";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_COOKIE, 'foo=bar');
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $curl_content = curl_exec($ch);
+ curl_close($ch);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl with cookie ***
+string(3) "bar"
+===DONE===
+
diff --git a/ext/curl/tests/curl_basic_012.phpt b/ext/curl/tests/curl_basic_012.phpt
new file mode 100644
index 0000000..e4706fa
--- /dev/null
+++ b/ext/curl/tests/curl_basic_012.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test curl_opt() function with CURLOPT_HTTP_VERSION/CURL_HTTP_VERSION_1_0
+--CREDITS--
+TestFest 2009 - AFUP - Xavier Gorse <xgorse@elao.com>
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv(b'PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo '*** Testing curl with HTTP/1.0 ***' . "\n";
+
+ $url = "{$host}/get.php?test=httpversion";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $curl_content = curl_exec($ch);
+ curl_close($ch);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl with HTTP/1.0 ***
+string(8) "HTTP/1.0"
+===DONE===
+ \ No newline at end of file
diff --git a/ext/curl/tests/curl_basic_013.phpt b/ext/curl/tests/curl_basic_013.phpt
new file mode 100644
index 0000000..c49d187
--- /dev/null
+++ b/ext/curl/tests/curl_basic_013.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test curl_opt() function with CURLOPT_HTTP_VERSION/CURL_HTTP_VERSION_1_1
+--CREDITS--
+TestFest 2009 - AFUP - Xavier Gorse <xgorse@elao.com>
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv(b'PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo '*** Testing curl with HTTP/1.1 ***' . "\n";
+
+ $url = "{$host}/get.php?test=httpversion";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $curl_content = curl_exec($ch);
+ curl_close($ch);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl with HTTP/1.1 ***
+string(8) "HTTP/1.1"
+===DONE===
+ \ No newline at end of file
diff --git a/ext/curl/tests/curl_basic_014.phpt b/ext/curl/tests/curl_basic_014.phpt
new file mode 100644
index 0000000..4037970
--- /dev/null
+++ b/ext/curl/tests/curl_basic_014.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Test curl_init() function with basic functionality
+--CREDITS--
+Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) exit("skip curl extension not loaded"); ?>
+--FILE--
+<?php
+ $ch = curl_init();
+ var_dump($ch);
+?>
+===DONE===
+--EXPECTF--
+resource(%d) of type (curl)
+===DONE===
diff --git a/ext/curl/tests/curl_basic_015.phpt b/ext/curl/tests/curl_basic_015.phpt
new file mode 100644
index 0000000..e8e43e5
--- /dev/null
+++ b/ext/curl/tests/curl_basic_015.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Test curl_init() function with $url parameter defined
+--CREDITS--
+Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php if (!extension_loaded("curl")) exit("skip curl extension not loaded"); ?>
+--FILE--
+<?php
+ $url = 'http://www.example.com/';
+ $ch = curl_init($url);
+ var_dump($url == curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
+?>
+===DONE===
+--EXPECTF--
+bool(true)
+===DONE===
diff --git a/ext/curl/tests/curl_basic_016.phpt b/ext/curl/tests/curl_basic_016.phpt
new file mode 100644
index 0000000..b5890c0
--- /dev/null
+++ b/ext/curl/tests/curl_basic_016.phpt
@@ -0,0 +1,63 @@
+--TEST--
+Test curl_getinfo() function with basic functionality
+--CREDITS--
+Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+$curl_version = curl_version();
+if ($curl_version['version_number'] > 0x071201) {
+ exit("skip: tests works only on older versions of curl");
+}
+?>
+--FILE--
+<?php
+ $ch = curl_init();
+ $info = curl_getinfo($ch);
+ var_dump($info);
+?>
+===DONE===
+--EXPECTF--
+array(2%d) {
+ [%u|b%"url"]=>
+ string(0) ""
+ ["content_type"]=>
+ NULL
+ ["http_code"]=>
+ int(0)
+ ["header_size"]=>
+ int(0)
+ ["request_size"]=>
+ int(0)
+ ["filetime"]=>
+ int(0)
+ ["ssl_verify_result"]=>
+ int(0)
+ ["redirect_count"]=>
+ int(0)
+ ["total_time"]=>
+ float(0)
+ ["namelookup_time"]=>
+ float(0)
+ ["connect_time"]=>
+ float(0)
+ ["pretransfer_time"]=>
+ float(0)
+ ["size_upload"]=>
+ float(0)
+ ["size_download"]=>
+ float(0)
+ ["speed_download"]=>
+ float(0)
+ ["speed_upload"]=>
+ float(0)
+ ["download_content_length"]=>
+ float(%f)
+ ["upload_content_length"]=>
+ float(%f)
+ ["starttransfer_time"]=>
+ float(0)
+ ["redirect_time"]=>
+ float(0)
+}
+===DONE===
diff --git a/ext/curl/tests/curl_basic_017.phpt b/ext/curl/tests/curl_basic_017.phpt
new file mode 100644
index 0000000..09247b2
--- /dev/null
+++ b/ext/curl/tests/curl_basic_017.phpt
@@ -0,0 +1,69 @@
+--TEST--
+Test curl_multi_exec() function with basic functionality
+--CREDITS--
+TestFest 2009 - AFUP - Thomas Rabaix <thomas.rabaix@gmail.com>
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype : bool curl_multi_exec(resource ch)
+ * Description: Perform a cURL session
+ * Source code: ext/curl/multi.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo "*** Testing curl_exec() : basic functionality ***\n";
+
+ $url = "{$host}/get.php?test=get";
+ $chs = array(
+ 0 => curl_init(),
+ 1 => curl_init(),
+ 2 => curl_init(),
+ );
+
+ ob_start(); // start output buffering
+
+ curl_setopt($chs[0], CURLOPT_URL, $url); //set the url we want to use
+ curl_setopt($chs[1], CURLOPT_URL, $url); //set the url we want to use
+ curl_setopt($chs[2], CURLOPT_URL, $url); //set the url we want to use
+
+ $mh = curl_multi_init();
+
+ // add handlers
+ curl_multi_add_handle($mh, $chs[0]);
+ curl_multi_add_handle($mh, $chs[1]);
+ curl_multi_add_handle($mh, $chs[2]);
+
+ $running=null;
+ //execute the handles
+ $state = null;
+ do {
+ $state = curl_multi_exec($mh, $running);
+ } while ($running > 0);
+
+ //close the handles
+ curl_multi_remove_handle($mh, $chs[0]);
+ curl_multi_remove_handle($mh, $chs[1]);
+ curl_multi_remove_handle($mh, $chs[2]);
+ curl_multi_close($mh);
+
+ $curl_content = ob_get_contents();
+ ob_end_clean();
+
+ if($state === CURLM_OK) {
+ var_dump( $curl_content );
+ } else {
+ echo "curl_exec returned false";
+ }
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_exec() : basic functionality ***
+string(75) "Hello World!
+Hello World!Hello World!
+Hello World!Hello World!
+Hello World!"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_018.phpt b/ext/curl/tests/curl_basic_018.phpt
new file mode 100644
index 0000000..7cffb89
--- /dev/null
+++ b/ext/curl/tests/curl_basic_018.phpt
@@ -0,0 +1,72 @@
+--TEST--
+Test curl_setopt() with curl_multi function with basic functionality
+--CREDITS--
+TestFest 2009 - AFUP - Thomas Rabaix <thomas.rabaix@gmail.com>
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype : bool curl_setopt(resource ch, int option, mixed value)
+ * Description: Set an option for a cURL transfer
+ * Source code: ext/curl/interface.c
+ * Alias to functions:
+ */
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ // start testing
+ echo "*** Testing curl_exec() : basic functionality ***\n";
+
+ $url = "{$host}/get.php?test=get";
+ $chs = array(
+ 0 => curl_init(),
+ 1 => curl_init(),
+ 2 => curl_init(),
+ );
+
+ ob_start(); // start output buffering
+
+ $options = array(
+ CURLOPT_RETURNTRANSFER => 1,
+ CURLOPT_URL => $url,
+ );
+
+ curl_setopt_array($chs[0], $options); //set the options
+ curl_setopt_array($chs[1], $options); //set the options
+ curl_setopt_array($chs[2], $options); //set the options
+
+ $mh = curl_multi_init();
+
+ // add handlers
+ curl_multi_add_handle($mh, $chs[0]);
+ curl_multi_add_handle($mh, $chs[1]);
+ curl_multi_add_handle($mh, $chs[2]);
+
+ $running=null;
+ //execute the handles
+ do {
+ curl_multi_exec($mh, $running);
+ } while ($running > 0);
+
+ $curl_content = '';
+ $curl_content .= curl_multi_getcontent($chs[0]);
+ $curl_content .= curl_multi_getcontent($chs[1]);
+ $curl_content .= curl_multi_getcontent($chs[2]);
+
+ //close the handles
+ curl_multi_remove_handle($mh, $chs[0]);
+ curl_multi_remove_handle($mh, $chs[1]);
+ curl_multi_remove_handle($mh, $chs[2]);
+ curl_multi_close($mh);
+
+ var_dump( $curl_content );
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_exec() : basic functionality ***
+%unicode|string%(75) "Hello World!
+Hello World!Hello World!
+Hello World!Hello World!
+Hello World!"
+===DONE===
diff --git a/ext/curl/tests/curl_basic_019.phpt b/ext/curl/tests/curl_basic_019.phpt
new file mode 100644
index 0000000..ab605a8
--- /dev/null
+++ b/ext/curl/tests/curl_basic_019.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Test curl_getinfo() function with CURLINFO_EFFECTIVE_URL parameter
+--CREDITS--
+Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ $url = "{$host}/get.php?test=";
+ $ch = curl_init();
+
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_exec($ch);
+ $info = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
+ var_dump($url == $info);
+
+ curl_close($ch);
+?>
+===DONE===
+--EXPECTF--
+Hello World!
+Hello World!bool(true)
+===DONE===
diff --git a/ext/curl/tests/curl_basic_020.phpt b/ext/curl/tests/curl_basic_020.phpt
new file mode 100644
index 0000000..d622053
--- /dev/null
+++ b/ext/curl/tests/curl_basic_020.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test curl_getinfo() function with CURLINFO_HTTP_CODE parameter
+--CREDITS--
+Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ $url = "{$host}/get.php?test=";
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_exec($ch);
+ var_dump(curl_getinfo($ch, CURLINFO_HTTP_CODE));
+ curl_close($ch);
+?>
+===DONE===
+--EXPECTF--
+Hello World!
+Hello World!int(200)
+===DONE===
diff --git a/ext/curl/tests/curl_basic_021.phpt b/ext/curl/tests/curl_basic_021.phpt
new file mode 100644
index 0000000..3b4798d
--- /dev/null
+++ b/ext/curl/tests/curl_basic_021.phpt
@@ -0,0 +1,24 @@
+--TEST--
+Test curl_getinfo() function with CURLINFO_CONTENT_TYPE parameter
+--CREDITS--
+Jean-Marc Fontaine <jmf@durcommefaire.net>
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+?>
+--FILE--
+<?php
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+ $url = "{$host}/get.php?test=contenttype";
+
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_exec($ch);
+ var_dump(curl_getinfo($ch, CURLINFO_CONTENT_TYPE));
+ curl_close($ch);
+?>
+===DONE===
+--EXPECTF--
+%unicode|string%(24) "text/plain;charset=utf-8"
+===DONE===
diff --git a/ext/curl/tests/curl_close_basic.phpt b/ext/curl/tests/curl_close_basic.phpt
new file mode 100644
index 0000000..9c01b02
--- /dev/null
+++ b/ext/curl/tests/curl_close_basic.phpt
@@ -0,0 +1,19 @@
+--TEST--
+curl_close
+--CREDITS--
+Stefan Koopmanschap <stefan@php.net>
+#testfest Utrecht 2009
+--SKIPIF--
+<?php
+if (!extension_loaded('curl')) print 'skip';
+?>
+--FILE--
+<?php
+$ch = curl_init();
+curl_close($ch);
+var_dump($ch);
+?>
+===DONE===
+--EXPECTF--
+resource(%d) of type (Unknown)
+===DONE===
diff --git a/ext/curl/tests/curl_copy_handle_basic.phpt b/ext/curl/tests/curl_copy_handle_basic.phpt
new file mode 100644
index 0000000..1a6ff41
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_basic.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test curl_copy_handle() function with basic functionality
+--CREDITS--
+Francesco Fullone ff@ideato.it
+#PHPTestFest Cesena Italia on 2009-06-20
+--SKIPIF--
+<?php
+ if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+?>
+--FILE--
+<?php
+echo "*** Testing curl_copy_handle(): basic ***\n";
+
+// create a new cURL resource
+$ch = curl_init();
+
+// set URL and other appropriate options
+curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/');
+curl_setopt($ch, CURLOPT_HEADER, 0);
+
+// copy the handle
+$ch2 = curl_copy_handle($ch);
+
+var_dump(curl_getinfo($ch) === curl_getinfo($ch2));
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_copy_handle(): basic ***
+bool(true)
+===DONE===
diff --git a/ext/curl/tests/curl_copy_handle_basic_001.phpt b/ext/curl/tests/curl_copy_handle_basic_001.phpt
new file mode 100644
index 0000000..f1b4db3
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_basic_001.phpt
@@ -0,0 +1,42 @@
+--TEST--
+Test curl_copy_handle() with simple get
+--CREDITS--
+Rick Buitenman <rick@meritos.nl>
+#testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ echo '*** Testing curl copy handle with simple GET ***' . "\n";
+
+ $url = "{$host}/get.php?test=getpost&get_param=Hello%20World";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $copy = curl_copy_handle($ch);
+ curl_close($ch);
+
+ $curl_content = curl_exec($copy);
+ curl_close($copy);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl copy handle with simple GET ***
+string(106) "array(2) {
+ ["test"]=>
+ string(7) "getpost"
+ ["get_param"]=>
+ string(11) "Hello World"
+}
+array(0) {
+}
+"
+===DONE===
diff --git a/ext/curl/tests/curl_copy_handle_basic_002.phpt b/ext/curl/tests/curl_copy_handle_basic_002.phpt
new file mode 100644
index 0000000..9ab3363
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_basic_002.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Test curl_copy_handle() with simple POST
+--CREDITS--
+Rick Buitenman <rick@meritos.nl>
+#testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ echo '*** Testing curl copy handle with simple POST ***' . "\n";
+
+ $url = "{$host}/get.php?test=getpost";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, "Hello=World&Foo=Bar&Person=John%20Doe");
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $copy = curl_copy_handle($ch);
+ curl_close($ch);
+
+ $curl_content = curl_exec($copy);
+ curl_close($copy);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl copy handle with simple POST ***
+string(163) "array(1) {
+ ["test"]=>
+ string(7) "getpost"
+}
+array(3) {
+ ["Hello"]=>
+ string(5) "World"
+ ["Foo"]=>
+ string(3) "Bar"
+ ["Person"]=>
+ string(8) "John Doe"
+}
+"
+===DONE===
diff --git a/ext/curl/tests/curl_copy_handle_basic_004.phpt b/ext/curl/tests/curl_copy_handle_basic_004.phpt
new file mode 100644
index 0000000..9b794e9
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_basic_004.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test curl_copy_handle() after exec()
+--CREDITS--
+Rick Buitenman <rick@meritos.nl>
+#testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ echo '*** Test curl_copy_handle() after exec() ***' . "\n";
+
+ $url = "{$host}/get.php?test=getpost&get_param=Hello%20World";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+
+ $curl_content = curl_exec($ch);
+ $copy = curl_copy_handle($ch);
+ curl_close($ch);
+
+ $curl_content_copy = curl_exec($copy);
+ curl_close($copy);
+
+ var_dump( $curl_content_copy );
+?>
+===DONE===
+--EXPECTF--
+*** Test curl_copy_handle() after exec() ***
+string(106) "array(2) {
+ ["test"]=>
+ string(7) "getpost"
+ ["get_param"]=>
+ string(11) "Hello World"
+}
+array(0) {
+}
+"
+===DONE===
diff --git a/ext/curl/tests/curl_copy_handle_basic_005.phpt b/ext/curl/tests/curl_copy_handle_basic_005.phpt
new file mode 100644
index 0000000..aa9e2fa
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_basic_005.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Test curl_copy_handle() after exec() with POST
+--CREDITS--
+Rick Buitenman <rick@meritos.nl>
+#testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ echo '*** Test curl_copy_handle() after exec() with POST ***' . "\n";
+
+ $url = "{$host}/get.php?test=getpost";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, "Hello=World&Foo=Bar&Person=John%20Doe");
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+
+ $curl_content = curl_exec($ch);
+ $copy = curl_copy_handle($ch);
+ curl_close($ch);
+
+ $curl_content_copy = curl_exec($copy);
+ curl_close($copy);
+
+ var_dump( $curl_content_copy );
+?>
+===DONE===
+--EXPECTF--
+*** Test curl_copy_handle() after exec() with POST ***
+string(163) "array(1) {
+ ["test"]=>
+ string(7) "getpost"
+}
+array(3) {
+ ["Hello"]=>
+ string(5) "World"
+ ["Foo"]=>
+ string(3) "Bar"
+ ["Person"]=>
+ string(8) "John Doe"
+}
+"
+===DONE===
diff --git a/ext/curl/tests/curl_copy_handle_basic_006.phpt b/ext/curl/tests/curl_copy_handle_basic_006.phpt
new file mode 100644
index 0000000..defc0f2
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_basic_006.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test curl_copy_handle() with User Agent
+--CREDITS--
+Rick Buitenman <rick@meritos.nl>
+#testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ echo '*** Testing curl copy handle with User Agent ***' . "\n";
+
+ $url = "{$host}/get.php?test=useragent";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_USERAGENT, 'cURL phpt');
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $copy = curl_copy_handle($ch);
+
+ var_dump( curl_exec($ch) );
+ var_dump( curl_exec($copy) );
+
+ curl_close($ch); // can not close original handle before curl_exec($copy) since it causes char * inputs to be invalid (see also: http://curl.haxx.se/libcurl/c/curl_easy_duphandle.html)
+ curl_close($copy);
+
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl copy handle with User Agent ***
+string(9) "cURL phpt"
+string(9) "cURL phpt"
+===DONE===
diff --git a/ext/curl/tests/curl_copy_handle_basic_007.phpt b/ext/curl/tests/curl_copy_handle_basic_007.phpt
new file mode 100644
index 0000000..aa7306c
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_basic_007.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Test curl_copy_handle() with simple POST
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ echo '*** Testing curl copy handle with simple POST using array as arguments ***' . "\n";
+
+ $url = "{$host}/get.php?test=getpost";
+ $ch = curl_init();
+
+ ob_start(); // start output buffering
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, array("Hello" => "World", "Foo" => "Bar", "Person" => "John Doe"));
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); // Disable Expect: header (lighttpd does not support it :)
+ curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+
+ $copy = curl_copy_handle($ch);
+ curl_close($ch);
+
+ $curl_content = curl_exec($copy);
+ curl_close($copy);
+
+ var_dump( $curl_content );
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl copy handle with simple POST using array as arguments ***
+string(163) "array(1) {
+ ["test"]=>
+ string(7) "getpost"
+}
+array(3) {
+ ["Hello"]=>
+ string(5) "World"
+ ["Foo"]=>
+ string(3) "Bar"
+ ["Person"]=>
+ string(8) "John Doe"
+}
+"
+===DONE===
diff --git a/ext/curl/tests/curl_copy_handle_basic_008.phpt b/ext/curl/tests/curl_copy_handle_basic_008.phpt
new file mode 100644
index 0000000..692c2df
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_basic_008.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Test curl_copy_handle() with CURLOPT_PROGRESSFUNCTION
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+ $url = "{$host}/get.php";
+ $ch = curl_init($url);
+
+ curl_setopt($ch, CURLOPT_NOPROGRESS, 0);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function() { });
+ $ch2 = curl_copy_handle($ch);
+ echo curl_exec($ch), PHP_EOL;
+ unset($ch);
+ echo curl_exec($ch2);
+
+?>
+--EXPECTF--
+Hello World!
+Hello World!
+Hello World!
+Hello World!
diff --git a/ext/curl/tests/curl_copy_handle_variation1.phpt b/ext/curl/tests/curl_copy_handle_variation1.phpt
new file mode 100644
index 0000000..da45221
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_variation1.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Test curl_copy_handle() change options in one handle
+--CREDITS--
+Francesco Fullone ff@ideato.it
+#PHPTestFest Cesena Italia on 2009-06-20
+--SKIPIF--
+<?php
+ if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+?>
+--FILE--
+<?php
+echo "*** Testing curl_copy_handle(): basic ***\n";
+
+// create a new cURL resource
+$ch = curl_init();
+
+// set URL and other appropriate options
+curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/');
+
+// copy the handle
+$ch2 = curl_copy_handle($ch);
+
+// change the CURLOPT_URL for the second handle
+curl_setopt($ch2, CURLOPT_URL, 'http://www.bar.com/');
+
+var_dump(curl_getinfo($ch) === curl_getinfo($ch2));
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_copy_handle(): basic ***
+bool(false)
+===DONE===
diff --git a/ext/curl/tests/curl_copy_handle_variation2.phpt b/ext/curl/tests/curl_copy_handle_variation2.phpt
new file mode 100644
index 0000000..924bf6a
--- /dev/null
+++ b/ext/curl/tests/curl_copy_handle_variation2.phpt
@@ -0,0 +1,44 @@
+--TEST--
+Test curl_copy_handle() add options to the handles
+--CREDITS--
+Francesco Fullone ff@ideato.it
+#PHPTestFest Cesena Italia on 2009-06-20
+--SKIPIF--
+<?php
+ if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+?>
+--COMMENT--
+the only way to test if a option is setten on a curl handle is using the curl_getinfo() function.
+but this can only check on a limited amount of options...
+--FILE--
+<?php
+echo "*** Testing curl_copy_handle(): add options after copy ***\n";
+
+// create a new cURL resource
+$ch = curl_init();
+
+// copy the handle
+$ch2 = curl_copy_handle($ch);
+var_dump(curl_getinfo($ch) === curl_getinfo($ch2));
+
+// add some CURLOPT to the second handle
+curl_setopt($ch2, CURLOPT_URL, 'http://www.example.com/');
+
+var_dump(curl_getinfo($ch) === curl_getinfo($ch2));
+
+// add same CURLOPT to the first handle
+curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/');
+var_dump(curl_getinfo($ch) === curl_getinfo($ch2));
+
+// change a CURLOPT in the second handle
+curl_setopt($ch2, CURLOPT_URL, 'http://www.bar.com/');
+var_dump(curl_getinfo($ch) === curl_getinfo($ch2));
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_copy_handle(): add options after copy ***
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/curl/tests/curl_error_basic.phpt b/ext/curl/tests/curl_error_basic.phpt
new file mode 100644
index 0000000..3d35023
--- /dev/null
+++ b/ext/curl/tests/curl_error_basic.phpt
@@ -0,0 +1,41 @@
+--TEST--
+curl_error() function - basic test for curl_error using a fake url
+--CREDITS--
+Mattijs Hoitink mattijshoitink@gmail.com
+#Testfest Utrecht 2009
+--SKIPIF--
+<?php
+
+if (!extension_loaded("curl")) die("skip\n");
+
+$url = "fakeURL";
+$ip = gethostbyname($url);
+if ($ip != $url) die("skip 'fakeURL' resolves to $ip\n");
+
+?>
+--FILE--
+<?php
+/*
+ * Prototype: string curl_error(resource $ch)
+ * Description: Returns a clear text error message for the last cURL operation.
+ * Source: ext/curl/interface.c
+ * Documentation: http://wiki.php.net/qa/temp/ext/curl
+ */
+
+// Fake URL to trigger an error
+$url = "fakeURL";
+
+echo "== Testing curl_error with a fake URL ==\n";
+
+// cURL handler
+$ch = curl_init($url);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+
+curl_exec($ch);
+var_dump(curl_error($ch));
+curl_close($ch);
+
+?>
+--EXPECTF--
+== Testing curl_error with a fake URL ==
+string(%d) "%sfakeURL%S"
diff --git a/ext/curl/tests/curl_file_deleted_before_curl_close.phpt b/ext/curl/tests/curl_file_deleted_before_curl_close.phpt
new file mode 100644
index 0000000..592f110
--- /dev/null
+++ b/ext/curl/tests/curl_file_deleted_before_curl_close.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Memory corruption error if fp of just created file is closed before curl_close.
+--CREDITS--
+Alexey Shein <confik@gmail.com>
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip"; ?>
+--FILE--
+<?php
+
+$ch = curl_init(getenv('PHP_CURL_HTTP_REMOTE_SERVER'));
+
+$temp_file = dirname(__FILE__) . '/curl_file_deleted_before_curl_close.tmp';
+if (file_exists($temp_file)) {
+ unlink($temp_file); // file should not exist before test
+}
+
+$handle = fopen($temp_file, 'w');
+
+curl_setopt($ch, CURLOPT_STDERR, $handle);
+curl_setopt($ch, CURLOPT_VERBOSE, 1);
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+
+curl_exec($ch);
+
+fclose($handle); // causes glibc memory error
+
+//unlink($temp_file); // uncomment to test segfault (file not found on iowrite.c)
+
+curl_close($ch);
+echo "Closed correctly\n";
+?>
+--CLEAN--
+<?php
+unlink(dirname(__FILE__) . '/curl_file_deleted_before_curl_close.tmp');
+?>
+--EXPECTF--
+* Closing connection #%d
+Closed correctly
diff --git a/ext/curl/tests/curl_ftp_pasv.phpt b/ext/curl/tests/curl_ftp_pasv.phpt
new file mode 100644
index 0000000..6cd7429
--- /dev/null
+++ b/ext/curl/tests/curl_ftp_pasv.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Test curl_exec() function with basic functionality
+--CREDITS--
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_FTP_REMOTE_SERVER')) exit("skip PHP_CURL_FTP_REMOTE_SERVER env variable is not defined");
+if (false === getenv('PHP_CURL_FTP_REMOTE_USER')) exit("skip PHP_CURL_FTP_REMOTE_USER env variable is not defined");
+if (false === getenv('PHP_CURL_FTP_REMOTE_PASSWD')) exit("skip PHP_CURL_FTP_REMOTE_PASSWD env variable is not defined");
+?>
+--FILE--
+<?php
+ $host = getenv('PHP_CURL_FTP_REMOTE_SERVER');
+ $username = getenv('PHP_CURL_FTP_REMOTE_USER');
+ $password = getenv('PHP_CURL_FTP_REMOTE_PASSWD');
+
+ // FTP this script to a server
+ $fp = fopen ( __FILE__ , "r" );
+ $url = "ftp://$username:$password@$host/test.phpt" ;
+
+ $ch = curl_init ();
+
+ // enable below to get the output in verbose mode.
+ // curl_setopt ( $ch , CURLOPT_VERBOSE, 1 );
+
+ /* Without enabling SKIP_PASV_IP flag, the following output will be seen..
+ < 227 Entering Passive Mode (10,5,80,146,100,199)
+ * Trying 10.5.80.146... * connected
+ * Connecting to 10.5.80.146 (10.5.80.146) port 25799
+ */
+
+ /* After enabling SKIP_PASV_IP flag, the following output will be seen..
+ < 227 Entering Passive Mode (10,5,80,146,50,229)
+ * Skips 10.5.80.146 for data connection, uses 10.5.80.146 instead
+ * Trying 10.5.80.146... * connected
+ */
+
+ curl_setopt ( $ch , CURLOPT_URL, $url );
+ curl_setopt ( $ch , CURLOPT_TRANSFERTEXT, 1 );
+
+ //force passive connection
+ curl_setopt ( $ch , CURLOPT_FTP_USE_EPSV, 0 );
+ curl_setopt ( $ch , CURLOPT_FTP_SKIP_PASV_IP, 1 );
+
+ // mark the file for upload..
+ curl_setopt ( $ch , CURLOPT_INFILE, $fp );
+ curl_setopt ( $ch , CURLOPT_INFILESIZE, filesize(__FILE__) );
+ curl_setopt ( $ch , CURLOPT_PUT, 1 );
+ curl_setopt ( $ch , CURLOPT_UPLOAD, 1 );
+
+ $result = curl_exec ( $ch );
+ var_dump ( $result );
+ curl_close ( $ch );
+
+?>
+===DONE===
+--EXPECTF--
+bool(true)
+===DONE===
diff --git a/ext/curl/tests/curl_multi_close_basic.phpt b/ext/curl/tests/curl_multi_close_basic.phpt
new file mode 100644
index 0000000..28865bc
--- /dev/null
+++ b/ext/curl/tests/curl_multi_close_basic.phpt
@@ -0,0 +1,19 @@
+--TEST--
+curl_multi_close
+--CREDITS--
+Stefan Koopmanschap <stefan@php.net>
+#testfest Utrecht 2009
+--SKIPIF--
+<?php
+if (!extension_loaded('curl')) print 'skip';
+?>
+--FILE--
+<?php
+$ch = curl_multi_init();
+curl_multi_close($ch);
+var_dump($ch);
+?>
+===DONE===
+--EXPECTF--
+resource(%d) of type (Unknown)
+===DONE===
diff --git a/ext/curl/tests/curl_multi_getcontent_basic3.phpt b/ext/curl/tests/curl_multi_getcontent_basic3.phpt
new file mode 100644
index 0000000..ac2a371
--- /dev/null
+++ b/ext/curl/tests/curl_multi_getcontent_basic3.phpt
@@ -0,0 +1,62 @@
+--TEST--
+Curl_multi_getcontent() basic test with different sources (local file/http)
+--CREDITS--
+Rein Velt (rein@velt.org)
+#TestFest Utrecht 20090509
+--SKIPIF--
+<?php
+if (!extension_loaded('curl')) print 'skip need ext/curl';
+if (false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ exit("skip PHP_CURL_HTTP_REMOTE_SERVER env variable is not defined");
+}
+?>
+--FILE--
+<?php
+ //CURL_MULTI_GETCONTENT TEST
+
+ //CREATE RESOURCES
+ $ch1=curl_init();
+ $ch2=curl_init();
+
+ //SET URL AND OTHER OPTIONS
+ $host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+ curl_setopt($ch1, CURLOPT_URL, "{$host}/get.php?test=getpost&get_param=Hello%20World");
+ curl_setopt($ch2, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata2.txt");
+ curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
+
+ //CREATE MULTIPLE CURL HANDLE
+ $mh=curl_multi_init();
+
+ //ADD THE 2 HANDLES
+ curl_multi_add_handle($mh,$ch1);
+ curl_multi_add_handle($mh,$ch2);
+
+ //EXECUTE
+ $running=0;
+ do {
+ curl_multi_exec($mh,$running);
+ } while ($running>0);
+
+ $results1=curl_multi_getcontent($ch1);
+ $results2=curl_multi_getcontent($ch2);
+
+ //CLOSE
+ curl_multi_remove_handle($mh,$ch1);
+ curl_multi_remove_handle($mh,$ch2);
+ curl_multi_close($mh);
+
+ echo $results1;
+ echo $results2;
+
+?>
+--EXPECTF--
+array(2) {
+ ["test"]=>
+ string(7) "getpost"
+ ["get_param"]=>
+ string(11) "Hello World"
+}
+array(0) {
+}
+CURL2
diff --git a/ext/curl/tests/curl_multi_getcontent_error1.phpt b/ext/curl/tests/curl_multi_getcontent_error1.phpt
new file mode 100644
index 0000000..2fb11b3
--- /dev/null
+++ b/ext/curl/tests/curl_multi_getcontent_error1.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Curl_multi_getcontent() error test
+--CREDITS--
+Rein Velt (rein@velt.org)
+#TestFest Utrecht 20090509
+--SKIPIF--
+<?php
+if (!extension_loaded('curl')) print 'skip';
+?>
+--FILE--
+<?php
+ //CURL_MULTI_GETCONTENT TEST
+
+ //CREATE RESOURCES
+ $ch1=curl_init();
+ $ch2=curl_init();
+
+ //SET URL AND OTHER OPTIONS
+ curl_setopt($ch1, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata1.txt");
+ curl_setopt($ch2, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata2.txt");
+ curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
+
+ //CREATE MULTIPLE CURL HANDLE
+ $mh=curl_multi_init();
+
+ //ADD THE 2 HANDLES
+ curl_multi_add_handle($mh,$ch1);
+ curl_multi_add_handle($mh,$ch2);
+
+ //EXECUTE
+ $running=0;
+ do {
+ curl_multi_exec($mh,$running);
+ } while ($running>0);
+
+ $results1=curl_multi_getcontent(); //no parameter
+ $results2=curl_multi_getcontent($ch2);
+
+ //CLOSE
+ curl_multi_remove_handle($mh,$ch1);
+ curl_multi_remove_handle($mh,$ch2);
+ curl_multi_close($mh);
+
+ echo $results1;
+ echo $results2;
+
+?>
+--EXPECTF--
+Warning: curl_multi_getcontent() expects exactly 1 parameter, 0 given in %s on line %d
+CURL2
diff --git a/ext/curl/tests/curl_multi_getcontent_error2.phpt b/ext/curl/tests/curl_multi_getcontent_error2.phpt
new file mode 100644
index 0000000..0145d6a
--- /dev/null
+++ b/ext/curl/tests/curl_multi_getcontent_error2.phpt
@@ -0,0 +1,51 @@
+--TEST--
+Curl_multi_getcontent() error test
+--CREDITS--
+Rein Velt (rein@velt.org)
+#TestFest Utrecht 20090509
+--SKIPIF--
+<?php
+if (!extension_loaded('curl')) print 'skip';
+?>
+--FILE--
+<?php
+ //CURL_MULTI_GETCONTENT TEST
+
+ //CREATE RESOURCES
+ $ch1=curl_init();
+ $ch2=curl_init();
+
+ //SET URL AND OTHER OPTIONS
+ curl_setopt($ch1, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata1.txt");
+ curl_setopt($ch2, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata2.txt");
+ curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
+
+ //CREATE MULTIPLE CURL HANDLE
+ $mh=curl_multi_init();
+
+ //ADD THE 2 HANDLES
+ curl_multi_add_handle($mh,$ch1);
+ curl_multi_add_handle($mh,$ch2);
+
+ //EXECUTE
+ $running=0;
+ do {
+ curl_multi_exec($mh,$running);
+ } while ($running>0);
+
+ $results1=curl_multi_getcontent($ch1,$ch2); //no parameter
+ $results2=curl_multi_getcontent($ch2);
+
+ //CLOSE
+ curl_multi_remove_handle($mh,$ch1);
+ curl_multi_remove_handle($mh,$ch2);
+ curl_multi_close($mh);
+
+ echo $results1;
+ echo $results2;
+
+?>
+--EXPECTF--
+Warning: curl_multi_getcontent() expects exactly 1 parameter, 2 given in %s on line %d
+CURL2
diff --git a/ext/curl/tests/curl_multi_getcontent_error3.phpt b/ext/curl/tests/curl_multi_getcontent_error3.phpt
new file mode 100644
index 0000000..2ad1480
--- /dev/null
+++ b/ext/curl/tests/curl_multi_getcontent_error3.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Curl_multi_getcontent() error test
+--CREDITS--
+Rein Velt (rein@velt.org)
+#TestFest Utrecht 20090509
+--SKIPIF--
+<?php
+if (!extension_loaded('curl')) print 'skip';
+?>
+--FILE--
+<?php
+ //CURL_MULTI_GETCONTENT TEST
+
+ //CREATE RESOURCES
+ $ch1=curl_init();
+ $ch2=curl_init();
+
+ //SET URL AND OTHER OPTIONS
+ curl_setopt($ch1, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata1.txt");
+ curl_setopt($ch2, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata2.txt");
+ curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
+
+ //CREATE MULTIPLE CURL HANDLE
+ $mh=curl_multi_init();
+
+ //ADD THE 2 HANDLES
+ curl_multi_add_handle($mh,$ch1);
+ curl_multi_add_handle($mh,$ch2);
+
+ //EXECUTE
+ $running=0;
+ do {
+ curl_multi_exec($mh,$running);
+ } while ($running>0);
+
+ $ch1="string";
+
+ $results1=curl_multi_getcontent($ch1); //incorrect parameter type
+ $results2=curl_multi_getcontent($ch2);
+
+ //CLOSE
+ //curl_multi_remove_handle($mh,$ch1);
+ curl_multi_remove_handle($mh,$ch2);
+ curl_multi_close($mh);
+
+ echo $results1;
+ echo $results2;
+
+?>
+--EXPECTF--
+Warning: curl_multi_getcontent() expects parameter 1 to be resource, %unicode_string_optional% given in %s on line %d
+CURL2
diff --git a/ext/curl/tests/curl_multi_getcontent_error4.phpt b/ext/curl/tests/curl_multi_getcontent_error4.phpt
new file mode 100644
index 0000000..68bda37
--- /dev/null
+++ b/ext/curl/tests/curl_multi_getcontent_error4.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Curl_multi_getcontent() error test with undefined handle
+--CREDITS--
+Rein Velt (rein@velt.org)
+#TestFest Utrecht 20090509
+--SKIPIF--
+<?php
+if (!extension_loaded('curl')) print 'skip';
+?>
+--FILE--
+<?php
+ //CURL_MULTI_GETCONTENT TEST
+
+ //CREATE RESOURCES
+ //$ch1=undefined;
+ $ch2=curl_init();
+
+ //SET URL AND OTHER OPTIONS
+ curl_setopt($ch1, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata1.txt");
+ curl_setopt($ch2, CURLOPT_URL, "file://".dirname(__FILE__). DIRECTORY_SEPARATOR . "curl_testdata2.txt");
+ curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
+
+ //CREATE MULTIPLE CURL HANDLE
+ $mh=curl_multi_init();
+
+ //ADD THE 2 HANDLES
+ curl_multi_add_handle($mh,$ch1);
+ curl_multi_add_handle($mh,$ch2);
+
+ //EXECUTE
+ $running=0;
+ do {
+ curl_multi_exec($mh,$running);
+ } while ($running>0);
+
+
+ $results1=curl_multi_getcontent($ch1); //incorrect parameter type
+ $results2=curl_multi_getcontent($ch2);
+
+ //CLOSE
+ //curl_multi_remove_handle($mh,$ch1);
+ curl_multi_remove_handle($mh,$ch2);
+ curl_multi_close($mh);
+
+ echo $results1;
+ echo $results2;
+
+?>
+--EXPECTF--
+Notice: Undefined variable: ch1 in %s on line %d
+
+Warning: curl_setopt() expects parameter 1 to be resource, null given in %s on line %d
+
+Notice: Undefined variable: ch1 in %s on line %d
+
+Warning: curl_setopt() expects parameter 1 to be resource, null given in %s on line %d
+
+Notice: Undefined variable: ch1 in %s on line %d
+
+Warning: curl_multi_add_handle() expects parameter 2 to be resource, null given in %s on line %d
+
+Notice: Undefined variable: ch1 in %s on line %d
+
+Warning: curl_multi_getcontent() expects parameter 1 to be resource, null given in %s on line %d
+CURL2
diff --git a/ext/curl/tests/curl_multi_init_basic.phpt b/ext/curl/tests/curl_multi_init_basic.phpt
new file mode 100644
index 0000000..0fd865d
--- /dev/null
+++ b/ext/curl/tests/curl_multi_init_basic.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test curl_multi_init()
+--CREDITS--
+Mark van der Velden
+#testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype : resource curl_multi_init(void)
+ * Description : Returns a new cURL multi handle
+ * Source code : ext/curl/multi.c
+ * Test documentation: http://wiki.php.net/qa/temp/ext/curl
+ */
+
+// start testing
+echo "*** Testing curl_multi_init(void); ***\n";
+
+//create the multiple cURL handle
+$mh = curl_multi_init();
+var_dump($mh);
+
+curl_multi_close($mh);
+var_dump($mh);
+?>
+===DONE===
+--EXPECTF--
+*** Testing curl_multi_init(void); ***
+resource(%d) of type (curl_multi)
+resource(%d) of type (Unknown)
+===DONE===
diff --git a/ext/curl/tests/curl_multi_segfault.phpt b/ext/curl/tests/curl_multi_segfault.phpt
new file mode 100644
index 0000000..dde8189
--- /dev/null
+++ b/ext/curl/tests/curl_multi_segfault.phpt
@@ -0,0 +1,56 @@
+--TEST--
+Segfault due to libcurl connection caching
+--CREDITS--
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) exit("skip curl extension not loaded");
+if (false === getenv('PHP_CURL_FTP_REMOTE_SERVER')) exit("skip PHP_CURL_FTP_REMOTE_SERVER env variable is not defined");
+if (false === getenv('PHP_CURL_FTP_REMOTE_USER')) exit("skip PHP_CURL_FTP_REMOTE_USER env variable is not defined");
+if (false === getenv('PHP_CURL_FTP_REMOTE_PASSWD')) exit("skip PHP_CURL_FTP_REMOTE_PASSWD env variable is not defined");
+?>
+--FILE--
+<?php
+ $host = getenv('PHP_CURL_FTP_REMOTE_SERVER');
+ $username = getenv('PHP_CURL_FTP_REMOTE_USER');
+ $password = getenv('PHP_CURL_FTP_REMOTE_PASSWD');
+
+ // FTP this script to a server
+ $fp = fopen ( __FILE__ , "r" );
+ $url = "ftp://$username:$password@$host/" ;
+
+ $ch = curl_init ();
+
+ curl_setopt ( $ch , CURLOPT_URL, $url );
+ curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1 );
+
+ //force passive connection
+ curl_setopt ( $ch , CURLOPT_FTP_USE_EPSV, 0 );
+ curl_setopt ( $ch , CURLOPT_FTP_SKIP_PASV_IP, 1 );
+
+ $cmh = curl_multi_init();
+ curl_multi_add_handle($cmh, $ch);
+
+ $active = null;
+
+ do {
+ $mrc = curl_multi_exec($cmh, $active);
+ } while ($mrc == CURLM_CALL_MULTI_PERFORM);
+
+
+ while ($active && $mrc == CURLM_OK) {
+ if (curl_multi_select($cmh) != -1) {
+ do {
+ $mrc = curl_multi_exec($cmh, $active);
+ } while ($mrc == CURLM_CALL_MULTI_PERFORM);
+ }
+ }
+
+ var_dump(is_string(curl_multi_getcontent($ch)));
+ curl_multi_remove_handle($cmh, $ch);
+ curl_close($ch);
+ curl_multi_close($cmh);
+?>
+===DONE===
+--EXPECTF--
+bool(true)
+===DONE===
diff --git a/ext/curl/tests/curl_multi_select_basic1.phpt b/ext/curl/tests/curl_multi_select_basic1.phpt
new file mode 100644
index 0000000..7ae8124
--- /dev/null
+++ b/ext/curl/tests/curl_multi_select_basic1.phpt
@@ -0,0 +1,27 @@
+--TEST--
+Test curl_multi_select()
+--CREDITS--
+Ivo Jansch <ivo@ibuildings.com>
+#testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+/* Prototype : resource curl_multi_select($mh, $timeout=1.0])
+ * Description : Get all the sockets associated with the cURL extension, which can then be
+ * "selected"
+ * Source code : ?
+ * Test documentation: http://wiki.php.net/qa/temp/ext/curl
+ */
+
+
+//create the multiple cURL handle
+$mh = curl_multi_init();
+echo curl_multi_select($mh)."\n";
+
+curl_multi_close($mh);
+?>
+===DONE===
+--EXPECTF--
+%r(0|-1)%r
+===DONE===
diff --git a/ext/curl/tests/curl_setopt_CURLOPT_FOLLOWLOCATION_open_basedir.phpt b/ext/curl/tests/curl_setopt_CURLOPT_FOLLOWLOCATION_open_basedir.phpt
new file mode 100644
index 0000000..7a778f3
--- /dev/null
+++ b/ext/curl/tests/curl_setopt_CURLOPT_FOLLOWLOCATION_open_basedir.phpt
@@ -0,0 +1,22 @@
+--TEST--
+CURLOPT_FOLLOWLOCATION case check open_basedir
+--CREDITS--
+WHITE new media architects - Dennis
+--INI--
+open_basedir = DIRECTORY_SEPARATOR."tmp";
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) print "skip cURL not loaded";
+?>
+--FILE--
+<?php
+print (ini_get("OPEN_BASEDIR"));
+$ch = curl_init();
+$succes = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
+curl_close($ch);
+var_dump($succes);
+?>
+--EXPECTF--
+Warning: curl_setopt(): CURLOPT_FOLLOWLOCATION cannot be activated when an open_basedir is set in %s.php on line %d
+bool(false)
+
diff --git a/ext/curl/tests/curl_setopt_CURLOPT_READFUNCTION.phpt b/ext/curl/tests/curl_setopt_CURLOPT_READFUNCTION.phpt
new file mode 100644
index 0000000..9de2c0f
--- /dev/null
+++ b/ext/curl/tests/curl_setopt_CURLOPT_READFUNCTION.phpt
@@ -0,0 +1,54 @@
+--TEST--
+cURL option CURLOPT_READFUNCTION
+--CREDITS--
+WHITE new media architects - Jeroen Vermeulen
+#testfest Utrecht 2009
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) print "skip cURL extension not loaded";
+?>
+--FILE--
+<?php
+function custom_readfunction($oCurl, $hReadHandle, $iMaxOut)
+{
+ $sData = fread($hReadHandle,$iMaxOut-10); # -10 to have space to add "custom:"
+ if (!empty($sData))
+ {
+ $sData = "custom:".$sData;
+ }
+ return $sData;
+}
+
+$sFileBase = dirname(__FILE__).DIRECTORY_SEPARATOR.'curl_opt_CURLOPT_READFUNCTION';
+$sReadFile = $sFileBase.'_in.tmp';
+$sWriteFile = $sFileBase.'_out.tmp';
+$sWriteUrl = 'file://'.$sWriteFile;
+
+file_put_contents($sReadFile,'contents of tempfile');
+$hReadHandle = fopen($sReadFile, 'r');
+
+$oCurl = curl_init();
+curl_setopt($oCurl, CURLOPT_URL, $sWriteUrl);
+curl_setopt($oCurl, CURLOPT_UPLOAD, 1);
+curl_setopt($oCurl, CURLOPT_READFUNCTION, "custom_readfunction" );
+curl_setopt($oCurl, CURLOPT_INFILE, $hReadHandle );
+curl_exec($oCurl);
+curl_close($oCurl);
+
+fclose ($hReadHandle);
+
+$sOutput = file_get_contents($sWriteFile);
+var_dump($sOutput);
+?>
+===DONE===
+--CLEAN--
+<?php
+$sFileBase = dirname(__FILE__).DIRECTORY_SEPARATOR.'curl_opt_CURLOPT_READFUNCTION';
+$sReadFile = $sFileBase.'_in.tmp';
+$sWriteFile = $sFileBase.'_out.tmp';
+unlink($sReadFile);
+unlink($sWriteFile);
+?>
+--EXPECT--
+string(27) "custom:contents of tempfile"
+===DONE===
diff --git a/ext/curl/tests/curl_setopt_array_basic.phpt b/ext/curl/tests/curl_setopt_array_basic.phpt
new file mode 100644
index 0000000..427de7f
--- /dev/null
+++ b/ext/curl/tests/curl_setopt_array_basic.phpt
@@ -0,0 +1,56 @@
+--TEST--
+curl_setopt_array() function - tests setting multiple cURL options with curl_setopt_array()
+--CREDITS--
+Mattijs Hoitink mattijshoitink@gmail.com
+#Testfest Utrecht 2009
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+/*
+ * Prototype: bool curl_setopt_array(resource $ch, array $options)
+ * Description: Sets multiple options for a cURL session.
+ * Source: ext/curl/interface.c
+ * Documentation: http://wiki.php.net/qa/temp/ext/curl
+ */
+
+// Figure out what handler to use
+$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+if (!empty($host)) {
+ // Use the set Environment variable
+ $url = "{$host}/get.php?test=get";
+} else {
+ // Create a temporary file for the test
+ $tempname = tempnam(sys_get_temp_dir(), 'CURL_HANDLE');
+ $url = 'file://'. $tempname;
+ // add the test data to the file
+ file_put_contents($tempname, "Hello World!\nHello World!");
+}
+
+// Start the test
+echo '== Starting test curl_setopt_array($ch, $options); ==' . "\n";
+
+// curl handler
+$ch = curl_init();
+
+// options for the curl handler
+$options = array (
+ CURLOPT_URL => $url,
+ CURLOPT_RETURNTRANSFER => 1
+);
+
+ob_start(); // start output buffering
+
+curl_setopt_array($ch, $options);
+$returnContent = curl_exec($ch);
+curl_close($ch);
+
+var_dump($returnContent);
+isset($tempname) and is_file($tempname) and @unlink($tempname);
+
+?>
+--EXPECT--
+== Starting test curl_setopt_array($ch, $options); ==
+string(25) "Hello World!
+Hello World!"
+
diff --git a/ext/curl/tests/curl_setopt_basic002.phpt b/ext/curl/tests/curl_setopt_basic002.phpt
new file mode 100644
index 0000000..d90ecb7
--- /dev/null
+++ b/ext/curl/tests/curl_setopt_basic002.phpt
@@ -0,0 +1,52 @@
+--TEST--
+curl_setopt basic tests with CURLOPT_STDERR.
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+
+$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+// start testing
+echo "*** Testing curl_setopt with CURLOPT_STDERR\n";
+
+$temp_file = tempnam(sys_get_temp_dir(), 'CURL_STDERR');
+
+$handle = fopen($temp_file, 'w');
+
+$url = "{$host}/";
+$ch = curl_init();
+
+curl_setopt($ch, CURLOPT_VERBOSE, 1);
+curl_setopt($ch, CURLOPT_STDERR, $handle);
+$curl_content = curl_exec($ch);
+
+fclose($handle);
+unset($handle);
+var_dump(preg_replace('/[\r\n]/', ' ', file_get_contents($temp_file)));
+@unlink($temp_file);
+
+ob_start(); // start output buffering
+$handle = fopen($temp_file, 'w');
+curl_setopt($ch, CURLOPT_URL, $url); //set the url we want to use
+curl_setopt($ch, CURLOPT_STDERR, $handle);
+$data = curl_exec($ch);
+ob_end_clean();
+
+fclose($handle);
+unset($handle);
+var_dump(preg_replace('/[\r\n]/', ' ', file_get_contents($temp_file)));
+@unlink($temp_file);
+
+curl_close($ch);
+
+?>
+--EXPECTF--
+*** Testing curl_setopt with CURLOPT_STDERR
+string(%d) "%S"
+string(%d) "%S"
+* Closing connection #%d
+
diff --git a/ext/curl/tests/curl_setopt_basic003.phpt b/ext/curl/tests/curl_setopt_basic003.phpt
new file mode 100644
index 0000000..7849140
--- /dev/null
+++ b/ext/curl/tests/curl_setopt_basic003.phpt
@@ -0,0 +1,43 @@
+--TEST--
+curl_setopt() call with CURLOPT_HTTPHEADER
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+
+$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+// start testing
+echo "*** curl_setopt() call with CURLOPT_HTTPHEADER\n";
+
+$url = "{$host}/";
+$ch = curl_init();
+
+curl_setopt($ch, CURLOPT_HTTPHEADER, 1);
+
+$curl_content = curl_exec($ch);
+curl_close($ch);
+
+var_dump( $curl_content );
+
+$ch = curl_init();
+
+ob_start(); // start output buffering
+curl_setopt($ch, CURLOPT_HTTPHEADER, array());
+curl_setopt($ch, CURLOPT_URL, $host);
+
+$curl_content = curl_exec($ch);
+ob_end_clean();
+curl_close($ch);
+
+var_dump( $curl_content );
+?>
+--EXPECTF--
+*** curl_setopt() call with CURLOPT_HTTPHEADER
+
+Warning: curl_setopt(): You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments in %s on line %d
+bool(false)
+bool(true)
diff --git a/ext/curl/tests/curl_setopt_basic004.phpt b/ext/curl/tests/curl_setopt_basic004.phpt
new file mode 100644
index 0000000..97b4115
--- /dev/null
+++ b/ext/curl/tests/curl_setopt_basic004.phpt
@@ -0,0 +1,44 @@
+--TEST--
+curl_setopt() call with CURLOPT_RETURNTRANSFER
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php if (!extension_loaded("curl") || false === getenv('PHP_CURL_HTTP_REMOTE_SERVER')) print "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable"; ?>
+--FILE--
+<?php
+
+$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+// start testing
+echo "*** curl_setopt() call with CURLOPT_RETURNTRANSFER set to 1\n";
+
+$url = "{$host}/";
+$ch = curl_init();
+
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+curl_setopt($ch, CURLOPT_URL, $url);
+
+$curl_content = curl_exec($ch);
+curl_close($ch);
+
+var_dump( $curl_content );
+
+echo "*** curl_setopt() call with CURLOPT_RETURNTRANSFER set to 0\n";
+
+$ch = curl_init();
+
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
+curl_setopt($ch, CURLOPT_URL, $url);
+ob_start();
+$curl_content = curl_exec($ch);
+ob_end_clean();
+curl_close($ch);
+
+var_dump( $curl_content );
+?>
+--EXPECTF--
+*** curl_setopt() call with CURLOPT_RETURNTRANSFER set to 1
+string(%d) "%a"
+*** curl_setopt() call with CURLOPT_RETURNTRANSFER set to 0
+bool(true)
diff --git a/ext/curl/tests/curl_setopt_error.phpt b/ext/curl/tests/curl_setopt_error.phpt
new file mode 100644
index 0000000..ad73318
--- /dev/null
+++ b/ext/curl/tests/curl_setopt_error.phpt
@@ -0,0 +1,45 @@
+--TEST--
+curl_setopt() basic parameter test
+--CREDITS--
+Paul Sohier
+#phptestfest utrecht
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+echo "*** curl_setopt() call with incorrect parameters\n";
+$ch = curl_init();
+curl_setopt();
+curl_setopt(false);
+
+curl_setopt($ch);
+curl_setopt($ch, false);
+curl_setopt($ch, -1);
+curl_setopt($ch, '');
+curl_setopt($ch, 1, false);
+
+curl_setopt(false, false, false);
+curl_setopt($ch, '', false);
+curl_setopt($ch, 1, '');
+curl_setopt($ch, -1, 0);
+?>
+--EXPECTF--
+*** curl_setopt() call with incorrect parameters
+
+Warning: curl_setopt() expects exactly 3 parameters, 0 given in %s on line %d
+
+Warning: curl_setopt() expects exactly 3 parameters, 1 given in %s on line %d
+
+Warning: curl_setopt() expects exactly 3 parameters, 1 given in %s on line %d
+
+Warning: curl_setopt() expects exactly 3 parameters, 2 given in %s on line %d
+
+Warning: curl_setopt() expects exactly 3 parameters, 2 given in %s on line %d
+
+Warning: curl_setopt() expects exactly 3 parameters, 2 given in %s on line %d
+
+Warning: curl_setopt() expects parameter 1 to be resource, boolean given in %s on line %d
+
+Warning: curl_setopt() expects parameter 2 to be long, %unicode_string_optional% given in %s on line %d
+
+Warning: curl_setopt(): Invalid curl configuration option in %scurl_setopt_error.php on line %d
diff --git a/ext/curl/tests/curl_testdata1.txt b/ext/curl/tests/curl_testdata1.txt
new file mode 100644
index 0000000..dc1e446
--- /dev/null
+++ b/ext/curl/tests/curl_testdata1.txt
@@ -0,0 +1 @@
+CURL1
diff --git a/ext/curl/tests/curl_testdata2.txt b/ext/curl/tests/curl_testdata2.txt
new file mode 100644
index 0000000..3b9f76f
--- /dev/null
+++ b/ext/curl/tests/curl_testdata2.txt
@@ -0,0 +1 @@
+CURL2
diff --git a/ext/curl/tests/curl_version_error.phpt b/ext/curl/tests/curl_version_error.phpt
new file mode 100644
index 0000000..fb4793a
--- /dev/null
+++ b/ext/curl/tests/curl_version_error.phpt
@@ -0,0 +1,35 @@
+--TEST--
+Test curl_version() function : error conditions
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ die('skip - curl extension not available in this build');
+}
+if (!getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ echo "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable";
+}
+?>
+--FILE--
+<?php
+
+/* Prototype : array curl_version ([ int $age ] )
+ * Description: Returns information about the cURL version.
+ * Source code: ext/curl/interface.c
+*/
+
+echo "*** Testing curl_version() : error conditions ***\n";
+
+echo "\n-- Testing curl_version() function with more than expected no. of arguments --\n";
+$extra_arg = 10;
+var_dump( curl_version(1, $extra_arg) );
+
+?>
+===Done===
+--EXPECTF--
+*** Testing curl_version() : error conditions ***
+
+-- Testing curl_version() function with more than expected no. of arguments --
+
+Warning: curl_version() expects at most 1 parameter, 2 given in %s on line %d
+NULL
+===Done===
diff --git a/ext/curl/tests/curl_version_variation1.phpt b/ext/curl/tests/curl_version_variation1.phpt
new file mode 100644
index 0000000..cd912c4
--- /dev/null
+++ b/ext/curl/tests/curl_version_variation1.phpt
@@ -0,0 +1,165 @@
+--TEST--
+Test curl_version() function : usage variations - test values for $ascii argument
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ echo "skip - curl extension not available in this build";
+}
+if (!getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ echo "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable";
+}
+?>
+--FILE--
+<?php
+
+/* Prototype : array curl_version ([ int $age ] )
+ * Description: Returns information about the cURL version.
+ * Source code: ext/curl/interface.c
+*/
+
+echo "*** Testing curl_version() function: with unexpected inputs for 'age' argument ***\n";
+
+//get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+//defining a class
+class sample {
+ public function __toString() {
+ return "sample object";
+ }
+}
+
+//getting the resource
+$file_handle = fopen(__FILE__, "r");
+
+// array with different values for $input
+$inputs = array (
+
+ // integer values
+ 0,
+ 1,
+ 255,
+ 256,
+ PHP_INT_MAX,
+ -PHP_INT_MAX,
+
+ // float values
+ 10.5,
+ -20.5,
+ 10.1234567e10,
+
+ // array values
+ array(),
+ array(0),
+ array(1, 2),
+
+ //string values
+ "ABC",
+ 'abc',
+ "2abc",
+
+ // boolean values
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // null values
+ NULL,
+ null,
+
+ // objects
+ new sample(),
+
+ // resource
+ $file_handle,
+
+ // undefined variable
+ @$undefined_var,
+
+ // unset variable
+ @$unset_var
+);
+
+// loop through with each element of the $inputs array to test curl_version() function
+$count = 1;
+foreach($inputs as $input) {
+ echo "-- Iteration $count --\n";
+ var_dump( is_array(curl_version($input)) );
+ $count ++;
+}
+
+fclose($file_handle); //closing the file handle
+
+?>
+===Done===
+--EXPECTF--
+*** Testing curl_version() function: with unexpected inputs for 'age' argument ***
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+-- Iteration 5 --
+bool(true)
+-- Iteration 6 --
+bool(true)
+-- Iteration 7 --
+bool(true)
+-- Iteration 8 --
+bool(true)
+-- Iteration 9 --
+bool(true)
+-- Iteration 10 --
+
+Warning: curl_version() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+-- Iteration 11 --
+
+Warning: curl_version() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+-- Iteration 12 --
+
+Warning: curl_version() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+-- Iteration 13 --
+
+Warning: curl_version() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+-- Iteration 14 --
+
+Warning: curl_version() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+-- Iteration 15 --
+
+Notice: A non well formed numeric value encountered in %s on line %d
+bool(true)
+-- Iteration 16 --
+bool(true)
+-- Iteration 17 --
+bool(true)
+-- Iteration 18 --
+bool(true)
+-- Iteration 19 --
+bool(true)
+-- Iteration 20 --
+bool(true)
+-- Iteration 21 --
+bool(true)
+-- Iteration 22 --
+
+Warning: curl_version() expects parameter 1 to be long, object given in %s on line %d
+bool(false)
+-- Iteration 23 --
+
+Warning: curl_version() expects parameter 1 to be long, resource given in %s on line %d
+bool(false)
+-- Iteration 24 --
+bool(true)
+-- Iteration 25 --
+bool(true)
+===Done===
diff --git a/ext/curl/tests/curl_write_callback.phpt b/ext/curl/tests/curl_write_callback.phpt
new file mode 100644
index 0000000..c0b733e
--- /dev/null
+++ b/ext/curl/tests/curl_write_callback.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Test curl option CURLOPT_WRITEFUNCTION
+--CREDITS--
+Mathieu Kooiman <mathieuk@gmail.com>
+Dutch UG, TestFest 2009, Utrecht
+--DESCRIPTION--
+Writes the value 'test' to a temporary file. Use curl to access this file, passing the output into a callback. Tests the PHP_CURL_USER case in curl_write.
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+function curl_callback($curl_handle, $received_data)
+{
+ echo $received_data;
+ return strlen($received_data);
+}
+
+$log_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
+
+$fp = fopen($log_file, 'w+');
+fwrite($fp, "test");
+fclose($fp);
+
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'curl_callback');
+curl_setopt($ch, CURLOPT_URL, 'file://' . $log_file);
+curl_exec($ch);
+curl_close($ch);
+
+// cleanup
+unlink($log_file);
+
+?>
+--EXPECT--
+test
diff --git a/ext/curl/tests/curl_write_file.phpt b/ext/curl/tests/curl_write_file.phpt
new file mode 100644
index 0000000..95d2b0e
--- /dev/null
+++ b/ext/curl/tests/curl_write_file.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Test curl option CURLOPT_FILE
+--CREDITS--
+Mathieu Kooiman <mathieuk@gmail.com>
+Dutch UG, TestFest 2009, Utrecht
+--DESCRIPTION--
+Writes the value 'test' to a temporary file. Use curl to access this file and store the output in another temporary file. Tests the PHP_CURL_FILE case in curl_write().
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+$test_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
+$log_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
+
+$fp = fopen($log_file, 'w+');
+fwrite($fp, "test");
+fclose($fp);
+
+$testfile_fp = fopen($test_file, 'w+');
+
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_FILE, $testfile_fp);
+curl_setopt($ch, CURLOPT_URL, 'file://' . $log_file);
+curl_exec($ch);
+curl_close($ch);
+
+fclose($testfile_fp);
+
+echo file_get_contents($test_file);
+
+// cleanup
+unlink($test_file);
+unlink($log_file);
+
+?>
+--EXPECT--
+test
diff --git a/ext/curl/tests/curl_write_return.phpt b/ext/curl/tests/curl_write_return.phpt
new file mode 100644
index 0000000..1ddc551
--- /dev/null
+++ b/ext/curl/tests/curl_write_return.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Test curl option CURLOPT_RETURNTRANSFER
+--CREDITS--
+Mathieu Kooiman <mathieuk@gmail.com>
+Dutch UG, TestFest 2009, Utrecht
+--DESCRIPTION--
+Writes the value 'test' to a temporary file. Use curl to access this file and have it return the content from curl_exec(). Tests the PHP_CURL_RETURN case
+of curl_write().
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+$log_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
+
+$fp = fopen($log_file, 'w+');
+fwrite($fp, "test");
+fclose($fp);
+
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+curl_setopt($ch, CURLOPT_URL, 'file://' . $log_file);
+$result = curl_exec($ch);
+curl_close($ch);
+
+echo $result;
+
+// cleanup
+unlink($log_file);
+
+?>
+--EXPECT--
+test
diff --git a/ext/curl/tests/curl_write_stdout.phpt b/ext/curl/tests/curl_write_stdout.phpt
new file mode 100644
index 0000000..893b27e
--- /dev/null
+++ b/ext/curl/tests/curl_write_stdout.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Test curl option CURLOPT_FILE with STDOUT handle
+--CREDITS--
+Mathieu Kooiman <mathieuk@gmail.com>
+Dutch UG, TestFest 2009, Utrecht
+--DESCRIPTION--
+Writes the value 'test' to a temporary file. Use curl to access this file and store the output in another temporary file. Tests the PHP_CURL_FILE case in curl_write().
+--SKIPIF--
+<?php if (!extension_loaded("curl")) print "skip"; ?>
+--FILE--
+<?php
+
+$log_file = tempnam(sys_get_temp_dir(), 'php-curl-test');
+
+$fp = fopen($log_file, 'w+');
+fwrite($fp, "test");
+fclose($fp);
+
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_FILE, STDOUT);
+curl_setopt($ch, CURLOPT_URL, 'file://' . $log_file);
+curl_exec($ch);
+curl_close($ch);
+
+// cleanup
+unlink($log_file);
+
+?>
+--EXPECT--
+test
diff --git a/ext/curl/tests/curl_writeheader_callback.phpt b/ext/curl/tests/curl_writeheader_callback.phpt
new file mode 100644
index 0000000..fa27363
--- /dev/null
+++ b/ext/curl/tests/curl_writeheader_callback.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Test curl option CURLOPT_HEADERFUNCTION
+--CREDITS--
+Mathieu Kooiman <mathieuk@gmail.com>
+Dutch UG, TestFest 2009, Utrecht
+--DESCRIPTION--
+Hit the host identified by PHP_CURL_HTTP_REMOTE_SERVER and determine that the headers are sent to the callback specified for CURLOPT_HEADERFUNCTION. Different test servers specified for PHP_CURL_HTTP_REMOTE_SERVER might return different sets of headers. Just test for HTTP/1.1 200 OK.
+--SKIPIF--
+<?php
+if (!extension_loaded("curl")) {
+ echo "skip - curl extension not available in this build";
+}
+if (!getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
+ echo "skip need PHP_CURL_HTTP_REMOTE_SERVER environment variable";
+}
+?>
+--FILE--
+<?php
+
+function curl_header_callback($curl_handle, $data)
+{
+ if (strtolower(substr($data,0, 4)) == 'http')
+ echo $data;
+}
+
+$host = getenv('PHP_CURL_HTTP_REMOTE_SERVER');
+
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'curl_header_callback');
+curl_setopt($ch, CURLOPT_URL, $host);
+curl_exec($ch);
+curl_close($ch);
+
+?>
+--EXPECTF--
+HTTP/1.1 %d %s
diff --git a/ext/curl/tests/responder/get.php b/ext/curl/tests/responder/get.php
new file mode 100644
index 0000000..9e13d6a
--- /dev/null
+++ b/ext/curl/tests/responder/get.php
@@ -0,0 +1,39 @@
+<?php
+ $test = isset($_GET['test']) ? $_GET['test'] : null;
+ switch($test) {
+ case 'post':
+ var_dump($_POST);
+ break;
+ case 'getpost':
+ var_dump($_GET);
+ var_dump($_POST);
+ break;
+ case 'referer':
+ echo $_SERVER['HTTP_REFERER'];
+ break;
+ case 'useragent':
+ echo $_SERVER['HTTP_USER_AGENT'];
+ break;
+ case 'httpversion':
+ echo $_SERVER['SERVER_PROTOCOL'];
+ break;
+ case 'cookie':
+ echo $_COOKIE['foo'];
+ break;
+ case 'encoding':
+ echo $_SERVER['HTTP_ACCEPT_ENCODING'];
+ break;
+ case 'contenttype':
+ header('Content-Type: text/plain;charset=utf-8');
+ break;
+ case 'file':
+ if (isset($_FILES['file'])) {
+ echo $_FILES['file']['name'] . '|' . $_FILES['file']['type'];
+ }
+ break;
+ default:
+ echo "Hello World!\n";
+ echo "Hello World!";
+ break;
+ }
+?>