From cff9ecd31775fc199c8a2bf180d5d25c8bc24bc9 Mon Sep 17 00:00:00 2001 From: Artyom Lukianov Date: Sun, 14 Feb 2021 17:12:56 +0200 Subject: [PATCH] e2e: fix memory manager tests Restart the kubelet and wait for hugepages resources to appear under the node. Signed-off-by: Artyom Lukianov --- test/e2e_node/memory_manager_test.go | 47 ++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/test/e2e_node/memory_manager_test.go b/test/e2e_node/memory_manager_test.go index c92a16f7eee..0d679e2a043 100644 --- a/test/e2e_node/memory_manager_test.go +++ b/test/e2e_node/memory_manager_test.go @@ -305,8 +305,51 @@ var _ = SIGDescribe("Memory Manager [Serial] [Feature:MemoryManager][NodeAlphaFe // allocate hugepages if *is2MiHugepagesSupported { - err := configureHugePages(hugepagesSize2M, 256) - framework.ExpectNoError(err) + hugepagesCount := 256 + ginkgo.By("Configuring hugepages") + gomega.Eventually(func() error { + if err := configureHugePages(hugepagesSize2M, hugepagesCount); err != nil { + return err + } + return nil + }, 30*time.Second, framework.Poll).Should(gomega.BeNil()) + + ginkgo.By("restarting kubelet to pick up pre-allocated hugepages") + // stop the kubelet and wait until the server will restart it automatically + stopKubelet() + // wait until the kubelet health check will fail + gomega.Eventually(func() bool { + return kubeletHealthCheck(kubeletHealthCheckURL) + }, time.Minute, time.Second).Should(gomega.BeFalse()) + // wait until the kubelet health check will pass + gomega.Eventually(func() bool { + return kubeletHealthCheck(kubeletHealthCheckURL) + }, 2*time.Minute, 10*time.Second).Should(gomega.BeTrue()) + + ginkgo.By("Waiting for hugepages resource to become available on the local node") + gomega.Eventually(func() error { + node, err := f.ClientSet.CoreV1().Nodes().Get(context.TODO(), framework.TestContext.NodeName, metav1.GetOptions{}) + if err != nil { + return err + } + + capacity, ok := node.Status.Capacity[v1.ResourceName(hugepagesResourceName2Mi)] + if !ok { + return fmt.Errorf("the node does not have the resource %s", hugepagesResourceName2Mi) + } + + size, succeed := capacity.AsInt64() + if !succeed { + return fmt.Errorf("failed to convert quantity to int64") + } + + // 512 Mb, the expected size in bytes + expectedSize := int64(hugepagesCount * hugepagesSize2M * 1024) + if size != expectedSize { + return fmt.Errorf("the actual size %d is different from the expected one %d", size, expectedSize) + } + return nil + }, time.Minute, framework.Poll).Should(gomega.BeNil()) } // get the old kubelet config