chore(test): upgrade the mock collector and drop the sw_fork_support seed workaround - #410
Merged
Merged
Conversation
The pinned mock-collector image dated from October 2022, 13 commits behind the tool's master. Move it to c6b91a0e, which carries the fix for the first-insert race in SegmentItems/LogItems (apache/skywalking-agent-test-tool#65): when two processes reported their first segment for the same service name concurrently, the collector silently dropped one while both reporters got HTTP 200. sw_fork_support worked around that race by seeding the service name with a parent-only /ping request and waiting for the collector to register it before triggering the concurrent parent/child reports. The collector no longer needs the help, so the endpoint, the seed step and the extra expected segment are gone and the test is back to asserting exactly the cross-fork trace it is about. The upgrade also picks up the validator changes made since 2022, one of which affected us. LogAssert now sorts both the expected and the actual logs by their body text before comparing them pairwise (apache/skywalking-agent-test-tool#59), and the sort uses the raw expected string, so a matcher such as `text: not null` participates as the literal "not null". sw_loguru matches its two logging-module records that way while the records themselves led with the default layout's timestamp, so they sorted first and their placeholders last, inverting the pairing. Pin a layout that leads with the logger name, which sorts after the placeholders and orders the two records deterministically, and reorder the expected entries to match; SWFormatter is still exercised. Its expected.data.yml is the only one in the tree with a non-empty logItems block, so no other test is affected. Also refresh CLAUDE.md: supported Python and grpcio floor, the current plugin list, the agent's fork/prefork lifecycle, and the plugin-test validation notes.
wu-sheng
force-pushed
the
chore/upgrade-mock-collector
branch
from
August 1, 2026 15:46
1e103ac to
d899034
Compare
There was a problem hiding this comment.
Pull request overview
This PR modernizes the plugin-test harness by upgrading the pinned mock collector image and removing a now-unnecessary sw_fork_support warm-up workaround that existed to avoid a first-insert race in older collectors. It also adjusts sw_loguru’s log reporter layout and expected log ordering to remain compatible with newer collector log-validation behavior, and updates contributor documentation accordingly.
Changes:
- Repin the mock collector image in
tests/plugin/docker-compose.base.ymlto a newer SHA. - Remove the
/pingseed route + polling logic fromsw_fork_support, and update its expected segments accordingly. - Stabilize
sw_logurulog assertions by pinningSW_AGENT_LOG_REPORTER_LAYOUTand reordering/updatinglogItemsexpectations; updateCLAUDE.mdwith current support/lifecycle notes.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
tests/plugin/web/sw_fork_support/test_fork_support.py |
Drops the /ping seed-and-poll workaround; relies on the normal prepare() call to hit /users before validation. |
tests/plugin/web/sw_fork_support/services/app.py |
Removes the /ping endpoint so the test asserts only the intended cross-fork /users trace. |
tests/plugin/web/sw_fork_support/expected.data.yml |
Removes the /ping segment and updates segmentSize accordingly. |
tests/plugin/docker-compose.base.yml |
Repins the mock collector image to the newer SHA referenced in the PR description. |
tests/plugin/data/sw_loguru/expected.data.yml |
Updates log expectations and documents the new order significance of logItems sorting by body text. |
tests/plugin/data/sw_loguru/docker-compose.yml |
Pins SW_AGENT_LOG_REPORTER_LAYOUT to keep reported log text ordering deterministic under the new collector behavior. |
CLAUDE.md |
Updates project documentation (Python/grpcio floors, fork lifecycle notes, validator behavior notes, plugin list count). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
wankai123
approved these changes
Aug 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
tests/plugin/docker-compose.base.ymlpinned the mock collector at7f20775e, built in October 2022 — 13 commits behind the tool's master.More importantly, that image contains the first-insert race in
SegmentItems/LogItemsfixed by apache/skywalking-agent-test-tool#65: when two processes report their first segment for the same service name concurrently, the collector silently discards one while both reporters receive HTTP 200.sw_fork_support(added in #409) hits this by design — its forked parent and child share a service name — and had to work around it by seeding the service name with a parent-only/pingrequest and polling/receiveDatauntil the collector had registered it.What
c6b91a0eaef16d427268e9806d5df65949e2a9bf, the current mock-collector image, which carries that fix./pingroute, the seed-and-poll step and the extra expected segment are gone, sosw_fork_supportis back to asserting exactly the cross-fork trace it exists for (parent entry/exit -> child entry with CrossProcess ref), plus the agent-restart log assertions.sw_loguru(see below).The one incompatibility, and why it is confined to
sw_loguruThe upgrade picks up every validator change made since 2022. Exactly one affected us:
LogAssertnow sorts both the expected and the actual logs by their body text before comparing them pairwise (apache/skywalking-agent-test-tool#59). The sort uses the raw expected string, so a matcher expression such astext: not nullparticipates in the sort as the literal"not null".sw_logurumatches its twologging-module records that way, while the records themselves led with the default layout's timestamp — so the real records sorted to the front and their placeholders to the back, inverting the pairing and failing every field. Verified by A/B: the same test passes with the old image pinned and fails with the new one.Fixed by pinning a log layout that leads with the logger name, which sorts after the placeholders and orders the two records deterministically (CRITICAL before ERROR), plus reordering the expected entries to match.
SWFormatteris still exercised; only the field order within the layout changes.sw_loguru/expected.data.ymlis the only expected file in the wholetests/plugin/tree with a non-emptylogItems:block, so no other test can be affected by that change.Note for future test authors: with this collector,
not nullplaceholders insidelogItemsare order-significant, because they sort as their literal string.Verification
tests/plugin/web(14 tests) andtests/plugin/data(13 test dirs) against the new image found no other drift, with every existingexpected.data.ymlunchanged.componentId,operationNameor a tag value in a passing expected file is rejected with HTTP 500.