From bd140c92d676d960a1c3ba03831c1b7e92f13ff8 Mon Sep 17 00:00:00 2001 From: Edmond <1571649+edmonddantes@users.noreply.github.com> Date: Fri, 29 May 2026 17:43:54 +0000 Subject: [PATCH] test(core/030): retry connect in fetch() to kill status=0 flake (#48) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 030's fetch() didn't guard stream_socket_client returning false, so a transient connect failure under parallel run-tests load (the first attempt racing the accept loop) surfaced as a flaky status=0 — seen on main CI. Retry the connect up to 20×10ms and return a clean [0,[],''] if it never succeeds. Test semantics (JSON response behaviour) unchanged; 5/5 stable locally. --- tests/phpt/server/core/030-response-json.phpt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/phpt/server/core/030-response-json.phpt b/tests/phpt/server/core/030-response-json.phpt index 1be8fc3..3154f70 100644 --- a/tests/phpt/server/core/030-response-json.phpt +++ b/tests/phpt/server/core/030-response-json.phpt @@ -61,7 +61,16 @@ $server->addHttpHandler(function ($req, $resp) { }); function fetch(int $port, string $path): array { - $fp = stream_socket_client("tcp://127.0.0.1:$port", $errno, $errstr, 2); + /* Retry the connect a few times: under parallel run-tests load the + * first attempt can transiently fail before the accept loop picks it + * up, otherwise showing up as a flaky status=0. The JSON response + * semantics under test are unaffected. */ + $fp = false; + for ($try = 0; $try < 20 && $fp === false; $try++) { + $fp = @stream_socket_client("tcp://127.0.0.1:$port", $errno, $errstr, 2); + if ($fp === false) { usleep(10000); } + } + if ($fp === false) { return [0, [], '']; } stream_set_timeout($fp, 2); fwrite($fp, "GET $path HTTP/1.1\r\nHost: x\r\nConnection: close\r\n\r\n"); $raw = '';