diff --git a/test/e2e_node/topology_manager_test.go b/test/e2e_node/topology_manager_test.go index 83385015493..66eba9f9bf2 100644 --- a/test/e2e_node/topology_manager_test.go +++ b/test/e2e_node/topology_manager_test.go @@ -31,11 +31,9 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" - runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" - "k8s.io/kubernetes/pkg/kubelet/types" admissionapi "k8s.io/pod-security-admission/api" "k8s.io/kubernetes/test/e2e/framework" @@ -372,28 +370,6 @@ func runTopologyManagerPolicySuiteTests(ctx context.Context, f *framework.Framew runMultipleGuPods(ctx, f) } -// waitForAllContainerRemoval waits until all the containers on a given pod are really gone. -// This is needed by the e2e tests which involve exclusive resource allocation (cpu, topology manager; podresources; etc.) -// In these cases, we need to make sure the tests clean up after themselves to make sure each test runs in -// a pristine environment. The only way known so far to do that is to introduce this wait. -// Worth noting, however, that this makes the test runtime much bigger. -func waitForAllContainerRemoval(ctx context.Context, podName, podNS string) { - rs, _, err := getCRIClient() - framework.ExpectNoError(err) - gomega.Eventually(ctx, func(ctx context.Context) bool { - containers, err := rs.ListContainers(ctx, &runtimeapi.ContainerFilter{ - LabelSelector: map[string]string{ - types.KubernetesPodNameLabel: podName, - types.KubernetesPodNamespaceLabel: podNS, - }, - }) - if err != nil { - return false - } - return len(containers) == 0 - }, 2*time.Minute, 1*time.Second).Should(gomega.BeTrue()) -} - func runTopologyManagerPositiveTest(ctx context.Context, f *framework.Framework, numPods int, ctnAttrs, initCtnAttrs []tmCtnAttribute, envInfo *testEnvInfo) { podMap := make(map[string]*v1.Pod) diff --git a/test/e2e_node/util.go b/test/e2e_node/util.go index 311ca6cccac..0e644b9903b 100644 --- a/test/e2e_node/util.go +++ b/test/e2e_node/util.go @@ -41,6 +41,7 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/component-base/featuregate" internalapi "k8s.io/cri-api/pkg/apis" + runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" "k8s.io/klog/v2" kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1" kubeletpodresourcesv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" @@ -51,6 +52,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cri/remote" kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics" + "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util" "k8s.io/kubernetes/test/e2e/framework" @@ -437,3 +439,29 @@ func withFeatureGate(feature featuregate.Feature, desired bool) func() { utilfeature.DefaultMutableFeatureGate.Set(fmt.Sprintf("%s=%v", string(feature), current)) } } + +// waitForAllContainerRemoval waits until all the containers on a given pod are really gone. +// This is needed by the e2e tests which involve exclusive resource allocation (cpu, topology manager; podresources; etc.) +// In these cases, we need to make sure the tests clean up after themselves to make sure each test runs in +// a pristine environment. The only way known so far to do that is to introduce this wait. +// Worth noting, however, that this makes the test runtime much bigger. +func waitForAllContainerRemoval(ctx context.Context, podName, podNS string) { + rs, _, err := getCRIClient() + framework.ExpectNoError(err) + gomega.Eventually(ctx, func(ctx context.Context) error { + containers, err := rs.ListContainers(ctx, &runtimeapi.ContainerFilter{ + LabelSelector: map[string]string{ + types.KubernetesPodNameLabel: podName, + types.KubernetesPodNamespaceLabel: podNS, + }, + }) + if err != nil { + return fmt.Errorf("got error waiting for all containers to be removed from CRI: %v", err) + } + + if len(containers) > 0 { + return fmt.Errorf("expected all containers to be removed from CRI but %v containers still remain. Containers: %+v", len(containers), containers) + } + return nil + }, 2*time.Minute, 1*time.Second).Should(gomega.Succeed()) +}