Skip to content

Add camel-apicurio-registry component - #24844

Draft
carlesarnal wants to merge 2 commits into
apache:mainfrom
carlesarnal:camel-apicurio-registry-component
Draft

Add camel-apicurio-registry component#24844
carlesarnal wants to merge 2 commits into
apache:mainfrom
carlesarnal:camel-apicurio-registry-component

Conversation

@carlesarnal

Copy link
Copy Markdown

New component wrapping the Apicurio Registry v3 REST API via io.apicurio:apicurio-registry-java-sdk.

URI format: apicurio-registry:groupId/artifactId[?options]

Producer operations: createArtifact, updateArtifact, deleteArtifact, getArtifactContent, getArtifactMetadata, searchArtifacts, listVersions, createGroup, testCompatibility, validate.

Consumer polls for new artifact versions using a globalId watermark.

Auth: none, basic, oidc (OAuth2 client credentials).

Includes unit tests (mocked SDK), integration tests (Testcontainers with quay.io/apicurio/apicurio-registry:3.0.6), and AsciiDoc documentation.

Related: Apicurio/apicurio-registry#8671

New Camel component wrapping the Apicurio Registry v3 REST API
via the apicurio-registry-java-sdk.

Assisted by Claude, model: claude-opus-4-6
@github-actions

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@apupier

apupier commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

there are seveal modules to regen:

There are uncommitted changes
HEAD detached at pull/24844/merge
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   bom/camel-bom/pom.xml
	modified:   catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties
	modified:   core/camel-main/src/generated/resources/org/apache/camel/main/components.properties
	modified:   docs/components/modules/ROOT/nav.adoc
	modified:   dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
	modified:   dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
	modified:   dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
	modified:   dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
	modified:   dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
	modified:   dsl/camel-kamelet-main/src/generated/resources/camel-component-known-dependencies.properties

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/apicurio-registry.json
	docs/components/modules/ROOT/examples/json/apicurio-registry.json
	docs/components/modules/ROOT/pages/apicurio-registry-component.adoc
	dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ApicurioRegistryComponentBuilderFactory.java
	dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ApicurioRegistryEndpointBuilderFactory.java

@carlesarnal

Copy link
Copy Markdown
Author

there are seveal modules to regen:

There are uncommitted changes
HEAD detached at pull/24844/merge
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   bom/camel-bom/pom.xml
	modified:   catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties
	modified:   core/camel-main/src/generated/resources/org/apache/camel/main/components.properties
	modified:   docs/components/modules/ROOT/nav.adoc
	modified:   dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
	modified:   dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
	modified:   dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
	modified:   dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointHeaderBuilders.java
	modified:   dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
	modified:   dsl/camel-kamelet-main/src/generated/resources/camel-component-known-dependencies.properties

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/apicurio-registry.json
	docs/components/modules/ROOT/examples/json/apicurio-registry.json
	docs/components/modules/ROOT/pages/apicurio-registry-component.adoc
	dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ApicurioRegistryComponentBuilderFactory.java
	dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ApicurioRegistryEndpointBuilderFactory.java

Yes, this is in draft still, I'm still wrapping my head around a few things on how to structure different elements. Thanks!

Assisted by Claude, model: claude-opus-4-6
@carlesarnal
carlesarnal force-pushed the camel-apicurio-registry-component branch from 0780ba9 to 218e2c1 Compare July 20, 2026 06:30
@UriParam(label = "producer",
description = "Schema cache TTL in milliseconds for the validate operation. 0 means no caching.",
defaultValue = "300000")
private long cacheTtl = 300000;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot: cacheTtl is documented and exposed as a URI option but is never read in validate() (or elsewhere). Either wire it into SDK/client caching or remove the option to avoid misleading users.

AI-generated Bugbot inline comment on behalf of atiaomar1978-hub.


private final ApicurioRegistryEndpoint endpoint;
private final ApicurioRegistryConfiguration configuration;
private volatile Long lastSeenGlobalId;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot: lastSeenGlobalId is volatile in-memory state only. After a route/context restart the consumer will re-deliver every existing version. Consider documenting this clearly, seeding from a configurable initial globalId, or persisting the watermark (e.g. idempotent repository / header on first poll).

AI-generated Bugbot inline comment on behalf of atiaomar1978-hub.


