prefer error over bool, prefer Should(gomega.Succeed())

Signed-off-by: Jack Francis <jackfrancis@gmail.com>
This commit is contained in:
Jack Francis
2025-03-13 15:14:21 -07:00
parent d54ff7441e
commit 53499d97ee
5 changed files with 27 additions and 26 deletions

View File

@@ -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

View File

@@ -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
}

View File

@@ -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

View File

@@ -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 {

View File

@@ -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) {