From 63ddf4bf33f3409e5dd04d3eaba0c5c05a8061f7 Mon Sep 17 00:00:00 2001 From: zhifei92 Date: Mon, 23 Dec 2024 15:07:17 +0800 Subject: [PATCH] test: Add integration test for apiserver statusz endpoint --- .../controlplane/kube_apiserver_test.go | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/integration/controlplane/kube_apiserver_test.go b/test/integration/controlplane/kube_apiserver_test.go index 0585f5d4cbe..6b09cbfa5bf 100644 --- a/test/integration/controlplane/kube_apiserver_test.go +++ b/test/integration/controlplane/kube_apiserver_test.go @@ -160,6 +160,36 @@ Warning: This endpoint is not meant to be machine parseable, has no formatting c } } +func TestStatusz(t *testing.T) { + featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ComponentStatusz, true) + server := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.DefaultTestServerFlags(), framework.SharedEtcd()) + defer server.TearDownFn() + + client, err := kubernetes.NewForConfig(server.ClientConfig) + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + + res := client.CoreV1().RESTClient().Get().RequestURI("/statusz").Do(context.TODO()) + var status int + res.StatusCode(&status) + if status != http.StatusOK { + t.Fatalf("statusz/ should be healthy, got %v", status) + } + + expectedHeader := ` +kube-apiserver statusz +Warning: This endpoint is not meant to be machine parseable, has no formatting compatibility guarantees and is for debugging purposes only.` + + raw, err := res.Raw() + if err != nil { + t.Fatal(err) + } + if !bytes.HasPrefix(raw, []byte(expectedHeader)) { + t.Fatalf("Header mismatch!\nExpected:\n%s\n\nGot:\n%s", expectedHeader, string(raw)) + } +} + // TestOpenAPIDelegationChainPlumbing is a smoke test that checks for // the existence of some representative paths from the // apiextensions-server and the kube-aggregator server, both part of