Clean shutdown of metrics integration tests

This commit is contained in:
Wojciech Tyczyński 2022-05-21 08:50:21 +02:00
parent 284509f36e
commit 054c489d00

View File

@ -20,42 +20,31 @@ import (
"context"
"errors"
"fmt"
"io"
"net/http"
"net/http/httptest"
"runtime"
"testing"
"github.com/prometheus/common/model"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest"
"k8s.io/component-base/metrics/testutil"
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
"k8s.io/kubernetes/test/integration/framework"
)
func scrapeMetrics(s *httptest.Server) (testutil.Metrics, error) {
req, err := http.NewRequest("GET", s.URL+"/metrics", nil)
func scrapeMetrics(s *kubeapiservertesting.TestServer) (testutil.Metrics, error) {
client, err := clientset.NewForConfig(s.ClientConfig)
if err != nil {
return nil, fmt.Errorf("Unable to create http request: %v", err)
return nil, fmt.Errorf("couldn't create client")
}
client := &http.Client{}
resp, err := client.Do(req)
body, err := client.RESTClient().Get().AbsPath("metrics").DoRaw(context.TODO())
if err != nil {
return nil, fmt.Errorf("Unable to contact metrics endpoint of API server: %v", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("Non-200 response trying to scrape metrics from API Server: %v", resp)
return nil, fmt.Errorf("request failed: %v", err)
}
metrics := testutil.NewMetrics()
data, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("Unable to read response: %v", resp)
}
err = testutil.ParseMetrics(string(data), &metrics)
err = testutil.ParseMetrics(string(body), &metrics)
return metrics, err
}
@ -72,8 +61,8 @@ func TestAPIServerProcessMetrics(t *testing.T) {
t.Skipf("not supported on GOOS=%s", runtime.GOOS)
}
_, s, closeFn := framework.RunAnAPIServer(nil)
defer closeFn()
s := kubeapiservertesting.StartTestServerOrDie(t, nil, nil, framework.SharedEtcd())
defer s.TearDownFn()
metrics, err := scrapeMetrics(s)
if err != nil {
@ -88,12 +77,12 @@ func TestAPIServerProcessMetrics(t *testing.T) {
}
func TestAPIServerMetrics(t *testing.T) {
_, s, closeFn := framework.RunAnAPIServer(nil)
defer closeFn()
s := kubeapiservertesting.StartTestServerOrDie(t, nil, nil, framework.SharedEtcd())
defer s.TearDownFn()
// Make a request to the apiserver to ensure there's at least one data point
// for the metrics we're expecting -- otherwise, they won't be exported.
client := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Group: "", Version: "v1"}}})
client := clientset.NewForConfigOrDie(s.ClientConfig)
if _, err := client.CoreV1().Pods(metav1.NamespaceDefault).List(context.TODO(), metav1.ListOptions{}); err != nil {
t.Fatalf("unexpected error getting pods: %v", err)
}
@ -116,10 +105,13 @@ func TestAPIServerMetrics(t *testing.T) {
}
func TestAPIServerMetricsLabels(t *testing.T) {
_, s, closeFn := framework.RunAnAPIServer(nil)
defer closeFn()
// Disable ServiceAccount admission plugin as we don't have service account controller running.
s := kubeapiservertesting.StartTestServerOrDie(t, nil, []string{"--disable-admission-plugins=ServiceAccount"}, framework.SharedEtcd())
defer s.TearDownFn()
client, err := clientset.NewForConfig(&restclient.Config{Host: s.URL, QPS: -1})
clientConfig := restclient.CopyConfig(s.ClientConfig)
clientConfig.QPS = -1
client, err := clientset.NewForConfig(clientConfig)
if err != nil {
t.Fatalf("Error in create clientset: %v", err)
}
@ -266,10 +258,13 @@ func TestAPIServerMetricsPods(t *testing.T) {
}
}
_, server, closeFn := framework.RunAnAPIServer(framework.NewControlPlaneConfig())
defer closeFn()
// Disable ServiceAccount admission plugin as we don't have service account controller running.
server := kubeapiservertesting.StartTestServerOrDie(t, nil, []string{"--disable-admission-plugins=ServiceAccount"}, framework.SharedEtcd())
defer server.TearDownFn()
client, err := clientset.NewForConfig(&restclient.Config{Host: server.URL, QPS: -1})
clientConfig := restclient.CopyConfig(server.ClientConfig)
clientConfig.QPS = -1
client, err := clientset.NewForConfig(clientConfig)
if err != nil {
t.Fatalf("Error in create clientset: %v", err)
}
@ -372,10 +367,12 @@ func TestAPIServerMetricsNamespaces(t *testing.T) {
}
}
_, server, closeFn := framework.RunAnAPIServer(framework.NewControlPlaneConfig())
defer closeFn()
server := kubeapiservertesting.StartTestServerOrDie(t, nil, nil, framework.SharedEtcd())
defer server.TearDownFn()
client, err := clientset.NewForConfig(&restclient.Config{Host: server.URL, QPS: -1})
clientConfig := restclient.CopyConfig(server.ClientConfig)
clientConfig.QPS = -1
client, err := clientset.NewForConfig(clientConfig)
if err != nil {
t.Fatalf("Error in create clientset: %v", err)
}
@ -462,7 +459,7 @@ func TestAPIServerMetricsNamespaces(t *testing.T) {
}
}
func getSamples(s *httptest.Server) (model.Samples, error) {
func getSamples(s *kubeapiservertesting.TestServer) (model.Samples, error) {
metrics, err := scrapeMetrics(s)
if err != nil {
return nil, err