Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests(ext-curl): fix HTTP/2 Server Push tests #10669

Closed
wants to merge 9 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/actions/setup-caddy/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: Setup Caddy server
runs:
using: composite
steps:
- shell: bash
run: |
set -x
sudo curl 'https://caddyserver.com/api/download?os=linux&arch=amd64' -o /usr/bin/caddy
sudo chmod +x /usr/bin/caddy
sudo caddy start --config ext/curl/tests/Caddyfile
dunglas marked this conversation as resolved.
Show resolved Hide resolved
2 changes: 2 additions & 0 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ jobs:
uses: ./.github/actions/setup-mssql
- name: Create Oracle container
uses: ./.github/actions/setup-oracle
- name: Setup Caddy server
uses: ./.github/actions/setup-caddy
- name: apt
uses: ./.github/actions/apt-x64
- name: ccache
Expand Down
13 changes: 13 additions & 0 deletions ext/curl/tests/Caddyfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
admin off
auto_https disable_redirects
}

localhost
iluuu1994 marked this conversation as resolved.
Show resolved Hide resolved

respond / "Caddy is up and running"

# HTTP/2 Server Push
respond /serverpush "main response"
respond /serverpush/pushed "pushed response"
push /serverpush /serverpush/pushed
14 changes: 5 additions & 9 deletions ext/curl/tests/bug76675.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,14 @@
Bug #76675 (Segfault with H2 server push write/writeheader handlers)
--EXTENSIONS--
curl
--XFAIL--
http2.golang.org/serverpush is gone
--SKIPIF--
<?php
if (getenv("SKIP_ONLINE_TESTS")) {
die("skip online test");
}
include 'skipif-nocaddy.inc';

$curl_version = curl_version();
if ($curl_version['version_number'] < 0x073d00) {
exit("skip: test may crash with curl < 7.61.0");
if ($curl_version['version_number'] < 0x080100) {
exit("skip: test may crash with curl < 8.1.0");
}
die("skip test is slow due to timeout, and XFAILs anyway");
?>
--FILE--
<?php
Expand All @@ -30,7 +26,7 @@ $mh = curl_multi_init();
curl_multi_setopt($mh, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
curl_multi_setopt($mh, CURLMOPT_PUSHFUNCTION, $callback);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://http2.golang.org/serverpush');
curl_setopt($ch, CURLOPT_URL, 'https://localhost/serverpush');
dunglas marked this conversation as resolved.
Show resolved Hide resolved
curl_setopt($ch, CURLOPT_HTTP_VERSION, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Expand Down
14 changes: 5 additions & 9 deletions ext/curl/tests/bug77535.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,14 @@
Bug #77535 (Invalid callback, h2 server push)
--EXTENSIONS--
curl
--XFAIL--
http2.golang.org/serverpush is gone
--SKIPIF--
<?php
if (getenv("SKIP_ONLINE_TESTS")) {
die("skip online test");
}
include 'skipif-nocaddy.inc';

$curl_version = curl_version();
if ($curl_version['version_number'] < 0x073d00) {
exit("skip: test may crash with curl < 7.61.0");
if ($curl_version['version_number'] < 0x080100) {
exit("skip: test may crash with curl < 8.1.0");
}
die("skip test is slow due to timeout, and XFAILs anyway");
?>
--FILE--
<?php
Expand All @@ -36,7 +32,7 @@ class MyHttpClient
curl_setopt($this->curl, CURLOPT_HEADER, false);
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($this->curl, CURLOPT_FAILONERROR, false);
curl_setopt($this->curl, CURLOPT_URL, 'https://http2.golang.org/serverpush');
curl_setopt($this->curl, CURLOPT_URL, 'https://localhost/serverpush');
curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($this->curl, CURLOPT_HEADERFUNCTION, function ($ch, $data) {
return \strlen($data);
Expand Down
62 changes: 62 additions & 0 deletions ext/curl/tests/curl_pushfunction.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
--TEST--
Test CURLMOPT_PUSHFUNCTION
--CREDITS--
Davey Shafik
Kévin Dunglas
--EXTENSIONS--
curl
--SKIPIF--
<?php
include 'skipif-nocaddy.inc';

$curl_version = curl_version();
if ($curl_version['version_number'] < 0x080100) {
exit("skip: test may crash with curl < 8.1.0");
}
?>
--FILE--
<?php
$callback = function($parent_ch, $pushed_ch, array $headers) {
return CURL_PUSH_OK;
};

$mh = curl_multi_init();

curl_multi_setopt($mh, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
curl_multi_setopt($mh, CURLMOPT_PUSHFUNCTION, $callback);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://localhost/serverpush");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_multi_add_handle($mh, $ch);

$responses = [];
$active = null;
do {
$status = curl_multi_exec($mh, $active);

do {
$info = curl_multi_info_read($mh);
if (false !== $info && $info['msg'] == CURLMSG_DONE) {
$handle = $info['handle'];
if ($handle !== null) {
$responses[] = curl_multi_getcontent($info['handle']);
curl_multi_remove_handle($mh, $handle);
curl_close($handle);
}
}
} while ($info);
} while (count($responses) !== 2);

curl_multi_close($mh);

sort($responses);
print_r($responses);
--EXPECT--
Array
(
[0] => main response
[1] => pushed response
)
12 changes: 12 additions & 0 deletions ext/curl/tests/skipif-nocaddy.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php

$ch = curl_init("https://localhost");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$body = curl_exec($ch);

curl_close($ch);

if ($body !== "Caddy is up and running") {
die("skip test needs Caddy");
}