c97571c4c4
kubebuilder init --domain ryuvia.com --repo git.ryuvia.com/niklas/terdut-operator (--license none, no per-file header boilerplate -- terdut-server's source carries none either). Go 1.26.0/controller-runtime v0.25.0/controller-tools v0.22.0, whatever the current kubebuilder CLI (v4.16.0) scaffolds -- not pinned back to terdut-server's go 1.25.9, since this is a separate module with its own toolchain. Verified locally: build, vet, fmt all clean; `make lint` (golangci-lint, fetched into bin/) 0 issues; `make test` (controller-gen + setup-envtest, fetched into bin/, downloads real envtest binaries from storage.googleapis.com) passes. Dropped kubebuilder's default .github/workflows/* -- this org runs on Gitea, not GitHub; ci.yaml (next commit) is the only CI this repo gets.
104 lines
3.5 KiB
Go
104 lines
3.5 KiB
Go
//go:build e2e
|
|
// +build e2e
|
|
|
|
package e2e
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"testing"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
|
|
"git.ryuvia.com/niklas/terdut-operator/test/utils"
|
|
)
|
|
|
|
var (
|
|
// managerImage is the manager image to be built and loaded for testing.
|
|
managerImage = "example.com/terdut-operator:v0.0.1"
|
|
// shouldCleanupCertManager tracks whether CertManager was installed by this suite.
|
|
shouldCleanupCertManager = false
|
|
)
|
|
|
|
// TestE2E runs the e2e test suite to validate the solution in an isolated environment.
|
|
// The default setup requires Kind and CertManager.
|
|
//
|
|
// To enable kubectl kuberc (use custom kubectl configurations), set: KUBECTL_KUBERC=true
|
|
// By default, kuberc is disabled to ensure consistent test behavior across different environments.
|
|
// To skip CertManager installation, set: CERT_MANAGER_INSTALL_SKIP=true
|
|
func TestE2E(t *testing.T) {
|
|
RegisterFailHandler(Fail)
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "Starting terdut-operator e2e test suite\n")
|
|
RunSpecs(t, "e2e suite")
|
|
}
|
|
|
|
var _ = BeforeSuite(func() {
|
|
By("building the manager image")
|
|
cmd := exec.Command("make", "docker-build", fmt.Sprintf("IMG=%s", managerImage))
|
|
_, err := utils.Run(cmd)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred(), "Failed to build the manager image")
|
|
|
|
// TODO(user): If you want to change the e2e test vendor from Kind,
|
|
// ensure the image is built and available, then remove the following block.
|
|
By("loading the manager image on Kind")
|
|
err = utils.LoadImageToKindClusterWithName(managerImage)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred(), "Failed to load the manager image into Kind")
|
|
|
|
configureKubectlKubeRC()
|
|
setupCertManager()
|
|
})
|
|
|
|
var _ = AfterSuite(func() {
|
|
teardownCertManager()
|
|
})
|
|
|
|
// Disable kubectl kuberc by default for test isolation.
|
|
// This prevents local kubectl configurations from affecting test behavior.
|
|
// To enable kuberc, set: KUBECTL_KUBERC=true
|
|
func configureKubectlKubeRC() {
|
|
if os.Getenv("KUBECTL_KUBERC") != "true" {
|
|
By("disabling kubectl kuberc for test isolation")
|
|
err := os.Setenv("KUBECTL_KUBERC", "false")
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred(), "Failed to disable kubectl kuberc")
|
|
_, _ = fmt.Fprintf(GinkgoWriter,
|
|
"kubectl kuberc disabled for consistent test behavior (override with KUBECTL_KUBERC=true)\n")
|
|
} else {
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "kubectl kuberc enabled (KUBECTL_KUBERC=true)\n")
|
|
}
|
|
}
|
|
|
|
// setupCertManager installs CertManager if needed for webhook tests.
|
|
// Skips installation if CERT_MANAGER_INSTALL_SKIP=true or if already present.
|
|
func setupCertManager() {
|
|
if os.Getenv("CERT_MANAGER_INSTALL_SKIP") == "true" {
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "Skipping CertManager installation (CERT_MANAGER_INSTALL_SKIP=true)\n")
|
|
return
|
|
}
|
|
|
|
By("checking if CertManager is already installed")
|
|
if utils.IsCertManagerCRDsInstalled() {
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "CertManager is already installed. Skipping installation.\n")
|
|
return
|
|
}
|
|
|
|
// Mark for cleanup before installation to handle interruptions and partial installs.
|
|
shouldCleanupCertManager = true
|
|
|
|
By("installing CertManager")
|
|
Expect(utils.InstallCertManager()).To(Succeed(), "Failed to install CertManager")
|
|
}
|
|
|
|
// teardownCertManager uninstalls CertManager if it was installed by setupCertManager.
|
|
// This ensures we only remove what we installed.
|
|
func teardownCertManager() {
|
|
if !shouldCleanupCertManager {
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "Skipping CertManager cleanup (not installed by this suite)\n")
|
|
return
|
|
}
|
|
|
|
By("uninstalling CertManager")
|
|
utils.UninstallCertManager()
|
|
}
|