mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
test: Move waitForAllContainerRemoval() into node e2e util
This is used across multiple tests, so let's move into the util file. Also, refactor it a bit to provide a better error message in case of a failure. Signed-off-by: David Porter <david@porter.me>
This commit is contained in:
parent
f97d14c6c8
commit
c2923c472d
@ -31,11 +31,9 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
|
|
||||||
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"
|
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/types"
|
|
||||||
admissionapi "k8s.io/pod-security-admission/api"
|
admissionapi "k8s.io/pod-security-admission/api"
|
||||||
|
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
@ -372,28 +370,6 @@ func runTopologyManagerPolicySuiteTests(ctx context.Context, f *framework.Framew
|
|||||||
runMultipleGuPods(ctx, f)
|
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) {
|
func runTopologyManagerPositiveTest(ctx context.Context, f *framework.Framework, numPods int, ctnAttrs, initCtnAttrs []tmCtnAttribute, envInfo *testEnvInfo) {
|
||||||
podMap := make(map[string]*v1.Pod)
|
podMap := make(map[string]*v1.Pod)
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ import (
|
|||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/component-base/featuregate"
|
"k8s.io/component-base/featuregate"
|
||||||
internalapi "k8s.io/cri-api/pkg/apis"
|
internalapi "k8s.io/cri-api/pkg/apis"
|
||||||
|
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1"
|
kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1"
|
||||||
kubeletpodresourcesv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1"
|
kubeletpodresourcesv1alpha1 "k8s.io/kubelet/pkg/apis/podresources/v1alpha1"
|
||||||
@ -51,6 +52,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/cm"
|
"k8s.io/kubernetes/pkg/kubelet/cm"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cri/remote"
|
"k8s.io/kubernetes/pkg/kubelet/cri/remote"
|
||||||
kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics"
|
kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics"
|
||||||
|
"k8s.io/kubernetes/pkg/kubelet/types"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/util"
|
"k8s.io/kubernetes/pkg/kubelet/util"
|
||||||
|
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"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))
|
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())
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user