Skip to content

Commit 889dd4f

Browse files
authored
Tests: Improve Datavolume test resiliency (#3842)
* Datavolume tests: Improve test resiliency to avoid failure cascade if one Entry fails Some datavolume tests were not failure resilient enough, causing a cascade of failures if one of them failed under certain conditions. This commit aims to improve this by ensuring testSc is set to nil if one test fails. Signed-off-by: Alvaro Romero <[email protected]> * Tests: Include storage classes in teardown artifacts Signed-off-by: Alvaro Romero <[email protected]> * Tests: Include storage profiles in teardown artifacts Signed-off-by: Alvaro Romero <[email protected]> --------- Signed-off-by: Alvaro Romero <[email protected]>
1 parent 190816c commit 889dd4f

File tree

2 files changed

+52
-13
lines changed

2 files changed

+52
-13
lines changed

tests/datavolume_test.go

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2535,8 +2535,10 @@ var _ = Describe("[vendor:[email protected]][level:component]DataVolume tests",
25352535
testSc *storagev1.StorageClass
25362536
pvName string
25372537
)
2538-
2539-
testScName := "test-sc"
2538+
const (
2539+
testScName = "test-sc"
2540+
blankDVName = "blank-source"
2541+
)
25402542

25412543
updatePV := func(updateFunc func(*v1.PersistentVolume)) {
25422544
Eventually(func() error {
@@ -2551,7 +2553,7 @@ var _ = Describe("[vendor:[email protected]][level:component]DataVolume tests",
25512553
}
25522554

25532555
createPV := func(scName string) {
2554-
dv := utils.NewDataVolumeForBlankRawImage("blank-source", "106Mi")
2556+
dv := utils.NewDataVolumeForBlankRawImage(blankDVName, "106Mi")
25552557
dv, err := utils.CreateDataVolumeFromDefinition(f.CdiClient, f.Namespace.Name, dv)
25562558
Expect(err).ToNot(HaveOccurred())
25572559
f.ForceBindPvcIfDvIsWaitForFirstConsumer(dv)
@@ -2579,17 +2581,27 @@ var _ = Describe("[vendor:[email protected]][level:component]DataVolume tests",
25792581
var err error
25802582
By(fmt.Sprintf("creating storage class %s", scName))
25812583
sc := utils.DefaultStorageClass.DeepCopy()
2582-
sc.Name = scName
2583-
sc.ResourceVersion = ""
25842584
sc.Annotations[controller.AnnDefaultStorageClass] = "false"
2585+
sc.ObjectMeta = metav1.ObjectMeta{
2586+
Name: scName,
2587+
Labels: map[string]string{
2588+
"cdi.kubevirt.io/testing": "",
2589+
},
2590+
ResourceVersion: "",
2591+
Annotations: sc.Annotations,
2592+
}
25852593
testSc, err = f.K8sClient.StorageV1().StorageClasses().Create(context.TODO(), sc, metav1.CreateOptions{})
25862594
Expect(err).ToNot(HaveOccurred())
25872595
}
25882596

25892597
AfterEach(func() {
25902598
if testSc != nil {
2591-
err := f.K8sClient.StorageV1().StorageClasses().Delete(context.TODO(), testScName, metav1.DeleteOptions{})
2592-
Expect(err).ToNot(HaveOccurred())
2599+
By(fmt.Sprintf("deleting storage class %s", testSc.Name))
2600+
err := f.K8sClient.StorageV1().StorageClasses().Delete(context.TODO(), testSc.Name, metav1.DeleteOptions{})
2601+
Expect(err).To(Or(
2602+
Not(HaveOccurred()),
2603+
MatchError(k8serrors.IsNotFound, "k8serrors.IsNotFound"),
2604+
))
25932605
testSc = nil
25942606
}
25952607

@@ -2644,9 +2656,12 @@ var _ = Describe("[vendor:[email protected]][level:component]DataVolume tests",
26442656
Skip("Default storage class has no provisioner. The new storage class won't work")
26452657
}
26462658

2647-
By(fmt.Sprintf("verifying no storage class %s", testScName))
2648-
_, err := f.K8sClient.StorageV1().StorageClasses().Get(context.TODO(), scName, metav1.GetOptions{})
2649-
Expect(err).To(HaveOccurred())
2659+
var err error
2660+
if scName != "" {
2661+
By(fmt.Sprintf("verifying no storage class %s", scName))
2662+
_, err = f.K8sClient.StorageV1().StorageClasses().Get(context.TODO(), scName, metav1.GetOptions{})
2663+
Expect(err).To(MatchError(k8serrors.IsNotFound, "k8serrors.IsNotFound"))
2664+
}
26502665

26512666
By(fmt.Sprintf("creating new datavolume %s with StorageClassName %s", dataVolumeName, scName))
26522667
dataVolume := utils.NewDataVolumeWithHTTPImportAndStorageSpec(
@@ -2702,9 +2717,11 @@ var _ = Describe("[vendor:[email protected]][level:component]DataVolume tests",
27022717
Skip("Default storage class has no provisioner. The new storage class won't work")
27032718
}
27042719

2705-
By(fmt.Sprintf("verifying no storage class %s", testScName))
2706-
_, err := f.K8sClient.StorageV1().StorageClasses().Get(context.TODO(), scName, metav1.GetOptions{})
2707-
Expect(err).To(HaveOccurred())
2720+
if scName != "" {
2721+
By(fmt.Sprintf("verifying no storage class %s", scName))
2722+
_, err := f.K8sClient.StorageV1().StorageClasses().Get(context.TODO(), scName, metav1.GetOptions{})
2723+
Expect(err).To(MatchError(k8serrors.IsNotFound, "k8serrors.IsNotFound"))
2724+
}
27082725

27092726
dataVolume, err := utils.CreateDataVolumeFromDefinition(f.CdiClient, f.Namespace.Name, dvFunc(scName))
27102727
Expect(err).ToNot(HaveOccurred())

tests/reporter/kubernetes.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ func (r *KubernetesReporter) Dump(kubeCli *kubernetes.Clientset, cdiClient *cdiC
7676
r.logNodes(kubeCli)
7777
r.logPVCs(kubeCli)
7878
r.logPVs(kubeCli)
79+
r.logStorageClasses(kubeCli)
80+
r.logStorageProfiles(cdiClient)
7981
r.logPods(kubeCli)
8082
r.logServices(kubeCli)
8183
r.logEndpoints(kubeCli)
@@ -174,6 +176,26 @@ func (r *KubernetesReporter) logPVCs(kubeCli *kubernetes.Clientset) {
174176
r.logObjects(pvcs, "pvcs")
175177
}
176178

179+
func (r *KubernetesReporter) logStorageClasses(kubeCli *kubernetes.Clientset) {
180+
scs, err := kubeCli.StorageV1().StorageClasses().List(context.TODO(), metav1.ListOptions{})
181+
if err != nil {
182+
fmt.Fprintf(os.Stderr, "failed to fetch storage classes: %v\n", err)
183+
return
184+
}
185+
186+
r.logObjects(scs, "storageclasses")
187+
}
188+
189+
func (r *KubernetesReporter) logStorageProfiles(cdiClientset *cdiClientset.Clientset) {
190+
sps, err := cdiClientset.CdiV1beta1().StorageProfiles().List(context.TODO(), metav1.ListOptions{})
191+
if err != nil {
192+
fmt.Fprintf(os.Stderr, "failed to fetch storage profiles: %v\n", err)
193+
return
194+
}
195+
196+
r.logObjects(sps, "storageprofiles")
197+
}
198+
177199
func (r *KubernetesReporter) logDVs(cdiClientset *cdiClientset.Clientset) {
178200
dvs, err := cdiClientset.CdiV1beta1().DataVolumes(v1.NamespaceAll).List(context.TODO(), metav1.ListOptions{})
179201
if err != nil {

0 commit comments

Comments
 (0)