123 lines
3.6 KiB
Go
123 lines
3.6 KiB
Go
/*
|
|
Copyright 2024.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package e2e
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"time"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
|
|
"tutorial.kubebuilder.io/project/test/utils"
|
|
)
|
|
|
|
const namespace = "operator-test-system"
|
|
|
|
var _ = Describe("controller", Ordered, func() {
|
|
BeforeAll(func() {
|
|
By("installing prometheus operator")
|
|
Expect(utils.InstallPrometheusOperator()).To(Succeed())
|
|
|
|
By("installing the cert-manager")
|
|
Expect(utils.InstallCertManager()).To(Succeed())
|
|
|
|
By("creating manager namespace")
|
|
cmd := exec.Command("kubectl", "create", "ns", namespace)
|
|
_, _ = utils.Run(cmd)
|
|
})
|
|
|
|
AfterAll(func() {
|
|
By("uninstalling the Prometheus manager bundle")
|
|
utils.UninstallPrometheusOperator()
|
|
|
|
By("uninstalling the cert-manager bundle")
|
|
utils.UninstallCertManager()
|
|
|
|
By("removing manager namespace")
|
|
cmd := exec.Command("kubectl", "delete", "ns", namespace)
|
|
_, _ = utils.Run(cmd)
|
|
})
|
|
|
|
Context("Operator", func() {
|
|
It("should run successfully", func() {
|
|
var controllerPodName string
|
|
var err error
|
|
|
|
// projectimage stores the name of the image used in the example
|
|
var projectimage = "example.com/operator-test:v0.0.1"
|
|
|
|
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())
|
|
|
|
By("loading the the manager(Operator) image on Kind")
|
|
err = utils.LoadImageToKindClusterWithName(projectimage)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
By("installing CRDs")
|
|
cmd = exec.Command("make", "install")
|
|
_, err = utils.Run(cmd)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
By("deploying the controller-manager")
|
|
cmd = exec.Command("make", "deploy", fmt.Sprintf("IMG=%s", projectimage))
|
|
_, err = utils.Run(cmd)
|
|
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
|
|
By("validating that the controller-manager pod is running as expected")
|
|
verifyControllerUp := func() error {
|
|
// Get pod name
|
|
|
|
cmd = exec.Command("kubectl", "get",
|
|
"pods", "-l", "control-plane=controller-manager",
|
|
"-o", "go-template={{ range .items }}"+
|
|
"{{ if not .metadata.deletionTimestamp }}"+
|
|
"{{ .metadata.name }}"+
|
|
"{{ \"\\n\" }}{{ end }}{{ end }}",
|
|
"-n", namespace,
|
|
)
|
|
|
|
podOutput, err := utils.Run(cmd)
|
|
ExpectWithOffset(2, err).NotTo(HaveOccurred())
|
|
podNames := utils.GetNonEmptyLines(string(podOutput))
|
|
if len(podNames) != 1 {
|
|
return fmt.Errorf("expect 1 controller pods running, but got %d", len(podNames))
|
|
}
|
|
controllerPodName = podNames[0]
|
|
ExpectWithOffset(2, controllerPodName).Should(ContainSubstring("controller-manager"))
|
|
|
|
// Validate pod status
|
|
cmd = exec.Command("kubectl", "get",
|
|
"pods", controllerPodName, "-o", "jsonpath={.status.phase}",
|
|
"-n", namespace,
|
|
)
|
|
status, err := utils.Run(cmd)
|
|
ExpectWithOffset(2, err).NotTo(HaveOccurred())
|
|
if string(status) != "Running" {
|
|
return fmt.Errorf("controller pod in %s status", status)
|
|
}
|
|
return nil
|
|
}
|
|
EventuallyWithOffset(1, verifyControllerUp, time.Minute, time.Second).Should(Succeed())
|
|
|
|
})
|
|
})
|
|
})
|