This is an automated email from the ASF dual-hosted git repository.
ezelkow1 pushed a commit to branch 9.2.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/9.2.x by this push:
new d4a8a69713 Fix Fedora 44 CI on 9.2.x (#13285)
d4a8a69713 is described below
commit d4a8a6971314dabf908002f7796fc670f63e206e
Author: Brian Neradt <[email protected]>
AuthorDate: Tue Jun 16 19:28:36 2026 -0500
Fix Fedora 44 CI on 9.2.x (#13285)
Fedora 44 exposes several stale 9.2.x CI assumptions: newer curl
changed its CONNECT progress wording, proxy-verifier setup cannot rely
on host tools or full archive extraction in the CI bind mount, newer GCC
rejects plugin warning paths under -Werror, and several AuTest helpers
can stay alive after useful assertions finish.
This updates affected AuTests for current tool behavior, restores the
HTTP/2 flow-control replay payload size, keeps the plugin warning fixes
local, normalizes statichit's expected rejection logging, and backports
Fedora 44 helper fixes so proxy-verifier, pipeline, and command-argument
tests report behavior instead of cleanup races.
Co-authored-by: bneradt <[email protected]>
---
example/plugins/c-api/thread_pool/psi.c | 2 +-
.../cpp-api/async_http_fetch/AsyncHttpFetch.cc | 16 +++++++++--
.../experimental/ssl_session_reuse/src/config.cc | 15 ++++++++--
plugins/experimental/statichit/statichit.cc | 2 +-
.../command_argument/verify_global_plugin.test.py | 12 ++++----
.../command_argument/verify_remap_plugin.test.py | 12 ++++----
tests/gold_tests/connect/connect.test.py | 3 +-
tests/gold_tests/h2/http2_flow_control.replay.yaml | 1 -
tests/gold_tests/pipeline/pipeline_server.py | 7 ++++-
tests/prepare_proxy_verifier.sh | 33 +++++++++++-----------
10 files changed, 63 insertions(+), 40 deletions(-)
diff --git a/example/plugins/c-api/thread_pool/psi.c
b/example/plugins/c-api/thread_pool/psi.c
index 197a1e0198..6b53498f70 100644
--- a/example/plugins/c-api/thread_pool/psi.c
+++ b/example/plugins/c-api/thread_pool/psi.c
@@ -419,7 +419,7 @@ parse_data(TSCont contp, TSIOBufferReader input_reader, int
avail, int *toconsum
static const char *
_basename(const char *filename)
{
- char *cptr;
+ const char *cptr;
const char *ptr = filename;
while ((cptr = strchr(ptr, '/')) != NULL) {
diff --git a/example/plugins/cpp-api/async_http_fetch/AsyncHttpFetch.cc
b/example/plugins/cpp-api/async_http_fetch/AsyncHttpFetch.cc
index 291d650fb0..7e4441db96 100644
--- a/example/plugins/cpp-api/async_http_fetch/AsyncHttpFetch.cc
+++ b/example/plugins/cpp-api/async_http_fetch/AsyncHttpFetch.cc
@@ -39,19 +39,29 @@ namespace
GlobalPlugin *plugin;
}
-class AsyncHttpFetch2 : public AsyncHttpFetch
+class AsyncHttpFetch2 final : public AsyncHttpFetch
{
public:
explicit AsyncHttpFetch2(const string &request) : AsyncHttpFetch(request){};
+ void
+ run() override
+ {
+ AsyncHttpFetch::run();
+ }
};
-class AsyncHttpFetch3 : public AsyncHttpFetch
+class AsyncHttpFetch3 final : public AsyncHttpFetch
{
public:
AsyncHttpFetch3(const string &request, HttpMethod method) :
AsyncHttpFetch(request, method){};
+ void
+ run() override
+ {
+ AsyncHttpFetch::run();
+ }
};
-class DelayedAsyncHttpFetch : public AsyncHttpFetch, public
AsyncReceiver<AsyncTimer>
+class DelayedAsyncHttpFetch final : public AsyncHttpFetch, public
AsyncReceiver<AsyncTimer>
{
public:
DelayedAsyncHttpFetch(const string &request, HttpMethod method,
std::shared_ptr<Mutex> mutex)
diff --git a/plugins/experimental/ssl_session_reuse/src/config.cc
b/plugins/experimental/ssl_session_reuse/src/config.cc
index 6501048b2c..ae0cc31790 100644
--- a/plugins/experimental/ssl_session_reuse/src/config.cc
+++ b/plugins/experimental/ssl_session_reuse/src/config.cc
@@ -76,9 +76,18 @@ Config::loadConfig(const std::string &filename)
}
line.ltrim_if(&isspace);
ts::TextView field = line.take_prefix_at('=');
- TSDebug(PLUGIN, "%.*s=%.*s", static_cast<int>(field.size()),
field.data(), static_cast<int>(line.size()), line.data());
- if (field.size() > 0) {
- m_config[std::string(field.data(), field.size())] =
std::string(line.data(), line.size());
+ std::string field_name;
+ std::string value;
+ if (!field.empty()) {
+ field_name.assign(field.data(), field.size());
+ }
+ if (!line.empty()) {
+ value.assign(line.data(), line.size());
+ }
+ TSDebug(PLUGIN, "%.*s=%.*s", static_cast<int>(field_name.size()),
field_name.c_str(), static_cast<int>(value.size()),
+ value.c_str());
+ if (!field_name.empty()) {
+ m_config[field_name] = value;
}
}
diff --git a/plugins/experimental/statichit/statichit.cc
b/plugins/experimental/statichit/statichit.cc
index 7b2824f554..2c3ddea956 100644
--- a/plugins/experimental/statichit/statichit.cc
+++ b/plugins/experimental/statichit/statichit.cc
@@ -641,7 +641,7 @@ TSRemapDoRemap(void *ih, TSHttpTxn rh, TSRemapRequestInfo
*rri)
int pathsz;
TSUrlPathGet(rri->requestBufp, rri->requestUrl, &pathsz);
if (pathsz > 0) {
- VERROR("Path is not an exact match. Rejecting!");
+ VDEBUG("Path is not an exact match. Rejecting!");
TSHttpTxnStatusSet(rh, TS_HTTP_STATUS_NOT_FOUND);
return TSREMAP_NO_REMAP;
}
diff --git a/tests/gold_tests/command_argument/verify_global_plugin.test.py
b/tests/gold_tests/command_argument/verify_global_plugin.test.py
index 8b736d6f1f..948593d900 100644
--- a/tests/gold_tests/command_argument/verify_global_plugin.test.py
+++ b/tests/gold_tests/command_argument/verify_global_plugin.test.py
@@ -38,12 +38,12 @@ def create_ts_process():
# Ideally we would set the test run's Processes.Default to ts, but deep
# copy of processes is not currently implemented in autest. Therefore we
# replace the command which ts runs with a dummy command, and pull in
- # piecemeal the values from ts that we want into the test run.
- ts.Command = "sleep 100"
- # sleep will return -2 when autest kills it. We set the expectation for the
- # -2 return code here so the test doesn't fail because of this.
- ts.ReturnCode = -2
- # Clear the ready criteria because sleep is ready as soon as it is running.
+ # piecemeal the values from ts that we want into the test run. The helper
+ # only needs to create the ATS environment and runroot, so let it exit
+ # normally instead of depending on AuTest's cleanup signal behavior.
+ ts.Command = "true"
+ ts.ReturnCode = 0
+ # Clear the ready criteria because the helper is ready as soon as it runs.
ts.Ready = None
return ts
diff --git a/tests/gold_tests/command_argument/verify_remap_plugin.test.py
b/tests/gold_tests/command_argument/verify_remap_plugin.test.py
index d291231604..ea36a1e4a3 100644
--- a/tests/gold_tests/command_argument/verify_remap_plugin.test.py
+++ b/tests/gold_tests/command_argument/verify_remap_plugin.test.py
@@ -38,12 +38,12 @@ def create_ts_process():
# Ideally we would set the test run's Processes.Default to ts, but deep
# copy of processes is not currently implemented in autest. Therefore we
# replace the command which ts runs with a dummy command, and pull in
- # piecemeal the values from ts that we want into the test run.
- ts.Command = "sleep 100"
- # sleep will return -2 when autest kills it. We set the expectation for the
- # -2 return code here so the test doesn't fail because of this.
- ts.ReturnCode = -2
- # Clear the ready criteria because sleep is ready as soon as it is running.
+ # piecemeal the values from ts that we want into the test run. The helper
+ # only needs to create the ATS environment and runroot, so let it exit
+ # normally instead of depending on AuTest's cleanup signal behavior.
+ ts.Command = "true"
+ ts.ReturnCode = 0
+ # Clear the ready criteria because the helper is ready as soon as it runs.
ts.Ready = None
return ts
diff --git a/tests/gold_tests/connect/connect.test.py
b/tests/gold_tests/connect/connect.test.py
index ac120fd5af..184b24beb6 100644
--- a/tests/gold_tests/connect/connect.test.py
+++ b/tests/gold_tests/connect/connect.test.py
@@ -87,7 +87,8 @@ logging:
tr.Processes.Default.ReturnCode = 0
tr.Processes.Default.Streams.stderr = "gold/connect_0_stderr.gold"
tr.Processes.Default.Streams.stderr = Testers.ContainsExpression(
- f'Connected to 127.0.0.1.*{self.ts.Variables.port}', 'Curl should
connect through the ATS proxy port.')
+ rf'(Connected to|Established connection to)
127\.0\.0\.1.*{self.ts.Variables.port}',
+ 'Curl should connect through the ATS proxy port.')
tr.Processes.Default.TimeOut = 3
self.__checkProcessAfter(tr)
diff --git a/tests/gold_tests/h2/http2_flow_control.replay.yaml
b/tests/gold_tests/h2/http2_flow_control.replay.yaml
index f8eca55d59..1c4dbe9585 100644
--- a/tests/gold_tests/h2/http2_flow_control.replay.yaml
+++ b/tests/gold_tests/h2/http2_flow_control.replay.yaml
@@ -234,4 +234,3 @@ sessions:
headers:
fields:
- [ X-Response, {value: 'fifth-response', as: equal } ]
-
diff --git a/tests/gold_tests/pipeline/pipeline_server.py
b/tests/gold_tests/pipeline/pipeline_server.py
index cf13fa5696..85214b8c08 100644
--- a/tests/gold_tests/pipeline/pipeline_server.py
+++ b/tests/gold_tests/pipeline/pipeline_server.py
@@ -83,7 +83,11 @@ def receive_requests(sock: socket.socket) -> None:
end_of_second_request: bytes = b'12345'
end_of_third_request: bytes = b'\r\n\r\n'
while not received_third_request:
- data = sock.recv(1024)
+ try:
+ data = sock.recv(1024)
+ except socket.timeout:
+ print("Timed out waiting for an unexpected third request.")
+ break
if not data:
print("Socket closed.")
break
@@ -126,6 +130,7 @@ def receive_requests(sock: socket.socket) -> None:
print()
time.sleep(0.01)
sock.sendall(second_response_bytes)
+ sock.settimeout(1.0)
continue
elif processing_third_request:
diff --git a/tests/prepare_proxy_verifier.sh b/tests/prepare_proxy_verifier.sh
index 12b4280cb7..a96bd8fec7 100755
--- a/tests/prepare_proxy_verifier.sh
+++ b/tests/prepare_proxy_verifier.sh
@@ -53,7 +53,7 @@ then
if [ ! -e ${pv_tar} ]
then
# default to using native sha1sum command when available
- if [ $(which sha1sum) ]
+ if command -v sha1sum >/dev/null 2>&1
then
SHASUM=${SHASUM:-sha1sum}
else
@@ -68,20 +68,16 @@ EOF
${SHASUM} -c ${pv_top_dir}/sha1 || fail "SHA1 mismatch for downloaded
${pv_tar_filename}."
fi
- # 2. Untar the Proxy Verifier binaries.
- mkdir -p ${pv_unpack_dir}
- ${TAR} -x -C ${pv_unpack_dir} -f ${pv_tar}
-
- # 3. Determine the target OS.
- pv_os_dir=""
+ # 2. Determine the target OS.
+ pv_os_archive_dir=""
case $(uname -s) in
Darwin)
case $(uname -m) in
x86_64)
- pv_os_dir="${pv_unpack_dir}/${pv_dir}/darwin-amd64"
+ pv_os_archive_dir="${pv_dir}/darwin-amd64"
;;
arm64)
- pv_os_dir="${pv_unpack_dir}/${pv_dir}/darwin-arm64"
+ pv_os_archive_dir="${pv_dir}/darwin-arm64"
;;
*)
fail "Unrecognized Mac architecture: $(uname -m)"
@@ -89,13 +85,12 @@ EOF
esac
;;
Linux)
- pv_os_dir="${pv_unpack_dir}/${pv_dir}/linux"
case $(uname -m) in
x86_64)
- pv_os_dir="${pv_unpack_dir}/${pv_dir}/linux-amd64"
+ pv_os_archive_dir="${pv_dir}/linux-amd64"
;;
aarch64)
- pv_os_dir="${pv_unpack_dir}/${pv_dir}/linux-arm64"
+ pv_os_archive_dir="${pv_dir}/linux-arm64"
;;
*)
fail "Unrecognized Linux architecture: $(uname -m)"
@@ -106,10 +101,14 @@ EOF
fail "We need to build proxy-verifier for $(uname -s)"
esac
- # 4. Link the OS-specific binaries to the bin directory.
+ # 3. Extract the OS-specific binaries to the bin directory.
mkdir -p ${bin_dir}
- ln -s ${pv_os_dir}/verifier-client ${bin_dir}
- ln -s ${pv_os_dir}/verifier-server ${bin_dir}
- chmod +x ${pv_client}
- chmod +x ${pv_server}
+ rm -f "${pv_client}" "${pv_server}" "${pv_client}.tmp" "${pv_server}.tmp"
+ ${TAR} -x -O -f "${pv_tar}" "${pv_os_archive_dir}/verifier-client" >
"${pv_client}.tmp" || \
+ fail "Failed to extract ${pv_os_archive_dir}/verifier-client from
${pv_tar_filename}."
+ ${TAR} -x -O -f "${pv_tar}" "${pv_os_archive_dir}/verifier-server" >
"${pv_server}.tmp" || \
+ fail "Failed to extract ${pv_os_archive_dir}/verifier-server from
${pv_tar_filename}."
+ mv "${pv_client}.tmp" "${pv_client}"
+ mv "${pv_server}.tmp" "${pv_server}"
+ chmod +x "${pv_client}" "${pv_server}"
fi