Skip to content

GH-4059: fix the conflicting sending/listening modes in the transport test suites (@tmorejon's work from #4506) - #4597

Merged
jeremydmiller merged 1 commit into
mainfrom
gh-4059-conflicting-mode-test-fixes
Sep 24, 2026
Merged

jeremydmiller merged 1 commit into
mainfrom
gh-4059-conflicting-mode-test-fixes

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

This is @tmorejon's work, from #4506, and the commit is authored by them.

Relates to #4059. It lands the 27 transport-test fixes from that PR, which are valuable independently of the warn-vs-reject question the core fix settled.

Background

@tmorejon opened #4506 on 2026-09-20 with a validator for #4059 that throws on a conflicting sending/listening mode. I later wrote #4582 without noticing #4506 existed — that is my mistake, and #4582 is the one that got merged. It warns instead, because a single Endpoint.Mode cannot express "send inline, receive durably", so rejecting refuses a configuration that is meaningful rather than mistaken.

But that disagreement was only ever about the core 5 files. The other 27 in #4506 are real misconfigurations either way, and #4582's warning now reports every one of them. So they are extracted here rather than lost with the closed PR.

What these are

Mostly a .SendInline() on a publish rule for an endpoint whose listener separately asked for UseDurableInbox() or ProcessInParallelWithNativeAcks() — whichever configuration block Wolverine applied last silently decided the mode for both directions.

The Redis dead letter tests are the ones worth reading, and the reason this is worth landing rather than dismissing as log noise: they were relying on the bug. Their listener needs Inline, because only an Inline listener takes RedisStreamListener.MoveToErrorsAsync — a buffered one dead-letters through TryBuildDeadLetterSender instead — and it was silently getting Inline from the SendInline() on the publishing side sharing Endpoint.Mode. They now say ProcessInline() outright, with a comment explaining why.

That is a genuine latent trap: had anyone "cleaned up" that SendInline(), those tests would have started failing for a reason nowhere near the change.

Verification

The remaining transports are covered by their own CI lanes here.

Closes #4506 in substance; that PR is closed with a pointer to this one and to #4582.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VDUrBeB4tTnKj4AExCS1nj

… test suites

Extracted from @tmorejon's #4506, which found these while building a validator for GH-4059 and is the
original work here. The core fix landed separately as #4582 with a WARNING rather than a rejection --
"send inline, receive durably" is a coherent thing to want that a single Endpoint.Mode cannot express --
but these 27 files are real misconfigurations either way, and #4582's warning now reports every one of
them.

Most are a `.SendInline()` on a publish rule for an endpoint whose listener separately asked for
UseDurableInbox() or ProcessInParallelWithNativeAcks(); whichever configuration block Wolverine applied
last silently decided the mode for both directions.

The Redis dead letter tests are the interesting ones, and the reason this is worth landing rather than
leaving as noise: they were RELYING on the bug. Their listener needs Inline, because only an Inline
listener takes RedisStreamListener.MoveToErrorsAsync -- a buffered one dead-letters through
TryBuildDeadLetterSender instead -- and it was silently getting that from the SendInline() on the
publishing side sharing Endpoint.Mode. They now say ProcessInline() outright.

Verified: Wolverine.Redis.Tests DeadLetterQueueTests 6 green, which is where these fixes overlap the
GH-4559 rewrite of disabled_dead_letter_queue_should_not_create_dead_letter_stream (#4579).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VDUrBeB4tTnKj4AExCS1nj
@jeremydmiller
jeremydmiller merged commit ec4053c into main Sep 24, 2026
43 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants