Clean shutdown of evictions integration tests

This commit is contained in:
Wojciech Tyczyński 2022-05-21 18:02:53 +02:00
parent c0149f78d7
commit 2893ad3e5b

View File

@ -20,7 +20,6 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"net/http/httptest"
"reflect" "reflect"
"strings" "strings"
"sync" "sync"
@ -48,6 +47,7 @@ import (
"k8s.io/client-go/restmapper" "k8s.io/client-go/restmapper"
"k8s.io/client-go/scale" "k8s.io/client-go/scale"
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"
kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
"k8s.io/kubernetes/pkg/controller/disruption" "k8s.io/kubernetes/pkg/controller/disruption"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
) )
@ -61,23 +61,17 @@ const (
func TestConcurrentEvictionRequests(t *testing.T) { func TestConcurrentEvictionRequests(t *testing.T) {
podNameFormat := "test-pod-%d" podNameFormat := "test-pod-%d"
s, closeFn, rm, informers, _ := rmSetup(t) closeFn, rm, informers, _, clientSet := rmSetup(t)
defer closeFn() defer closeFn()
ns := framework.CreateTestingNamespace("concurrent-eviction-requests", t) ns := framework.CreateNamespaceOrDie(clientSet, "concurrent-eviction-requests", t)
defer framework.DeleteTestingNamespace(ns, t) defer framework.DeleteNamespaceOrDie(clientSet, ns, t)
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
informers.Start(ctx.Done()) informers.Start(ctx.Done())
go rm.Run(ctx) go rm.Run(ctx)
config := restclient.Config{Host: s.URL}
clientSet, err := clientset.NewForConfig(&config)
if err != nil {
t.Fatalf("Failed to create clientset: %v", err)
}
var gracePeriodSeconds int64 = 30 var gracePeriodSeconds int64 = 30
deleteOption := metav1.DeleteOptions{ deleteOption := metav1.DeleteOptions{
GracePeriodSeconds: &gracePeriodSeconds, GracePeriodSeconds: &gracePeriodSeconds,
@ -180,23 +174,17 @@ func TestConcurrentEvictionRequests(t *testing.T) {
// TestTerminalPodEviction ensures that PDB is not checked for terminal pods. // TestTerminalPodEviction ensures that PDB is not checked for terminal pods.
func TestTerminalPodEviction(t *testing.T) { func TestTerminalPodEviction(t *testing.T) {
s, closeFn, rm, informers, _ := rmSetup(t) closeFn, rm, informers, _, clientSet := rmSetup(t)
defer closeFn() defer closeFn()
ns := framework.CreateTestingNamespace("terminalpod-eviction", t) ns := framework.CreateNamespaceOrDie(clientSet, "terminalpod-eviction", t)
defer framework.DeleteTestingNamespace(ns, t) defer framework.DeleteNamespaceOrDie(clientSet, ns, t)
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
informers.Start(ctx.Done()) informers.Start(ctx.Done())
go rm.Run(ctx) go rm.Run(ctx)
config := restclient.Config{Host: s.URL}
clientSet, err := clientset.NewForConfig(&config)
if err != nil {
t.Fatalf("Failed to create clientset: %v", err)
}
var gracePeriodSeconds int64 = 30 var gracePeriodSeconds int64 = 30
deleteOption := metav1.DeleteOptions{ deleteOption := metav1.DeleteOptions{
GracePeriodSeconds: &gracePeriodSeconds, GracePeriodSeconds: &gracePeriodSeconds,
@ -259,7 +247,7 @@ func TestTerminalPodEviction(t *testing.T) {
// TestEvictionVersions ensures the eviction endpoint accepts and returns the correct API versions // TestEvictionVersions ensures the eviction endpoint accepts and returns the correct API versions
func TestEvictionVersions(t *testing.T) { func TestEvictionVersions(t *testing.T) {
s, closeFn, rm, informers, clientSet := rmSetup(t) closeFn, rm, informers, config, clientSet := rmSetup(t)
defer closeFn() defer closeFn()
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
@ -267,8 +255,6 @@ func TestEvictionVersions(t *testing.T) {
informers.Start(ctx.Done()) informers.Start(ctx.Done())
go rm.Run(ctx) go rm.Run(ctx)
config := restclient.Config{Host: s.URL}
ns := "default" ns := "default"
subresource := "eviction" subresource := "eviction"
pod := newPod("test") pod := newPod("test")
@ -276,7 +262,7 @@ func TestEvictionVersions(t *testing.T) {
t.Errorf("Failed to create pod: %v", err) t.Errorf("Failed to create pod: %v", err)
} }
dynamicClient, err := dynamic.NewForConfig(&config) dynamicClient, err := dynamic.NewForConfig(config)
if err != nil { if err != nil {
t.Fatalf("Failed to create clientset: %v", err) t.Fatalf("Failed to create clientset: %v", err)
} }
@ -420,25 +406,25 @@ func newV1Eviction(ns, evictionName string, deleteOption metav1.DeleteOptions) *
} }
} }
func rmSetup(t *testing.T) (*httptest.Server, framework.CloseFunc, *disruption.DisruptionController, informers.SharedInformerFactory, clientset.Interface) { func rmSetup(t *testing.T) (kubeapiservertesting.TearDownFunc, *disruption.DisruptionController, informers.SharedInformerFactory, *restclient.Config, clientset.Interface) {
controlPlaneConfig := framework.NewIntegrationTestControlPlaneConfig() // Disable ServiceAccount admission plugin as we don't have serviceaccount controller running.
_, s, closeFn := framework.RunAnAPIServer(controlPlaneConfig) server := kubeapiservertesting.StartTestServerOrDie(t, nil, []string{"--disable-admission-plugins=ServiceAccount"}, framework.SharedEtcd())
config := restclient.Config{Host: s.URL} config := restclient.CopyConfig(server.ClientConfig)
clientSet, err := clientset.NewForConfig(&config) clientSet, err := clientset.NewForConfig(config)
if err != nil { if err != nil {
t.Fatalf("Error in create clientset: %v", err) t.Fatalf("Error in create clientset: %v", err)
} }
resyncPeriod := 12 * time.Hour resyncPeriod := 12 * time.Hour
informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "pdb-informers")), resyncPeriod) informers := informers.NewSharedInformerFactory(clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "pdb-informers")), resyncPeriod)
client := clientset.NewForConfigOrDie(restclient.AddUserAgent(&config, "disruption-controller")) client := clientset.NewForConfigOrDie(restclient.AddUserAgent(config, "disruption-controller"))
discoveryClient := cacheddiscovery.NewMemCacheClient(clientSet.Discovery()) discoveryClient := cacheddiscovery.NewMemCacheClient(clientSet.Discovery())
mapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) mapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient)
scaleKindResolver := scale.NewDiscoveryScaleKindResolver(client.Discovery()) scaleKindResolver := scale.NewDiscoveryScaleKindResolver(client.Discovery())
scaleClient, err := scale.NewForConfig(&config, mapper, dynamic.LegacyAPIPathResolverFunc, scaleKindResolver) scaleClient, err := scale.NewForConfig(config, mapper, dynamic.LegacyAPIPathResolverFunc, scaleKindResolver)
if err != nil { if err != nil {
t.Fatalf("Error in create scaleClient: %v", err) t.Fatalf("Error in create scaleClient: %v", err)
} }
@ -455,7 +441,7 @@ func rmSetup(t *testing.T) (*httptest.Server, framework.CloseFunc, *disruption.D
scaleClient, scaleClient,
client.Discovery(), client.Discovery(),
) )
return s, closeFn, rm, informers, clientSet return server.TearDownFn, rm, informers, config, clientSet
} }
// wait for the podInformer to observe the pods. Call this function before // wait for the podInformer to observe the pods. Call this function before