93 lines
4.0 KiB
Go
93 lines
4.0 KiB
Go
/*
|
|
MIT License
|
|
|
|
Copyright (c) 2025 lerentis, https://git.uploadfilter24.eu/lerentis
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
package e2e
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"testing"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
|
|
"github.com/lerentis/bitwarden-crd-operator/test/utils"
|
|
)
|
|
|
|
var (
|
|
// Optional Environment Variables:
|
|
// - CERT_MANAGER_INSTALL_SKIP=true: Skips CertManager installation during test setup.
|
|
// These variables are useful if CertManager is already installed, avoiding
|
|
// re-installation and conflicts.
|
|
skipCertManagerInstall = os.Getenv("CERT_MANAGER_INSTALL_SKIP") == "true"
|
|
// isCertManagerAlreadyInstalled will be set true when CertManager CRDs be found on the cluster
|
|
isCertManagerAlreadyInstalled = false
|
|
|
|
// projectImage is the name of the image which will be build and loaded
|
|
// with the code source changes to be tested.
|
|
projectImage = "example.com/new:v0.0.1"
|
|
)
|
|
|
|
// TestE2E runs the end-to-end (e2e) test suite for the project. These tests execute in an isolated,
|
|
// temporary environment to validate project changes with the the purposed to be used in CI jobs.
|
|
// The default setup requires Kind, builds/loads the Manager Docker image locally, and installs
|
|
// CertManager.
|
|
func TestE2E(t *testing.T) {
|
|
RegisterFailHandler(Fail)
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "Starting new integration test suite\n")
|
|
RunSpecs(t, "e2e suite")
|
|
}
|
|
|
|
var _ = BeforeSuite(func() {
|
|
By("building the manager(Operator) image")
|
|
cmd := exec.Command("make", "docker-build", fmt.Sprintf("IMG=%s", projectImage))
|
|
_, err := utils.Run(cmd)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred(), "Failed to build the manager(Operator) image")
|
|
|
|
// TODO(user): If you want to change the e2e test vendor from Kind, ensure the image is
|
|
// built and available before running the tests. Also, remove the following block.
|
|
By("loading the manager(Operator) image on Kind")
|
|
err = utils.LoadImageToKindClusterWithName(projectImage)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred(), "Failed to load the manager(Operator) image into Kind")
|
|
|
|
// The tests-e2e are intended to run on a temporary cluster that is created and destroyed for testing.
|
|
// To prevent errors when tests run in environments with CertManager already installed,
|
|
// we check for its presence before execution.
|
|
// Setup CertManager before the suite if not skipped and if not already installed
|
|
if !skipCertManagerInstall {
|
|
By("checking if cert manager is installed already")
|
|
isCertManagerAlreadyInstalled = utils.IsCertManagerCRDsInstalled()
|
|
if !isCertManagerAlreadyInstalled {
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "Installing CertManager...\n")
|
|
Expect(utils.InstallCertManager()).To(Succeed(), "Failed to install CertManager")
|
|
} else {
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "WARNING: CertManager is already installed. Skipping installation...\n")
|
|
}
|
|
}
|
|
})
|
|
|
|
var _ = AfterSuite(func() {
|
|
// Teardown CertManager after the suite if not skipped and if it was not already installed
|
|
if !skipCertManagerInstall && !isCertManagerAlreadyInstalled {
|
|
_, _ = fmt.Fprintf(GinkgoWriter, "Uninstalling CertManager...\n")
|
|
utils.UninstallCertManager()
|
|
}
|
|
})
|