You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "brbzull0 (via GitHub)" <gi...@apache.org> on 2026/09/02 12:09:11 UTC
[I] tests: core-task plugin-tag assertion in config_reload_plugin_api cannot fail [trafficserver]
brbzull0 opened a new issue, #13617:
URL: https://github.com/apache/trafficserver/issues/13617
### Impact
Test-only defect, no production impact. Introduced by #13146, now on `master`.
Test G of `config_reload_plugin_api.test.py` is the only test asserting that a **core**
reload task does not carry the `[plugin: <name>]` attribution tag that
`traffic_ctl config status` adds for plugin-owned tasks. `ExcludesExpression` compiles its
first argument as a regex, and the unescaped brackets in `'ip_allow [plugin]'` make it a
character class rather than a literal. The pattern cannot match the command's output in
the correct case *or* in the regressed case, so the assertion passes unconditionally.
If core reload tasks ever started being reported as plugin-owned, this test would still go
green and the regression would ship undetected. Nothing else covers that behaviour.
```
Version: master @ 83335d4eff9694061409d889c73627a847f46d24
Platform: test-only; not platform specific
Config: none
```
### Proof
`ExcludesExpression` compiles its first argument as a regex and applies `re.search` per
line, and `IncludesExpression` is an alias of `ContainsExpression`, so all three matchers
behave this way:
```python
# autest/testers/__init__.py:16
from .contains_expression import ContainsExpression as IncludesExpression
# autest/testers/excludes_expression.py:38-42
if isinstance(regexp, str):
regexp = re.compile(regexp, reflags)
```
The assertion, at
https://github.com/apache/trafficserver/blob/83335d4eff9694061409d889c73627a847f46d24/tests/gold_tests/jsonrpc/config_reload_plugin_api.test.py#L271-L272
```python
tr.Processes.Default.Streams.stdout = Testers.ExcludesExpression(
'ip_allow [plugin]', 'Core task ip_allow must not have [plugin] tag')
```
`[plugin]` is a character class matching one of `p l u g i n`, so the pattern is
`ip_allow ` followed by one of those six characters. The tag it is meant to detect is
built at
https://github.com/apache/trafficserver/blob/83335d4eff9694061409d889c73627a847f46d24/src/traffic_ctl/CtrlPrinters.cc#L345-L350
```cpp
// Build label and right-aligned duration
std::string label = std::string(status_icon(f.status)) + " " + fname;
if (!f.meta.plugin_name.empty()) {
label += " [plugin: " + f.meta.plugin_name + "]";
}
```
so the character following `ip_allow ` is `[`, which is not in the class. Found by
inspection, then confirmed by running the exact pattern the test passes:
```python
import re
pat = re.compile('ip_allow [plugin]') # exactly what the test passes
good = " * ip_allow ................ 12ms" # core task, no tag
bad = " * ip_allow [plugin: my_plugin] .... 12ms" # the regression it guards
for line in (good, bad):
print(bool(pat.search(line)))
```
Observed:
```
core task (want: no match) search=False ExcludesExpression -> PASS
wrongly tagged (want: MATCH) search=False ExcludesExpression -> PASS
```
Expected, the second case must fail. With `r'ip_allow.*\[plugin:'`:
```
core task (want: no match) search=False ExcludesExpression -> PASS
wrongly tagged (want: MATCH) search=True ExcludesExpression -> FAIL
```
The two positive assertions in the same file are already written correctly as
`r'\[plugin: '` (lines 130 and 167); this negative one was missed.
A sweep of all 502 files under `tests/gold_tests` on `master` found 12 other bracketed
matchers, all of them the intentional `[Uu]sing HTTP/?2` in the `h2` tests. This is the
only instance of the defect.
### Proposed change
```diff
--- a/tests/gold_tests/jsonrpc/config_reload_plugin_api.test.py
+++ b/tests/gold_tests/jsonrpc/config_reload_plugin_api.test.py
@@ -268,8 +268,8 @@
tr.Processes.Default.Env = ts.Env
tr.Processes.Default.ReturnCode = 0
-tr.Processes.Default.Streams.stdout = Testers.ExcludesExpression(
- 'ip_allow [plugin]', 'Core task ip_allow must not have [plugin] tag')
+tr.Processes.Default.Streams.stdout = Testers.ExcludesExpression(
+ r'ip_allow.*\[plugin:', 'Core task ip_allow must not have a [plugin: <name>] tag')
tr.StillRunningAfter = ts
```
`.*` rather than a literal space, because the label goes through `sanitize_label()` and a
dot fill sits between the task name and the duration, so the tag is not adjacent to the
name at every column width. Matching the `[plugin:` prefix rather than a full
`[plugin: <name>]` keeps the assertion independent of the plugin name.
No production code changes, no compatibility impact, nothing to backport beyond wherever
#13146 lands.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@trafficserver.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] tests: core-task plugin-tag assertion in config_reload_plugin_api cannot fail [trafficserver]
Posted by "mohak1 (via GitHub)" <gi...@apache.org>.
mohak1 commented on issue #13617:
URL: https://github.com/apache/trafficserver/issues/13617#issuecomment-6018147443
Hi @brbzull0, are you still planning to work on this issue? If not, I’d be happy to take it and submit the proposed test correction. Thanks!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@trafficserver.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] tests: core-task plugin-tag assertion in config_reload_plugin_api cannot fail [trafficserver]
Posted by "brbzull0 (via GitHub)" <gi...@apache.org>.
brbzull0 commented on issue #13617:
URL: https://github.com/apache/trafficserver/issues/13617#issuecomment-6361740233
@mohak1 thanks for the offer! I already have this about halfway done, and I'll open a PR soon. I'm just waiting on some related work to land first.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@trafficserver.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org