diff --git a/test/e2e/metrics_endpoint_test.go b/test/e2e/metrics_endpoint_test.go new file mode 100644 index 00000000..11522d2d --- /dev/null +++ b/test/e2e/metrics_endpoint_test.go @@ -0,0 +1,54 @@ +package e2e + +import ( + "bytes" + "os/exec" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("Catalogd Metrics Workflow Validation", func() { + + var ( + token string + namespace = "olmv1-system" + ) + + BeforeEach(func() { + By("Creating ClusterRoleBinding for catalogd metrics") + _, err := exec.Command("kubectl", "create", "clusterrolebinding", "catalogd-metrics-binding", + "--clusterrole=catalogd-metrics-reader", + "--serviceaccount="+namespace+":catalogd-controller-manager").CombinedOutput() + Expect(err).ToNot(HaveOccurred()) + + By("Generating a token for the catalogd-controller-manager ServiceAccount") + out, err := exec.Command("kubectl", "create", "token", "catalogd-controller-manager", "-n", + namespace).Output() + Expect(err).ToNot(HaveOccurred()) + token = string(bytes.TrimSpace(out)) + }) + + It("Validates the metrics endpoint", func() { + By("Calling the metrics endpoint directly using kubectl exec") + + podName := "curl-metrics" + metricsURL := "https://catalogd-service.olmv1-system.svc.cluster.local:7443/metrics" + + curlCmd := []string{ + "exec", podName, "-n", namespace, "--", "curl", "-v", "-k", + "-H", "Authorization: Bearer " + token, metricsURL, + } + cmd := exec.Command("kubectl", curlCmd...) + output, err := cmd.CombinedOutput() + Expect(err).ToNot(HaveOccurred()) + Expect(string(output)).To(ContainSubstring("200")) + Expect(string(output)).To(ContainSubstring("# HELP")) + }) + + AfterEach(func() { + By("Cleaning up resources") + _ = exec.Command("kubectl", "delete", "clusterrolebinding", "catalogd-metrics-binding", + "--ignore-not-found=true").Run() + }) +})