summaryrefslogtreecommitdiff
path: root/ext/curl
diff options
context:
space:
mode:
authorSara Golemon <pollita@php.net>2020-09-14 20:45:39 +0000
committerSara Golemon <pollita@php.net>2020-09-17 14:44:12 +0000
commitbfa8e42a5550cdd0545259cc34cf36152c3e1b08 (patch)
tree4a1f736a798dc3907b9172d2a8b632086eb0bbd5 /ext/curl
parenta61a9fe9a0d63734136f995451a1fd35b0176292 (diff)
downloadphp-git-bfa8e42a5550cdd0545259cc34cf36152c3e1b08.tar.gz
Use ephemeral ports during curl tests with dev server
Diffstat (limited to 'ext/curl')
-rw-r--r--ext/curl/tests/CONFLICTS1
-rw-r--r--ext/curl/tests/bug79033.phpt2
-rw-r--r--ext/curl/tests/server.inc43
3 files changed, 35 insertions, 11 deletions
diff --git a/ext/curl/tests/CONFLICTS b/ext/curl/tests/CONFLICTS
deleted file mode 100644
index 254defddb5..0000000000
--- a/ext/curl/tests/CONFLICTS
+++ /dev/null
@@ -1 +0,0 @@
-server
diff --git a/ext/curl/tests/bug79033.phpt b/ext/curl/tests/bug79033.phpt
index 454c3b2669..c70611dda6 100644
--- a/ext/curl/tests/bug79033.phpt
+++ b/ext/curl/tests/bug79033.phpt
@@ -21,7 +21,7 @@ var_dump(curl_getinfo($ch)["request_header"]);
string(%d) "array(0) {
}
"
-string(90) "POST /get.inc?test=post HTTP/1.1
+string(%d) "POST /get.inc?test=post HTTP/1.1
Host: localhost:%d
Accept: */*
Content-Length: 0
diff --git a/ext/curl/tests/server.inc b/ext/curl/tests/server.inc
index 00eeb5ff76..3051bf98a4 100644
--- a/ext/curl/tests/server.inc
+++ b/ext/curl/tests/server.inc
@@ -1,8 +1,4 @@
-<?php
-
-define ("PHP_CURL_SERVER_HOSTNAME", "localhost");
-define ("PHP_CURL_SERVER_PORT", 8964);
-define ("PHP_CURL_SERVER_ADDRESS", PHP_CURL_SERVER_HOSTNAME.":".PHP_CURL_SERVER_PORT);
+<?php declare(strict_types=1);
function curl_cli_server_start() {
if(getenv('PHP_CURL_HTTP_REMOTE_SERVER')) {
@@ -12,21 +8,50 @@ function curl_cli_server_start() {
$php_executable = getenv('TEST_PHP_EXECUTABLE');
$doc_root = __DIR__;
$router = "responder/get.inc";
- $cmd = [$php_executable, '-t', $doc_root, '-n', '-S', PHP_CURL_SERVER_ADDRESS, $router];
+ $cmd = [$php_executable, '-t', $doc_root, '-n', '-S', 'localhost:0', $router];
$descriptorspec = array(
0 => STDIN,
1 => STDOUT,
- 2 => array("null"),
+ 2 => ['pipe', 'w'],
);
$handle = proc_open($cmd, $descriptorspec, $pipes, $doc_root, null, array("suppress_errors" => true));
+ // First, wait for the dev server to declare itself ready.
+ $bound = null;
+ stream_set_blocking($pipes[2], false);
+ for ($i = 0; $i < 60; $i++) {
+ usleep(50000); // 50ms per try
+ $status = proc_get_status($handle);
+ if (empty($status['running'])) {
+ echo "Server is not running\n";
+ proc_terminate($handle);
+ exit(1);
+ }
+
+ while (($line = fgets($pipes[2])) !== false) {
+ if (preg_match('@PHP \S* Development Server \(https?://(.*?:\d+)\) started@', $line, $matches)) {
+ $bound = $matches[1];
+ // Now that we've identified the listen address, close STDERR.
+ // Otherwise the pipe may clog up with unread log messages.
+ fclose($pipes[2]);
+ break 2;
+ }
+ }
+ }
+ if ($bound === null) {
+ echo "Server did not output startup message";
+ proc_terminate($handle);
+ exit(1);
+ }
+
+ // Now wait for a connection to succeed.
// note: even when server prints 'Listening on localhost:8964...Press Ctrl-C to quit.'
// it might not be listening yet...need to wait until fsockopen() call returns
$error = "Unable to connect to server\n";
for ($i=0; $i < 60; $i++) {
usleep(50000); // 50ms per try
$status = proc_get_status($handle);
- $fp = @fsockopen(PHP_CURL_SERVER_HOSTNAME, PHP_CURL_SERVER_PORT);
+ $fp = @fsockopen("tcp://$bound");
// Failure, the server is no longer running
if (!($status && $status['running'])) {
$error = "Server is not running\n";
@@ -64,5 +89,5 @@ function curl_cli_server_start() {
$handle
);
- return PHP_CURL_SERVER_ADDRESS;
+ return $bound;
}