8000 Add trampoline tests · php/php-src@724a2d9 · GitHub
[go: up one dir, main page]

Skip to content

Commit 724a2d9

Browse files
committed
Add trampoline tests
1 parent 281231c commit 724a2d9

10 files changed

+324
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
--TEST--
2+
Test trampoline for curl option CURLOPT_FNMATCH_FUNCTION
3+
--EXTENSIONS--
4+
curl
5+
--SKIPIF--
6+
<?php
7+
exit("skip: cannot properly test CURLOPT_FNMATCH_FUNCTION");
8+
?>
9+
--FILE--
10+
<?php
11+
include 'server.inc';
12+
$host = curl_cli_server_start();
13+
14+
class TrampolineTest {
15+
public function __call(string $name, array $arguments) {
16+
echo 'Trampoline for ', $name, PHP_EOL;
17+
return CURL_FNMATCHFUNC_NOMATCH;
18+
}
19+
}
20+
$o = new TrampolineTest();
21+
$callback = [$o, 'trampoline'];
22+
23+
$url = "ftp://{$host}/file*";
24+
//$url = "ftp://ftp.example.com/file*";
25+
$ch = curl_init($url);
26+
curl_setopt($ch, CURLOPT_WILDCARDMATCH, 1);
27+
curl_setopt($ch, CURLOPT_FNMATCH_FUNCTION, $callback);
28+
echo curl_exec($ch), PHP_EOL;
29+
30+
?>
31+
--EXPECT--
32+
Trampoline for trampoline
33+
Hello World!
34+
Hello World!
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
--TEST--
2+
Test trampoline for curl option CURLOPT_PROGRESSFUNCTION
3+
--EXTENSIONS--
4+
curl
5+
--FILE--
6+
<?php
7+
include 'server.inc';
8+
$host = curl_cli_server_start();
9+
10+
class TrampolineTest {
11+
public function __call(string $name, array $arguments) {
12+
static $done = false;
13+
if (!$done) {
14+
echo 'Trampoline for ', $name, PHP_EOL;
15+
$done = true;
16+
}
17+
return CURL_PUSH_OK;
18+
}
19+
}
20+
$o = new TrampolineTest();
21+
$callback = [$o, 'trampoline'];
22+
23+
$url = "{$host}/get.inc";
24+
$ch = curl_init($url);
25+
curl_setopt($ch, CURLOPT_NOPROGRESS, 0);
26+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
27+
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, $callback);
28+
echo curl_exec($ch), PHP_EOL;
29+
30+
?>
31+
--EXPECT--
32+
Trampoline for trampoline
33+
Hello World!
34+
Hello World!
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
--TEST--
2+
Test trampoline for curl option CURLMOPT_PUSHFUNCTION
3+
--EXTENSIONS--
4+
curl
5+
--SKIPIF--
6+
<?php
7+
include 'skipif-nocaddy.inc';
8+
9+
$curl_version = curl_version();
10+
if ($curl_version['version_number'] < 0x080100) {
11+
exit("skip: test may crash with curl < 8.1.0");
12+
}
13+
?>
14+
--XFAIL--
15+
Need CI to test caddy
16+
--FILE--
17+
<?php
18+
19+
class TrampolineTest {
20+
public function __call(string $name, array $arguments) {
21+
echo 'Trampoline for ', $name, PHP_EOL;
22+
return CURL_PUSH_OK;
23+
}
24+
}
25+
$o = new TrampolineTest();
26+
$callback = [$o, 'trampoline'];
27+
28+
$mh = curl_multi_init();
29+
30+
curl_multi_setopt($mh, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
31+
curl_multi_setopt($mh, CURLMOPT_PUSHFUNCTION, $callback);
32+
33+
$ch = curl_init();
34+
curl_setopt($ch, CURLOPT_URL, "https://localhost/serverpush");
35+
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
36+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
37+
38+
curl_multi_add_handle($mh, $ch);
39+
40+
$responses = [];
41+
$active = null;
42+
do {
43+
$status = curl_multi_exec($mh, $active);
44+
45+
do {
46+
$info = curl_multi_info_read($mh);
47+
if (false !== $info && $info['msg'] == CURLMSG_DONE) {
48+
$handle = $info['handle'];
49+
if ($handle !== null) {
50+
$responses[] = curl_multi_getcontent($info['handle']);
51+
curl_multi_remove_handle($mh, $handle);
52+
curl_close($handle);
53+
}
54+
}
55+
} while ($info);
56+
} while (count($responses) !== 2);
57+
58+
curl_multi_close($mh);
59+
60+
sort($responses);
61+
print_r($responses);
62+
?>
63+
--EXPECT--
64+
Array
65+
(
66+
[0] => main response
67+
[1] => pushed response
68+
)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
--TEST--
2+
Test trampoline for curl option CURLOPT_READFUNCTION
3+
--EXTENSIONS--
4+
curl
5+
--FILE--
6+
<?php
7+
8+
class TrampolineTest {
9+
public function __call(string $name, array $arguments) {
10+
echo 'Trampoline for ', $name, PHP_EOL;
11+
return 0;
12+
}
13+
}
14+
$o = new TrampolineTest();
15+
$callback = [$o, 'trampoline'];
16+
17+
$sFileBase = __DIR__.DIRECTORY_SEPARATOR.'curl_read_trampoline';
18+
$sReadFile = $sFileBase.'_in.tmp';
19+
$sWriteFile = $sFileBase.'_out.tmp';
20+
$sWriteUrl = 'file://'.$sWriteFile;
21+
22+
file_put_contents($sReadFile,'contents of tempfile');
23+
$hReadHandle = fopen($sReadFile, 'r');
24+
25+
$oCurl = curl_init();
26+
curl_setopt($oCurl, CURLOPT_URL, $sWriteUrl);
27+
curl_setopt($oCurl, CURLOPT_UPLOAD, 1);
28+
curl_setopt($oCurl, CURLOPT_READFUNCTION, $callback);
29+
curl_setopt($oCurl, CURLOPT_INFILE, $hReadHandle );
30+
curl_exec($oCurl);
31+
curl_close($oCurl);
32+
33+
fclose ($hReadHandle);
34+
35+
$sOutput = file_get_contents($sWriteFile);
36+
var_dump($sOutput);
37+
38+
?>
39+
--CLEAN--
40+
<?php
41+
$sFileBase = __DIR__.DIRECTORY_SEPARATOR.'curl_read_trampoline';
42+
$sReadFile = $sFileBase.'_in.tmp';
43+
$sWriteFile = $sFileBase.'_out.tmp';
44+
@unlink($sReadFile);
45+
@unlink($sWriteFile);
46+
?>
47+
--EXPECT--
48+
Trampoline for trampoline
49+
string(0) ""
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
--TEST--
2+
Test trampoline for curl option CURLOPT_SSH_HOSTKEYFUNCTION
3+
--EXTENSIONS--
4+
curl
5+
--SKIPIF--
6+
<?php
7+
$curl_version = curl_version();
8+
if ($curl_version['version_number'] < 0x075400) {
9+
exit("skip: test works only with curl >= 7.84.0");
10+
}
11+
exit("skip: cannot properly test CURLOPT_SSH_HOSTKEYFUNCTION");
12+
?>
13+
--FILE--
14+
<?php
15+
16+
class TrampolineTest {
17+
public function __call(string $name, array $arguments) {
18+
echo 'Trampoline for ', $name, PHP_EOL;
19+
return CURLKHMATCH_MISMATCH;
20+
}
21+
}
22+
$o = new TrampolineTest();
23+
$callback = [$o, 'trampoline'];
24+
25+
include 'server.inc';
26+
$ch = curl_init();
27+
28+
$host = curl_cli_server_start();
29+
30+
var_dump($host);
31+
//$url = "scp://{$host}/get.inc";
32+
//$url = "scp://example.com/example.txt";
33+
curl_setopt($ch, CURLOPT_URL, $url);
34+
var_dump(curl_setopt($ch, CURLOPT_SSH_HOSTKEYFUNCTION, $callback));
35+
curl_exec($ch);
36+
curl_close($ch);
37+
38+
?>
39+
--EXPECT--
40+
Trampoline for trampoline
41+
FAKE
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--TEST--
2+
Test trampoline for curl option CURLOPT_WRITEFUNCTION
3+
--EXTENSIONS--
4+
curl
5+
--FILE--
6+
<?php
7+
8+
class TrampolineTest {
9+
public function __call(string $name, array $arguments) {
10+
echo 'Trampoline for ', $name, PHP_EOL;
11+
return 0;
12+
}
13+
}
14+
$o = new TrampolineTest();
15+
$callback = [$o, 'trampoline'];
16+
17+
$log_file = tempnam(sys_get_temp_dir(), 'php-curl-CURLOPT_WRITEFUNCTION-trampoline');
18+
19+
$fp = fopen($log_file, 'w+');
20+
fwrite($fp, "test");
21+
fclose($fp);
22+
23+
$ch = curl_init();
24+
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $callback);
25+
curl_setopt($ch, CURLOPT_URL, 'file://' . $log_file);
26+
curl_exec($ch);
27+
curl_close($ch);
28+
29+
?>
30+
--CLEAN--
31+
<?php
32+
$log_file = tempnam(sys_get_temp_dir(), 'php-curl-CURLOPT_WRITEFUNCTION-trampoline');
33+
@unlink($log_file);
34+
?>
35+
--EXPECT--
36+
Trampoline for trampoline
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
--TEST--
2+
Test trampoline for curl option CURLOPT_HEADERFUNCTION
3+
--EXTENSIONS--
4+
curl
5+
--FILE--
6+
<?php
7+
8+
class TrampolineTest {
9+
public function __call(string $name, array $arguments) {
10+
echo 'Trampoline for ', $name, PHP_EOL;
11+
return CURL_PUSH_OK;
12+
}
13+
}
14+
$o = new TrampolineTest();
15+
$callback = [$o, 'trampoline'];
16+
17+
include 'server.inc';
18+
$host = curl_cli_server_start();
19+
20+
$ch = curl_init();
21+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
22+
curl_setopt($ch, CURLOPT_HEADERFUNCTION, $callback);
23+
curl_setopt($ch, CURLOPT_URL, $host);
24+
curl_exec($ch);
25+
26+
?>
27+
--EXPECT--
28+
Trampoline for trampoline
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
--TEST--
2+
Test trampoline for curl option CURLOPT_XFERINFOFUNCTION
3+
--EXTENSIONS--
4+
curl
5+
--FILE--
6+
<?php
7+
include 'server.inc';
8+
$host = curl_cli_server_start();
9< E424 code class="diff-text syntax-highlighted-line addition">+
10+
class TrampolineTest {
11+
public function __call(string $name, array $arguments) {
12+
static $done = false;
13+
if (!$done) {
14+
echo 'Trampoline for ', $name, PHP_EOL;
15+
$done = true;
16+
}
17+
return CURL_PUSH_OK;
18+
}
19+
}
20+
$o = new TrampolineTest();
21+
$callback = [$o, 'trampoline'];
22+
23+
$url = "{$host}/get.inc";
24+
$ch = curl_init($url);
25+
curl_setopt($ch, CURLOPT_NOPROGRESS, 0);
26+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
27+
curl_setopt($ch, CURLOPT_XFERINFOFUNCTION, $callback);
28+
echo curl_exec($ch), PHP_EOL;
29+
30+
?>
31+
--EXPECT--
32+
Trampoline for trampoline
33+
Hello World!
34+
Hello World!

0 commit comments

Comments
 (0)
0