mirror of
https://github.com/kairos-io/osbuilder.git
synced 2025-07-31 07:15:12 +00:00
115 lines
3.4 KiB
Go
115 lines
3.4 KiB
Go
package e2e_test
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os/exec"
|
|
"strings"
|
|
"time"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
kubectl "github.com/rancher-sandbox/ele-testhelpers/kubectl"
|
|
)
|
|
|
|
var _ = Describe("ISO build test", func() {
|
|
//k := kubectl.New()
|
|
Context("registration", func() {
|
|
|
|
AfterEach(func() {
|
|
kubectl.New().Delete("osartifacts", "-n", "default", "hello-kairos")
|
|
})
|
|
|
|
It("creates a simple iso", func() {
|
|
err := kubectl.Apply("", "../../tests/fixtures/simple.yaml")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
itHasTheCorrectImage()
|
|
itHasTheCorrectLabels()
|
|
itCopiesTheArtifacts()
|
|
|
|
By("deleting the custom resource", func() {
|
|
err = kubectl.New().Delete("osartifacts", "-n", "default", "hello-kairos")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
})
|
|
|
|
itCleansUpRoleBindings()
|
|
itDeletesTheArtifacts()
|
|
})
|
|
})
|
|
})
|
|
|
|
func itHasTheCorrectImage() {
|
|
Eventually(func() string {
|
|
b, _ := kubectl.GetData("default", "osartifacts", "hello-kairos", "jsonpath={.spec.imageName}")
|
|
fmt.Printf("looking for image core-opensuse:latest = %+v\n", string(b))
|
|
return string(b)
|
|
}, 2*time.Minute, 2*time.Second).Should(Equal("quay.io/kairos/core-opensuse:latest"))
|
|
}
|
|
|
|
func itHasTheCorrectLabels() {
|
|
Eventually(func() string {
|
|
b, _ := kubectl.GetData("default", "jobs", "hello-kairos", "jsonpath={.spec.template.metadata.labels.osbuild}")
|
|
fmt.Printf("looking for label workloadhello-kairos = %+v\n", string(b))
|
|
return string(b)
|
|
}, 2*time.Minute, 2*time.Second).Should(Equal("workloadhello-kairos"))
|
|
}
|
|
|
|
func itCopiesTheArtifacts() {
|
|
nginxNamespace := "osartifactbuilder-operator-system"
|
|
Eventually(func() string {
|
|
podName := strings.TrimSpace(findPodsWithLabel(nginxNamespace, "app.kubernetes.io/name=osbuilder-nginx"))
|
|
|
|
out, _ := kubectl.RunCommandWithOutput(nginxNamespace, podName, "ls /usr/share/nginx/html")
|
|
|
|
return out
|
|
}, 15*time.Minute, 2*time.Second).Should(MatchRegexp("hello-kairos.iso"))
|
|
}
|
|
|
|
func itCleansUpRoleBindings() {
|
|
nginxNamespace := "osartifactbuilder-operator-system"
|
|
Eventually(func() string {
|
|
rb := findRoleBindings(nginxNamespace)
|
|
|
|
return rb
|
|
}, 3*time.Minute, 2*time.Second).ShouldNot(MatchRegexp("hello-kairos"))
|
|
}
|
|
|
|
func itDeletesTheArtifacts() {
|
|
nginxNamespace := "osartifactbuilder-operator-system"
|
|
Eventually(func() string {
|
|
podName := findPodsWithLabel(nginxNamespace, "app.kubernetes.io/name=osbuilder-nginx")
|
|
|
|
out, err := kubectl.RunCommandWithOutput(nginxNamespace, podName, "ls /usr/share/nginx/html")
|
|
Expect(err).ToNot(HaveOccurred(), out)
|
|
|
|
return out
|
|
}, 3*time.Minute, 2*time.Second).ShouldNot(MatchRegexp("hello-kairos.iso"))
|
|
}
|
|
|
|
func findPodsWithLabel(namespace, label string) string {
|
|
kubectlCommand := fmt.Sprintf("kubectl get pods -n %s -l %s --no-headers -o custom-columns=\":metadata.name\" | head -n1", namespace, label)
|
|
cmd := exec.Command("bash", "-c", kubectlCommand)
|
|
var out bytes.Buffer
|
|
var stderr bytes.Buffer
|
|
cmd.Stdout = &out
|
|
cmd.Stderr = &stderr
|
|
err := cmd.Run()
|
|
Expect(err).ToNot(HaveOccurred(), stderr.String())
|
|
|
|
return strings.TrimSpace(out.String())
|
|
}
|
|
|
|
func findRoleBindings(namespace string) string {
|
|
kubectlCommand := fmt.Sprintf("kubectl get rolebindings -n %s --no-headers -o custom-columns=\":metadata.name\"", namespace)
|
|
cmd := exec.Command("bash", "-c", kubectlCommand)
|
|
var out bytes.Buffer
|
|
var stderr bytes.Buffer
|
|
cmd.Stdout = &out
|
|
cmd.Stderr = &stderr
|
|
err := cmd.Run()
|
|
Expect(err).ToNot(HaveOccurred(), stderr.String())
|
|
|
|
return strings.TrimSpace(out.String())
|
|
}
|