diff options
author | Sara Golemon <pollita@php.net> | 2020-09-14 20:45:39 +0000 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2020-09-17 14:44:12 +0000 |
commit | bfa8e42a5550cdd0545259cc34cf36152c3e1b08 (patch) | |
tree | 4a1f736a798dc3907b9172d2a8b632086eb0bbd5 /ext/curl | |
parent | a61a9fe9a0d63734136f995451a1fd35b0176292 (diff) | |
download | php-git-bfa8e42a5550cdd0545259cc34cf36152c3e1b08.tar.gz |
Use ephemeral ports during curl tests with dev server
Diffstat (limited to 'ext/curl')
-rw-r--r-- | ext/curl/tests/CONFLICTS | 1 | ||||
-rw-r--r-- | ext/curl/tests/bug79033.phpt | 2 | ||||
-rw-r--r-- | ext/curl/tests/server.inc | 43 |
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; } |