Skip to content

feat: system test framework proposal#111

Open
SamBarker wants to merge 7 commits into
kroxylicious:mainfrom
SamBarker:feat/system-test-framework-proposal
Open

feat: system test framework proposal#111
SamBarker wants to merge 7 commits into
kroxylicious:mainfrom
SamBarker:feat/system-test-framework-proposal

Conversation

@SamBarker
Copy link
Copy Markdown
Member

@SamBarker SamBarker commented May 20, 2026

Summary

  • Introduces a layered abstraction for system tests separating test intent (ProxyScenario) from deployment mechanism (ProxyFixture) with convergence gating (ProxyHandle)
  • Organises tests into four modules by concern: systemtest-feature, systemtest-operator, systemtest-webhook, systemtest-installer
  • Defines Installer as the primary downstream extension point — downstream varies by installation method, not proxy deployment
  • Feature tests are portable across all fixtures (CRD, manifest, sidecar, standalone) with no Kubernetes dependency

Test plan

  • Review proposal for internal consistency across all sections
  • Verify the abstraction model covers existing system test patterns
  • Confirm TCK model works for downstream distributors

🤖 Generated with Claude Code

SamBarker added 6 commits May 14, 2026 16:17
Introduces layered abstractions (ProxyScenario, FilterSpec, ProxyFixture,
ProxyHandle) that separate test intent from deployment mechanism, enabling
deployment-agnostic feature tests and test-first development.

Assisted-by: Claude claude-opus-4-6 <noreply@anthropic.com>
Signed-off-by: Sam Barker <sam@quadrocket.co.uk>
OperatorCapability now models the operator's externally observable state
via generation-based reconciliation observation rather than the checksum
annotation. Tests that assert on specific operator mechanisms (e.g.
checksum change detection) observe resource state directly.

Assisted-by: Claude claude-opus-4-6 <noreply@anthropic.com>
Signed-off-by: Sam Barker <sam@quadrocket.co.uk>
OperatorCapability handles convergence and deployment agnosticism.
Tests that assert on specific resource state (e.g. checksum annotations)
use an injected KubernetesClient to observe resources directly, keeping
the two concerns separate.

Assisted-by: Claude claude-opus-4-6 <noreply@anthropic.com>
Signed-off-by: Sam Barker <sam@quadrocket.co.uk>
Three distinct test categories become separate modules with different
compile-time dependencies: systemtest-feature (no K8s dependency),
systemtest-operator (K8s client and CRD types), and systemtest-installer
(one test per install method). All three are TCK-consumable.

Installer is a public interface — the primary downstream extension
point. CrdProxyFixture replaces OperatorProxyFixture to reflect that
the fixture uses the CRD API, not the operator's internals.

Assisted-by: Claude claude-opus-4-6 <noreply@anthropic.com>
Signed-off-by: Sam Barker <sam@quadrocket.co.uk>
Fixture/installer composition is extension-internal, driven by system
properties. Installer tests use a single smoke test — the test does
not vary between installers, CI provides the matrix.

Assisted-by: Claude claude-opus-4-6 <noreply@anthropic.com>
Signed-off-by: Sam Barker <sam@quadrocket.co.uk>
- Summary now mentions all four test categories and the Installer
- "Three categories/modules" → "Four" throughout
- Add systemtest-webhook to TCK module list with description
- Feature test example: remove namespace parameter, use kafkaClient
- Tags section: clarify module boundaries as primary separation
- Rejected alternatives: @operator tag "ensures present", not "selects fixture"
- Webhook section: rewrite as two-module story (installer + behaviour)
- Affected projects: add systemtest-webhook module
- Fix grammar: "An CrdProxyFixture" → "A CrdProxyFixture"

Assisted-by: Claude claude-opus-4-6 <noreply@anthropic.com>
Signed-off-by: Sam Barker <sam@quadrocket.co.uk>
@SamBarker SamBarker requested a review from a team as a code owner May 20, 2026 04:01
Assisted-by: Claude claude-opus-4-6 <noreply@anthropic.com>
Signed-off-by: Sam Barker <sam@quadrocket.co.uk>
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.

1 participant