diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index c19978874c..3925c98bc9 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -82,6 +82,8 @@ jobs: kubectl get pods -n kyverno ${GITHUB_WORKSPACE}/scripts/verify-deployment.sh -n kyverno kyverno sleep 20 + echo ">>> Expose the Kyverno's service's metric server to the host" + kubectl port-forward svc/kyverno-svc -n kyverno 8000:8000 & echo ">>> Run Kyverno e2e test" make test-e2e kubectl delete -f ${GITHUB_WORKSPACE}/definitions/install.yaml diff --git a/Makefile b/Makefile index 486257c320..22e7a38426 100644 --- a/Makefile +++ b/Makefile @@ -171,6 +171,7 @@ code-cov-report: $(CODE_COVERAGE_FILE_TXT) # Test E2E test-e2e: $(eval export E2E="ok") + go test ./test/e2e/metrics -v go test ./test/e2e/mutate -v go test ./test/e2e/generate -v $(eval export E2E="") diff --git a/cmd/kyverno/main.go b/cmd/kyverno/main.go index 68e8490b04..c07adc6ab0 100755 --- a/cmd/kyverno/main.go +++ b/cmd/kyverno/main.go @@ -57,7 +57,6 @@ var ( profile bool disableMetricsExport bool - policyReport bool policyControllerResyncPeriod time.Duration setupLog = log.Log.WithName("setup") diff --git a/test/e2e/metrics/metrics_test.go b/test/e2e/metrics/metrics_test.go new file mode 100644 index 0000000000..edb416280e --- /dev/null +++ b/test/e2e/metrics/metrics_test.go @@ -0,0 +1,22 @@ +package metrics + +import ( + "github.com/kyverno/kyverno/test/e2e" + . "github.com/onsi/gomega" + "os" + "testing" +) + +func Test_MetricsServerAvailability(t *testing.T) { + RegisterTestingT(t) + if os.Getenv("E2E") == "" { + t.Skip("Skipping E2E Test") + } + requestObj := e2e.APIRequest{ + URL: "http://localhost:8000/metrics", + Type: "GET", + } + response, err := e2e.CallAPI(requestObj) + Expect(err).NotTo(HaveOccurred()) + Expect(response.StatusCode).To(Equal(200)) +} diff --git a/test/e2e/utils.go b/test/e2e/utils.go index b832756a80..df372ab352 100644 --- a/test/e2e/utils.go +++ b/test/e2e/utils.go @@ -2,6 +2,9 @@ package e2e import ( "context" + "fmt" + "io" + "net/http" "os" "time" @@ -18,6 +21,12 @@ type E2EClient struct { Client dynamic.Interface } +type APIRequest struct { + URL string + Type string + Body io.Reader +} + // NewE2EClient returns a new instance of E2EClient func NewE2EClient() (*E2EClient, error) { kubeconfig := os.Getenv("KUBECONFIG") @@ -124,3 +133,29 @@ func (e2e *E2EClient) CreateClusteredResourceYaml(gvr schema.GroupVersionResourc result, err := e2e.CreateClusteredResource(gvr, &resource) return result, err } + +func CallAPI(request APIRequest) (*http.Response, error) { + var response *http.Response + switch request.Type { + case "GET": + resp, err := http.Get(request.URL) + if err != nil { + return nil, fmt.Errorf("error occurred while calling %s: %w", request.URL, err) + } + response = resp + case "POST", "PUT", "DELETE", "PATCH": + req, err := http.NewRequest(string(request.Type), request.URL, request.Body) + if err != nil { + return nil, fmt.Errorf("error occurred while calling %s: %w", request.URL, err) + } + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, fmt.Errorf("error occurred while calling %s: %w", request.URL, err) + } + response = resp + default: + return nil, fmt.Errorf("error occurred while calling %s: wrong request type found", request.URL) + } + + return response, nil +}