List<SearchedVersion> versions = results.getVersions();
int count = 0;
for (SearchedVersion version : versions) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot: Versions are processed in API list order. If getVersions() is not strictly ascending by globalId, a newer version processed first can cause older versions with lower IDs to be skipped forever (globalId > lastSeenGlobalId). Sort by globalId before the loop (or track a set of delivered IDs).

AI-generated Bugbot inline comment on behalf of atiaomar1978-hub.

ApicurioRegistryConstants.HEADER_ARTIFACT_TYPE, configuration.getArtifactType(), String.class);
String name = message.getHeader(ApicurioRegistryConstants.HEADER_ARTIFACT_NAME, String.class);
String description = message.getHeader(ApicurioRegistryConstants.HEADER_ARTIFACT_DESCRIPTION, String.class);
String content = message.getBody(String.class);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot: message.getBody(String.class) will not carry binary artifact payloads (AVRO/Protobuf bytes). Consider InputStream / byte[] conversion via Camel type converter, Base64, or explicit content encoding — especially since docs/examples mention AVRO.

AI-generated Bugbot inline comment on behalf of atiaomar1978-hub.


InputStream content = getClient().groups().byGroupId(groupId).artifacts()
.byArtifactId(artifactId).versions().byVersionExpression(version).content().get();
message.setBody(content);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot: getArtifactContent sets an InputStream on the message body without documenting lifecycle. Downstream routes must close the stream or Camel may leak connections. Prefer converting to byte[]/String when feasible, or document stream ownership in the component page.

AI-generated Bugbot inline comment on behalf of atiaomar1978-hub.

.byArtifactId(artifactId).versions()
.post(createVersion, config -> config.queryParameters.dryRun = true);
message.setBody(true);
} catch (Exception e) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot: testCompatibility catches broad Exception and only exposes e.getMessage(). Network/auth failures are indistinguishable from schema incompatibility. Consider rethrowing non-validation failures or aligning with validate() + ApicurioRegistryValidationException.

AI-generated Bugbot inline comment on behalf of atiaomar1978-hub.

<version>4.22.0-SNAPSHOT</version>
</parent>

<artifactId>camel-apicurio-registry</artifactId>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot: apicurio-registry-sdk-version is local to this module. Camel convention is to declare third-party versions in parent/pom.xml dependencyManagement (and reference without version here) so all modules stay aligned.

AI-generated Bugbot inline comment on behalf of atiaomar1978-hub.

## See the License for the specific language governing permissions and
## limitations under the License.
## ---------------------------------------------------------------------------
apicurio.registry.container=quay.io/apicurio/apicurio-registry:3.3.0

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot: PR description mentions Testcontainers image quay.io/apicurio/apicurio-registry:3.0.6 but container.properties pins 3.3.0 (matching SDK 3.3.0). Please align docs/PR text with the actual image tag.

AI-generated Bugbot inline comment on behalf of atiaomar1978-hub.

@Override
protected void doStop() throws Exception {
super.doStop();
registryClient = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grok: doStop() nulls registryClient but does not close underlying HTTP resources if the SDK exposes a close/shutdown hook. Worth checking RegistryClientFactory lifecycle to avoid connection leaks in long-running apps.

AI-generated Grok inline comment on behalf of atiaomar1978-hub.

String HEADER_CONTENT_TYPE = "CamelApicurioRegistryContentType";

@Metadata(description = "Whether the operation is a dry run", javaType = "Boolean")
String HEADER_DRY_RUN = "CamelApicurioRegistryDryRun";

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grok: HEADER_DRY_RUN is declared but no producer operation reads it — dry run is hard-coded only in testCompatibility/validate. Either wire the header through or remove it from the public header contract.

AI-generated Grok inline comment on behalf of atiaomar1978-hub.

}

