From 5073506aa737f98fb25c309ead85bc3bc0d3f184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20Tyczy=C5=84ski?= Date: Sat, 21 May 2022 11:12:04 +0200 Subject: [PATCH] Clean shutdown of statefulset integration tests --- .../statefulset/statefulset_test.go | 45 +++++++++---------- test/integration/statefulset/util.go | 17 +++---- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/test/integration/statefulset/statefulset_test.go b/test/integration/statefulset/statefulset_test.go index 675fb32760b..b450c06759c 100644 --- a/test/integration/statefulset/statefulset_test.go +++ b/test/integration/statefulset/statefulset_test.go @@ -37,6 +37,7 @@ import ( apiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/controller/statefulset" + "k8s.io/kubernetes/pkg/controlplane" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/test/integration/framework" ) @@ -49,10 +50,7 @@ const ( // TestVolumeTemplateNoopUpdate ensures embedded StatefulSet objects with embedded PersistentVolumes can be updated func TestVolumeTemplateNoopUpdate(t *testing.T) { // Start the server with default storage setup - server, err := apiservertesting.StartTestServer(t, apiservertesting.NewDefaultTestServerOptions(), nil, framework.SharedEtcd()) - if err != nil { - t.Fatal(err) - } + server := apiservertesting.StartTestServerOrDie(t, nil, nil, framework.SharedEtcd()) defer server.TearDownFn() c, err := dynamic.NewForConfig(server.ClientConfig) @@ -125,8 +123,8 @@ func TestVolumeTemplateNoopUpdate(t *testing.T) { func TestSpecReplicasChange(t *testing.T) { closeFn, rm, informers, c := scSetup(t) defer closeFn() - ns := framework.CreateTestingNamespace("test-spec-replicas-change", t) - defer framework.DeleteTestingNamespace(ns, t) + ns := framework.CreateNamespaceOrDie(c, "test-spec-replicas-change", t) + defer framework.DeleteNamespaceOrDie(c, ns, t) cancel := runControllerAndInformers(rm, informers) defer cancel() @@ -168,8 +166,8 @@ func TestSpecReplicasChange(t *testing.T) { func TestDeletingAndFailedPods(t *testing.T) { closeFn, rm, informers, c := scSetup(t) defer closeFn() - ns := framework.CreateTestingNamespace("test-deleting-and-failed-pods", t) - defer framework.DeleteTestingNamespace(ns, t) + ns := framework.CreateNamespaceOrDie(c, "test-deleting-and-failed-pods", t) + defer framework.DeleteNamespaceOrDie(c, ns, t) cancel := runControllerAndInformers(rm, informers) defer cancel() @@ -269,8 +267,8 @@ func TestStatefulSetAvailable(t *testing.T) { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StatefulSetMinReadySeconds, test.enabled)() closeFn, rm, informers, c := scSetup(t) defer closeFn() - ns := framework.CreateTestingNamespace("test-available-pods", t) - defer framework.DeleteTestingNamespace(ns, t) + ns := framework.CreateNamespaceOrDie(c, "test-available-pods", t) + defer framework.DeleteNamespaceOrDie(c, ns, t) cancel := runControllerAndInformers(rm, informers) defer cancel() @@ -358,31 +356,28 @@ func setPodsReadyCondition(t *testing.T, clientSet clientset.Interface, pods *v1 // add for issue: https://github.com/kubernetes/kubernetes/issues/108837 func TestStatefulSetStatusWithPodFail(t *testing.T) { limitedPodNumber := 2 - controlPlaneConfig := framework.NewIntegrationTestControlPlaneConfig() - controlPlaneConfig.GenericConfig.AdmissionControl = &fakePodFailAdmission{ - limitedPodNumber: limitedPodNumber, - } - _, s, closeFn := framework.RunAnAPIServer(controlPlaneConfig) + c, config, closeFn := framework.StartTestServer(t, framework.TestServerSetup{ + ModifyServerConfig: func(config *controlplane.Config) { + config.GenericConfig.AdmissionControl = &fakePodFailAdmission{ + limitedPodNumber: limitedPodNumber, + } + }, + }) defer closeFn() - config := restclient.Config{Host: s.URL} - c, err := clientset.NewForConfig(&config) - if err != nil { - t.Fatalf("Could not create clientset: %v", err) - } resyncPeriod := 12 * time.Hour - informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "statefulset-informers")), resyncPeriod) + informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "statefulset-informers")), resyncPeriod) ssc := statefulset.NewStatefulSetController( informers.Core().V1().Pods(), informers.Apps().V1().StatefulSets(), informers.Core().V1().PersistentVolumeClaims(), informers.Apps().V1().ControllerRevisions(), - clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "statefulset-controller")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "statefulset-controller")), ) - ns := framework.CreateTestingNamespace("test-pod-fail", t) - defer framework.DeleteTestingNamespace(ns, t) + ns := framework.CreateNamespaceOrDie(c, "test-pod-fail", t) + defer framework.DeleteNamespaceOrDie(c, ns, t) ctx, cancel := context.WithCancel(context.Background()) defer cancel() @@ -390,7 +385,7 @@ func TestStatefulSetStatusWithPodFail(t *testing.T) { go ssc.Run(ctx, 5) sts := newSTS("sts", ns.Name, 4) - _, err = c.AppsV1().StatefulSets(sts.Namespace).Create(context.TODO(), sts, metav1.CreateOptions{}) + _, err := c.AppsV1().StatefulSets(sts.Namespace).Create(context.TODO(), sts, metav1.CreateOptions{}) if err != nil { t.Fatalf("Could not create statefuleSet %s: %v", sts.Name, err) } diff --git a/test/integration/statefulset/util.go b/test/integration/statefulset/util.go index 1f81c289ac4..85ef679439c 100644 --- a/test/integration/statefulset/util.go +++ b/test/integration/statefulset/util.go @@ -35,6 +35,7 @@ import ( typedv1 "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/util/retry" + kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" api "k8s.io/kubernetes/pkg/apis/core" //svc "k8s.io/kubernetes/pkg/api/v1/service" @@ -159,27 +160,27 @@ func newStatefulSetPVC(name string) v1.PersistentVolumeClaim { } // scSetup sets up necessities for Statefulset integration test, including control plane, apiserver, informers, and clientset -func scSetup(t *testing.T) (framework.CloseFunc, *statefulset.StatefulSetController, informers.SharedInformerFactory, clientset.Interface) { - controlPlaneConfig := framework.NewIntegrationTestControlPlaneConfig() - _, s, closeFn := framework.RunAnAPIServer(controlPlaneConfig) +func scSetup(t *testing.T) (kubeapiservertesting.TearDownFunc, *statefulset.StatefulSetController, informers.SharedInformerFactory, clientset.Interface) { + // Disable ServiceAccount admission plugin as we don't have serviceaccount controller running. + server := kubeapiservertesting.StartTestServerOrDie(t, nil, []string{"--disable-admission-plugins=ServiceAccount"}, framework.SharedEtcd()) - config := restclient.Config{Host: s.URL} - clientSet, err := clientset.NewForConfig(&config) + config := restclient.CopyConfig(server.ClientConfig) + clientSet, err := clientset.NewForConfig(config) if err != nil { t.Fatalf("error in create clientset: %v", err) } resyncPeriod := 12 * time.Hour - informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "statefulset-informers")), resyncPeriod) + informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "statefulset-informers")), resyncPeriod) sc := statefulset.NewStatefulSetController( informers.Core().V1().Pods(), informers.Apps().V1().StatefulSets(), informers.Core().V1().PersistentVolumeClaims(), informers.Apps().V1().ControllerRevisions(), - clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "statefulset-controller")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "statefulset-controller")), ) - return closeFn, sc, informers, clientSet + return server.TearDownFn, sc, informers, clientSet } // Run STS controller and informers