mirror of
https://github.com/stakater/Reloader.git
synced 2026-05-17 22:26:54 +00:00
96 lines
2.9 KiB
Go
96 lines
2.9 KiB
Go
package csi
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/rest"
|
|
csiclient "sigs.k8s.io/secrets-store-csi-driver/pkg/client/clientset/versioned"
|
|
|
|
"github.com/stakater/Reloader/test/e2e/utils"
|
|
)
|
|
|
|
var (
|
|
kubeClient kubernetes.Interface
|
|
csiClient csiclient.Interface
|
|
restConfig *rest.Config
|
|
testNamespace string
|
|
ctx context.Context
|
|
testEnv *utils.TestEnvironment
|
|
)
|
|
|
|
func TestCSI(t *testing.T) {
|
|
RegisterFailHandler(Fail)
|
|
RunSpecs(t, "CSI SecretProviderClass E2E Suite")
|
|
}
|
|
|
|
// SynchronizedBeforeSuite ensures only process 1 deploys Reloader.
|
|
// Process 1 also checks prerequisites (CSI driver, Vault) and calls Skip if
|
|
// they are not installed — Ginkgo propagates the skip to all processes.
|
|
var _ = SynchronizedBeforeSuite(
|
|
// Process 1 only: check prerequisites, create namespace, deploy Reloader.
|
|
func() []byte {
|
|
setupEnv, err := utils.SetupTestEnvironment(context.Background(), "reloader-csi-test")
|
|
Expect(err).NotTo(HaveOccurred(), "Failed to setup test environment")
|
|
// Ensure the namespace is deleted even if DeployAndWait fails, so
|
|
// orphaned namespaces don't accumulate on long-lived clusters.
|
|
DeferCleanup(setupEnv.CleanupOnFailure)
|
|
|
|
if !utils.IsCSIDriverInstalled(context.Background(), setupEnv.CSIClient) {
|
|
Skip("CSI secrets store driver not installed - skipping CSI suite")
|
|
}
|
|
if !utils.IsVaultProviderInstalled(context.Background(), setupEnv.KubeClient) {
|
|
Skip("Vault CSI provider not installed - skipping CSI suite")
|
|
}
|
|
|
|
Expect(setupEnv.DeployAndWait(map[string]string{
|
|
"reloader.reloadStrategy": "annotations",
|
|
"reloader.watchGlobally": "false",
|
|
"reloader.enableCSIIntegration": "true",
|
|
})).To(Succeed(), "Failed to deploy Reloader")
|
|
|
|
data, err := json.Marshal(utils.SharedEnvData{
|
|
Namespace: setupEnv.Namespace,
|
|
ReleaseName: setupEnv.ReleaseName,
|
|
})
|
|
Expect(err).NotTo(HaveOccurred())
|
|
return data
|
|
},
|
|
// All processes (including #1): connect to the shared environment.
|
|
func(data []byte) {
|
|
var shared utils.SharedEnvData
|
|
Expect(json.Unmarshal(data, &shared)).To(Succeed())
|
|
|
|
var err error
|
|
testEnv, err = utils.SetupSharedTestEnvironment(context.Background(), shared.Namespace, shared.ReleaseName)
|
|
Expect(err).NotTo(HaveOccurred(), "Failed to setup shared test environment")
|
|
|
|
kubeClient = testEnv.KubeClient
|
|
csiClient = testEnv.CSIClient
|
|
restConfig = testEnv.RestConfig
|
|
testNamespace = testEnv.Namespace
|
|
ctx = testEnv.Ctx
|
|
},
|
|
)
|
|
|
|
var _ = SynchronizedAfterSuite(
|
|
// All processes: cancel the per-process context.
|
|
func() {
|
|
if testEnv != nil {
|
|
testEnv.Cancel()
|
|
}
|
|
},
|
|
// Process 1 only (runs last): undeploy Reloader and delete namespace.
|
|
func() {
|
|
if testEnv != nil {
|
|
err := testEnv.Cleanup()
|
|
Expect(err).NotTo(HaveOccurred(), "Failed to cleanup test environment")
|
|
}
|
|
GinkgoWriter.Println("CSI E2E Suite cleanup complete")
|
|
},
|
|
)
|