diff --git a/test/e2e/node/gpu.go b/test/e2e/node/gpu.go index 65dbbb060ff..8855b77c645 100644 --- a/test/e2e/node/gpu.go +++ b/test/e2e/node/gpu.go @@ -18,6 +18,7 @@ package node import ( "context" + "fmt" "os" "regexp" "time" @@ -292,12 +293,11 @@ func SetupEnvironmentAndSkipIfNeeded(ctx context.Context, f *framework.Framework } } -func areGPUsAvailableOnAllSchedulableNodes(ctx context.Context, clientSet clientset.Interface) bool { +func areGPUsAvailableOnAllSchedulableNodes(ctx context.Context, clientSet clientset.Interface) error { framework.Logf("Getting list of Nodes from API server") nodeList, err := clientSet.CoreV1().Nodes().List(ctx, metav1.ListOptions{}) if err != nil { - framework.Logf("Unexpected error getting node list: %v", err) - return false + return fmt.Errorf("unexpected error getting node list: %w", err) } for _, node := range nodeList.Items { if node.Spec.Unschedulable { @@ -308,12 +308,11 @@ func areGPUsAvailableOnAllSchedulableNodes(ctx context.Context, clientSet client } framework.Logf("gpuResourceName %s", e2egpu.NVIDIAGPUResourceName) if val, ok := node.Status.Capacity[e2egpu.NVIDIAGPUResourceName]; !ok || val.Value() == 0 { - framework.Logf("Nvidia GPUs not available on Node: %q", node.Name) - return false + return fmt.Errorf("nvidia GPUs not available on Node: %q", node.Name) } } framework.Logf("Nvidia GPUs exist on all schedulable nodes") - return true + return nil } func logOSImages(ctx context.Context, f *framework.Framework) { @@ -389,9 +388,9 @@ func waitForGPUs(ctx context.Context, f *framework.Framework, namespace, name st // Wait for Nvidia GPUs to be available on nodes framework.Logf("Waiting for drivers to be installed and GPUs to be available in Node Capacity...") - gomega.Eventually(ctx, func(ctx context.Context) bool { + gomega.Eventually(ctx, func(ctx context.Context) error { return areGPUsAvailableOnAllSchedulableNodes(ctx, f.ClientSet) - }, driverInstallTimeout, time.Second).Should(gomega.BeTrueBecause("expected GPU resources to be available within the timout")) + }, driverInstallTimeout, time.Second).Should(gomega.Succeed()) } // StartJob starts a simple CUDA job that requests gpu and the specified number of completions diff --git a/test/e2e/storage/testsuites/volume_modify.go b/test/e2e/storage/testsuites/volume_modify.go index 9e412f09245..4e1c4214913 100644 --- a/test/e2e/storage/testsuites/volume_modify.go +++ b/test/e2e/storage/testsuites/volume_modify.go @@ -281,7 +281,7 @@ func SetPVCVACName(ctx context.Context, origPVC *v1.PersistentVolumeClaim, name patchedPVC, err = c.CoreV1().PersistentVolumeClaims(origPVC.Namespace).Patch(ctx, pvcName, types.JSONPatchType, patchBytes, metav1.PatchOptions{}) return err - }, timeout, modifyPollInterval).Should(gomega.BeNil()) + }, timeout, modifyPollInterval).Should(gomega.Succeed()) return patchedPVC } diff --git a/test/e2e/windows/eviction.go b/test/e2e/windows/eviction.go index 9531eae49e3..d308c3b645a 100644 --- a/test/e2e/windows/eviction.go +++ b/test/e2e/windows/eviction.go @@ -18,6 +18,7 @@ package windows import ( "context" + "fmt" "strconv" "strings" "time" @@ -176,21 +177,20 @@ var _ = sigDescribe(feature.Windows, "Eviction", framework.WithSerial(), framewo framework.ExpectNoError(err) framework.Logf("Waiting for pod2 to get evicted") - gomega.Eventually(ctx, func() bool { + gomega.Eventually(ctx, func() error { eventList, err := f.ClientSet.CoreV1().Events(f.Namespace.Name).List(ctx, metav1.ListOptions{}) if err != nil { - framework.Logf("Error getting events: %v", err) - return false + return fmt.Errorf("error getting events: %w", err) } for _, e := range eventList.Items { // Look for an event that shows FailedScheduling if e.Type == "Warning" && e.Reason == "Evicted" && strings.Contains(e.Message, "pod2") { framework.Logf("Found %+v event with message %+v", e.Reason, e.Message) - return true + return nil } } - return false - }, 10*time.Minute, 10*time.Second).Should(gomega.BeTrueBecause("Eviction Event was not found")) + return fmt.Errorf("did not find any FailedScheduling event for pod %s", pod2.ObjectMeta.Name) + }, 10*time.Minute, 10*time.Second).Should(gomega.Succeed()) ginkgo.By("Waiting for node.kubernetes.io/memory-pressure taint to be removed") // ensure e2e test framework catches the memory-pressure taint diff --git a/test/e2e/windows/memory_limits.go b/test/e2e/windows/memory_limits.go index e88efcf0d72..31df1a4dd8f 100644 --- a/test/e2e/windows/memory_limits.go +++ b/test/e2e/windows/memory_limits.go @@ -19,6 +19,7 @@ package windows import ( "context" "encoding/json" + "fmt" "time" kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1" @@ -162,21 +163,20 @@ func overrideAllocatableMemoryTest(ctx context.Context, f *framework.Framework, framework.Logf("Ensuring that pod %s fails to schedule", podName) failurePod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(ctx, failurePod, metav1.CreateOptions{}) framework.ExpectNoError(err) - gomega.Eventually(ctx, func() bool { + gomega.Eventually(ctx, func() error { eventList, err := f.ClientSet.CoreV1().Events(f.Namespace.Name).List(ctx, metav1.ListOptions{}) if err != nil { - framework.Logf("Error getting events: %v", err) - return false + return fmt.Errorf("error getting events: %w", err) } for _, e := range eventList.Items { // Look for an event that shows FailedScheduling if e.Type == "Warning" && e.Reason == "FailedScheduling" && e.InvolvedObject.Name == failurePod.ObjectMeta.Name { framework.Logf("Found %+v event with message %+v", e.Reason, e.Message) - return true + return nil } } - return false - }, 3*time.Minute, 10*time.Second).Should(gomega.BeTrueBecause("Expected %s pod to be failed scheduling", podName)) + return fmt.Errorf("did not find any FailedScheduling event for pod %s", failurePod.ObjectMeta.Name) + }, 3*time.Minute, 10*time.Second).Should(gomega.Succeed()) } func getNodeMemory(ctx context.Context, f *framework.Framework, node v1.Node) nodeMemory { diff --git a/test/e2e_node/util.go b/test/e2e_node/util.go index 471c4b69a7b..9c1bc8bd787 100644 --- a/test/e2e_node/util.go +++ b/test/e2e_node/util.go @@ -237,14 +237,16 @@ func waitForKubeletToStart(ctx context.Context, f *framework.Framework) { }, 2*time.Minute, 5*time.Second).Should(gomega.BeTrueBecause("expected kubelet to be in healthy state")) // Wait for the Kubelet to be ready. - gomega.Eventually(ctx, func(ctx context.Context) bool { + gomega.Eventually(ctx, func(ctx context.Context) error { nodes, err := e2enode.TotalReady(ctx, f.ClientSet) if err != nil { - framework.Logf("Error getting ready nodes: %v", err) - return false + return fmt.Errorf("error getting ready nodes: %w", err) } - return nodes == 1 - }, time.Minute, time.Second).Should(gomega.BeTrueBecause("expected kubelet to be in ready state")) + if nodes != 1 { + return fmt.Errorf("expected 1 ready node, got %d", nodes) + } + return nil + }, time.Minute, time.Second).Should(gomega.Succeed()) } func deleteStateFile(stateFileName string) {