diff --git a/test/integration/controlplane/kube_apiserver_test.go b/test/integration/controlplane/kube_apiserver_test.go index 70148673e3e..0585f5d4cbe 100644 --- a/test/integration/controlplane/kube_apiserver_test.go +++ b/test/integration/controlplane/kube_apiserver_test.go @@ -38,7 +38,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/wait" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/kubernetes" + featuregatetesting "k8s.io/component-base/featuregate/testing" + "k8s.io/component-base/zpages/features" "k8s.io/kube-aggregator/pkg/apis/apiregistration" "k8s.io/kube-openapi/pkg/validation/spec" kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" @@ -127,6 +130,36 @@ func TestLivezAndReadyz(t *testing.T) { } } +func TestFlagz(t *testing.T) { + featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ComponentFlagz, 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("/flagz").Do(context.TODO()) + var status int + res.StatusCode(&status) + if status != http.StatusOK { + t.Fatalf("flagz/ should be healthy, got %v", status) + } + + expectedHeader := ` +kube-apiserver flags +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