test(e2e): add nested-cluster e2e suite for sds-object#19
Merged
Conversation
Adds an end-to-end suite under e2e/, modeled on the sds-elastic and state-snapshotter suites: a storage-e2e nested cluster runs the documented ObjectStorageCluster / ObjectBucket lifecycle on a single shared cluster via Ginkgo Ordered specs. Coverage: - cluster create -> Ready (status phase/backend/endpoint) - bucket create -> Ready, standardised S3 credentials Secret (keys + ownership) - real S3 write/list/read round-trip through the generated credentials (mc Job) - admission guards: validating webhooks (single System cluster, unique bucket name) + CRD CEL rules (immutable type, Heavy<->elasticClusterRef, storage.class) - finalizer-driven deletion of bucket (+owned Secret) and cluster The profile is selectable via E2E_OSC_TYPE (default System: no StorageClass, no extra modules, cheapest reliable CI path); Lightweight/Full/Heavy gated on their required env knobs. storage-e2e is consumed as a pinned pseudo-version; sds-object/api via replace => ../api. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…n label Add a thin caller workflow that invokes the reusable deckhouse/storage-e2e/.github/workflows/e2e.yml pipeline, gated by the e2e/run PR label. Configured for this module: module_path=e2e, test_package=./tests/, cluster_config=e2e/tests/cluster_config.yml, cluster_provider=commander (each run creates a fresh cluster via the Commander API and tears it down). Documents the label trigger and Commander secrets in e2e/README.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…les)
Point the e2e caller at the new storage-e2e pipeline capabilities so the suite
actually runs against a Commander-created cluster:
- add tests/cluster_config.ci.yml whose sds-object modulePullOverride is
"${E2E_MODULE_IMAGE_TAG}" (resolved by the enable-modules step). It is a
separate file because the local-run config loader rejects ${...}; the literal
cluster_config.yml is kept for local runs.
- workflow: cluster_config -> the CI file, and module_image_tag: pr<N> so the
pipeline installs the image built for this PR.
- README: document the bootstrap -> enable-modules -> run-tests flow and the
prerequisite that the PR dev image (pr<N>) is built before e2e.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
What
Adds an end-to-end test suite under
e2e/, modeled on thesds-elasticandstate-snapshottersuites. Astorage-e2enested cluster exercises the documentedObjectStorageCluster/ObjectBucketlifecycle on a single shared cluster via GinkgoOrderedspecs (create → validation → delete, randomization off).Coverage
ObjectStorageCluster→ Ready (assertsstatus.phase/backend.type/endpoint.internal);ObjectBucket→ Ready (status.bucketName/secretRef).S3_*/AWS_*keys present + non-empty, and owned by theObjectBucket.mcwrite/list/read Job against the bucket endpoint using the generated credentials.Systemcluster, deny duplicate bucket name per cluster) + CRD CEL rules (immutablespec.type, Heavy↔elasticClusterRef,storage.classrequired for Lightweight/Full).Profiles
Selectable via
E2E_OSC_TYPE(default System — Garage on control-plane / hostPath, needs no StorageClass, no extra modules, cheapest reliable path).Lightweight/Full/Heavyare supported and gated on their required env knobs (E2E_STORAGE_CLASS,E2E_ELASTIC_CLUSTER_REF); enable the corresponding modules intests/cluster_config.ymlfirst (commented inline).Notes
storage-e2econsumed as a pinned pseudo-version;sds-object/apiviareplace => ../api.sds-elastic/state-snapshotter, where e2e runs are manual. Seee2e/README.mdfor run instructions and env knobs.go build ./...,go vet ./...,go test -c ./tests/,gofmtall clean. Not executed against a live cluster in this PR.