@InvokeOnHeader(ApicurioRegistryConstants.OPERATION_VALIDATE)
public void validate(Message message) throws Exception {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grok: validate and testCompatibility duplicate the same dry-run POST logic. Extracting a shared helper would reduce drift (today they differ in exception handling and response shape).

AI-generated Grok inline comment on behalf of atiaomar1978-hub.


class ApicurioRegistryProducerTest extends CamelTestSupport {

private final RegistryClient mockClient = mock(RegistryClient.class, org.mockito.Mockito.RETURNS_DEEP_STUBS);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grok: New tests use JUnit assertEquals/assertNotNull. Project convention prefers AssertJ (assertThat(...)) in new test code. Same applies to the private assertEquals helper in ApicurioRegistryConsumerIT.

AI-generated Grok inline comment on behalf of atiaomar1978-hub.

| `createGroup` | Create a new group.
| `testCompatibility` | Test schema compatibility (dry run). Returns `true`/`false` in the body.
| `validate` | Validate the message body against the artifact's rules (dry run). Throws `ApicurioRegistryValidationException` on failure when `failOnValidation=true`.
|===

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grok: Consumer section should mention first-start replay behavior (all existing versions are emitted once) and that delay defaults via ScheduledPollConsumer. Helps operators avoid surprise duplicate processing.

AI-generated Grok inline comment on behalf of atiaomar1978-hub.

String artifactId = null;
if (remaining != null && !remaining.isEmpty()) {
String[] parts = remaining.split("/", 2);
groupId = parts[0];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grok: URI parsing uses remaining.split("/", 2) — group IDs or artifact IDs containing / cannot be represented. If the registry allows such IDs, document the limitation or add URL encoding guidance.

AI-generated Grok inline comment on behalf of atiaomar1978-hub.

@atiaomar1978-hub

Copy link
Copy Markdown
Contributor

Grok code review

Verdict: Approve with improvements — well-structured new component with appropriate SDK delegation, generated metadata, and meaningful test coverage.


Architecture

ApicurioRegistryComponent (URI parse groupId/artifactId)
    └── ApicurioRegistryEndpoint (RegistryClient lifecycle, auth)
            ├── ApicurioRegistryProducer (HeaderSelectorProducer + @InvokeOnHeader ops)
            └── ApicurioRegistryConsumer (ScheduledPollConsumer, globalId watermark)

Good separation; SDK types stay at the boundary.


Strengths

  • Apicurio v3 SDK integration with basic + OIDC auth paths.
  • Ten producer operations cover common registry workflows.
  • Consumer fetchContent toggle is a nice UX knob.
  • ApicurioRegistryValidationException gives callers a typed failure mode.
  • Dedicated test-infra module with health-check wait strategy on /apis/registry/v3/system/info.
  • AsciiDoc page with Java/XML/YAML examples.

Follow-ups (see inline Grok threads)

# Area Suggestion
1 Client lifecycle Close/shutdown SDK client in doStop() if supported
2 Headers HEADER_DRY_RUN declared but unused
3 Duplication Merge validate / testCompatibility dry-run logic
4 Tests Prefer AssertJ over JUnit assertions in new tests
5 Docs Document consumer first-start replay + watermark semantics
6 URI parsing / in group/artifact IDs not supported — document limit

Test coverage

Class Focus
ApicurioRegistryComponentTest Endpoint creation
ApicurioRegistryProducerTest Mocked SDK ops
ApicurioRegistryConsumerTest Poll / watermark (mocked)
ApicurioRegistryProducerIT / ValidateIT / ConsumerIT Testcontainers end-to-end

Recommendation

Ready for committer review. Suggest reviewers with registry/cloud component experience (e.g. recent schema/registry contributors).

AI-generated Grok review on behalf of atiaomar1978-hub.

@atiaomar1978-hub

Copy link
Copy Markdown
Contributor

Bugbot review

Reviewed camel-apicurio-registry-component vs main (~3k LOC new component + test-infra).

Scope

New Preview component wrapping Apicurio Registry v3 REST API via apicurio-registry-java-sdk 3.3.0. Producer ops (CRUD, search, validate/compatibility dry-run), consumer polls new versions by globalId watermark, basic/OIDC auth, unit tests (mocked SDK), ITs (Testcontainers quay.io/apicurio/apicurio-registry:3.3.0), AsciiDoc docs.

Verified (looks good)

  • Clean Camel layout: Component / Endpoint / Producer / Consumer / Configuration / Constants.
  • HeaderSelectorProducer + @InvokeOnHeader for operation dispatch.
  • Secrets marked security = "secret" on username/password/clientSecret.
  • Test-infra follows Camel conventions (@InfraService, container.properties, quay.io image).
  • Good operation coverage in mocked producer tests + IT suite for create/search/validate/consumer.

Issues flagged (inline comments posted)

Severity Area Finding
Major cacheTtl option Documented URI param never used in code
Major Consumer watermark In-memory lastSeenGlobalId — restart replays all versions
Major Consumer ordering Unsorted version list can skip IDs if API order ≠ globalId order
Major Producer body getBody(String.class) unsuitable for binary AVRO/Protobuf payloads
Medium getArtifactContent Returns raw InputStream — leak risk without documented lifecycle
Medium testCompatibility Broad catch (Exception) masks network/auth errors
Medium Dependency mgmt SDK version local to module pom, not parent BOM
Minor Docs vs reality PR text says container 3.0.6, properties use 3.3.0

Bugbot verdict: Solid first component drop — approve with follow-ups above before Preview promotion. No security blockers (producer is trusted route config; consumer polls configured registry).

AI-generated Bugbot review on behalf of atiaomar1978-hub.

@atiaomar1978-hub

Copy link
Copy Markdown
Contributor

Bugbot — test coverage review

Assessed unit + IT coverage for camel-apicurio-registry (~890 LOC tests across 7 classes + test-infra).

Coverage matrix (producer operations)

Operation Unit (mock SDK) IT (Testcontainers)
createArtifact ✅ lifecycle IT
updateArtifact ✅ lifecycle IT
deleteArtifact ✅ lifecycle IT
getArtifactContent ✅ lifecycle IT
getArtifactMetadata ✅ lifecycle IT
listVersions ✅ lifecycle IT
createGroup ✅ lifecycle IT
searchArtifacts ❌ route only, no test ✅ dedicated IT
testCompatibility ⚠️ happy path only (assertNotNull body)
validate ⚠️ failOnValidation=false, header non-null only

Consumer coverage

Scenario Unit IT
Poll new versions (mock)
Skip already-seen globalId
Real registry poll ⚠️ single version, headers only
fetchContent=true
Second version after initial poll
Missing groupId/artifactId error

Config / auth

Area Covered?
URI parsing (group / group+artifact) ✅ ComponentTest
configuration.copy()
EndpointServiceLocation
Basic auth options binding ✅ (no live auth call)
OIDC auth
cacheTtl option ❌ (also unused in prod code)

Verdict

Adequate for Preview merge — strong lifecycle IT and good mocked coverage for core CRUD. Not yet comprehensive for a GA component: three producer ops lack unit tests, validation/compatibility negative paths are thin, consumer watermark/fetchContent gaps, and auth is config-only.

Priority additions before promotion:

  1. Unit tests for searchArtifacts, validate, testCompatibility
  2. Negative validate/compatibility ITs + ApicurioRegistryValidationException when failOnValidation=true
  3. Consumer IT: second version + optional fetchContent=true
  4. Consumer unit test for out-of-order globalId (guards known watermark risk)

AI-generated Bugbot test-coverage review on behalf of atiaomar1978-hub.

@atiaomar1978-hub

Copy link
Copy Markdown
Contributor

Grok — test coverage review

Verdict: Good foundation, gaps on edge cases and half the producer surface at unit level


What is well covered

  • ApicurioRegistryProducerIT.testFullArtifactLifecycle — best test in the PR; exercises createGroup → create → get meta/content → update → listVersions → delete against real Apicurio 3.3.0.
  • Mocked producer tests — verify SDK call graph for 8/10 operations + header-driven operation selection.
  • Mocked consumer tests — latch-based MockEndpoint.assertIsSatisfied with timeout (good Camel convention).
  • Test-infra module — reusable ApicurioRegistryService + health-checked container; ITs are not one-offs.
  • ComponentTest — URI parsing, config copy, service location (often skipped in new components — nice to see).

Gaps by risk

Risk Gap Suggested test
High No unit test for validate / testCompatibility Mock dry-run POST success/failure; assert headers/body/ApicurioRegistryValidationException
High Validate IT never asserts HEADER_VALIDATION_RESULT == true or failure paths Incompatible JSON schema + failOnValidation=true
Medium searchArtifacts route defined, never invoked in unit tests One mock test with name/groupId query params
Medium Consumer watermark edge cases untested Mock versions [globalId=2, globalId=1] — expect both or document sort requirement
Medium fetchContent consumer option Unit + IT: body is stream/content vs SearchedVersion metadata
Low OIDC auth path WireMock token endpoint or skip with @DisabledIf + documented manual QA
Low Header override resolution (resolveGroupId from header vs URI) Single producer test overriding URI path via header

Test quality notes

  • ITs use JUnit assertions throughout; project prefers AssertJ in new tests (non-blocking).
  • ApicurioRegistryConsumerIT uses a private JUnit assertEquals helper — migrate to AssertJ when touching file.
  • Assertions are often existence-only (assertNotNull) where value assertions would catch regressions (validation result, compatibility boolean).

Scorecard

Layer Score Notes
Unit breadth 7/10 8/10 ops + 2 consumer scenarios
Unit depth 5/10 Few header/error-path assertions
Integration 8/10 Strong lifecycle; weak validate/consumer multi-version
Infra 9/10 Proper test-infra split
Overall 7/10 Acceptable for Preview; tighten before stable

AI-generated Grok test-coverage review on behalf of atiaomar1978-hub.

from("direct:updateArtifact")
.to("apicurio-registry:testGroup/testArtifact?registryUrl=http://localhost:8080/apis/registry/v3&operation=updateArtifact");

from("direct:searchArtifacts")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot (test coverage): Route for searchArtifacts is wired in createRouteBuilder() but there is no @Test exercising it. Eight of ten producer ops have unit tests; searchArtifacts, testCompatibility, and validate are missing at unit level.

AI-generated Bugbot test-coverage comment on behalf of atiaomar1978-hub.

}

@Test
void testPollNewVersions() throws Exception {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot (test coverage): Consumer tests cover happy-path polling but not: (1) fetchContent=true body vs metadata, (2) missing groupId/artifactId IllegalArgumentException, (3) out-of-order globalId list (regression for watermark bug). Recommend at least one test per gap.

AI-generated Bugbot test-coverage comment on behalf of atiaomar1978-hub.

}

@Test
void testValidateCompatibleContent() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot (test coverage): validate IT only checks header is non-null with failOnValidation=false. Missing: assert HEADER_VALIDATION_RESULT=true, incompatible content → false + error header, and failOnValidation=trueApicurioRegistryValidationException.

AI-generated Bugbot test-coverage comment on behalf of atiaomar1978-hub.

Map<String, Object> groupHeaders = new HashMap<>();
groupHeaders.put(ApicurioRegistryConstants.HEADER_OPERATION, ApicurioRegistryConstants.OPERATION_CREATE_GROUP);
groupHeaders.put(ApicurioRegistryConstants.HEADER_GROUP_ID, groupId);
template.request("direct:createForConsumer", exchange -> exchange.getIn().setHeaders(groupHeaders));

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot (test coverage): IT asserts first consumed message headers only. No coverage for: publishing a second version and verifying exactly one new exchange, fetchContent=true, or consumer watermark/idempotency across polls.

AI-generated Bugbot test-coverage comment on behalf of atiaomar1978-hub.

}

@Test
void testEndpointWithAuthOptions() throws Exception {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bugbot (test coverage): Auth options tested for basic config binding only. authType=oidc (+ token endpoint / client credentials) and actual authenticated SDK client creation are untested (unit or IT).

AI-generated Bugbot test-coverage comment on behalf of atiaomar1978-hub.

protected RoutesBuilder createRouteBuilder() {
return new RouteBuilder() {
@Override
public void configure() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grok (test coverage): testFullArtifactLifecycle is excellent end-to-end coverage (7 ops in one flow). Consider splitting failure-path tests: delete missing artifact, update before create, invalid ifExists value.

AI-generated Grok test-coverage comment on behalf of atiaomar1978-hub.

endpoint.setRegistryClient(mockClient);
}

@Test

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grok (test coverage): Mocked producer tests verify SDK delegation but not header propagation (ifExists, contentType, version, URI path overrides via headers). One parameterized test per header family would tighten regression safety.

AI-generated Grok test-coverage comment on behalf of atiaomar1978-hub.


Exchange result = template.request("direct:testCompatibility", exchange -> {
exchange.getIn().setBody(compatibleSchema);
});

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grok (test coverage): testTestCompatibility only asserts body non-null — does not assert true/false or HEADER_VALIDATION_ERRORS on incompatible schema. Pair with a negative case mirroring validate.

AI-generated Grok test-coverage comment on behalf of atiaomar1978-hub.

@davsclaus

Copy link
Copy Markdown
Contributor

okay so main is now ready for 4.23.0-SNAPSHOT and this PR needs to be rebased on top and update its versions

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants