[
https://issues.apache.org/jira/browse/CAMEL-26714?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26714 started by shashank.
----------------------------------------
> camel-sanitizer - exchange sanitizer module with rule R1 (the callback of a
> step is called exactly once) and a JUnit extension
> ------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26714
> URL: https://issues.apache.org/jira/browse/CAMEL-26714
> Project: Camel
> Issue Type: Improvement
> Components: camel-core
> Reporter: shashank
> Assignee: shashank
> Priority: Major
>
> Step 2 of the order of work of the exchange sanitizer design
> ({{design/exchange-sanitizer.adoc}}, CAMEL-26630), built on the step listener
> SPI of step 1 (CAMEL-26688).
> *What it adds*
> * A new module {{camel-sanitizer}} (next to {{camel-chaos}}) with a
> {{ContextServicePlugin}}, as chaos has. It installs only with profile
> {{dev}}, {{camel.sanitizer.enabled=true}}, or for a context built by a test
> marked by the JUnit extension, and never with profile {{prod}} (checked
> first). When it installs it logs a WARN that it is on.
> * Rule R1: each time the processor of a step is called (each attempt, also
> each redelivery), its callback must be called exactly once, and {{process}}
> must not throw. R1 reports, at the moment it happens:
> ** *completed twice*: the callback of a call is called a second time, with
> the stack and thread of the first and the second call;
> ** *threw before calling the callback*: {{process(exchange, callback)}}
> throws and the callback has not been called (also a processor that throws
> after it called its callback);
> ** *callback after the processor threw*.
> * The report in the log at WARN (ids, route, step, processor, threads and
> stacks; never bodies or headers), and a report when the context stops.
> * The options of the design that apply to R1 ({{camel.sanitizer.enabled}},
> {{checks}}, {{stackDepth}}, {{reportOnShutdown}}).
> * A JUnit extension, {{@CamelSanitizer}}, that turns the sanitizer on for the
> contexts a test builds and fails the test with the first violation and the
> full report, plus {{@ExpectSanitizerViolation}} for tests that break a rule
> on purpose. It uses only the JUnit Jupiter extension API, so it works with
> camel-test-junit5, camel-test-junit6 and plain camel-core tests, and lets
> users check their own processors and components.
> * The CI switch of the design.
> *Validation in the pull request, as the design asks:* R1 reports the bugs it
> was derived from (CAMEL-25095 and CAMEL-25122 as completed twice;
> CAMEL-26430, CAMEL-26445, CAMEL-26446, CAMEL-26461 and CAMEL-26464 as threw
> before calling the callback, and CAMEL-26446 also as a callback after the
> throw) when their fixes are reverted on main; tests with user processors that
> break the contract fail with a report naming their class; it reports nothing
> on the camel-core test suite of main; and a small TLA+ model of the
> sanitizer's own records shows no false report and no missed violation.
> Not in this issue (later steps of CAMEL-26630): R1 "still pending", the on
> completion listener and R2, R3, R4, the dev console and {{camel get
> sanitizer}}.
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)