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