@@ -24,19 +24,13 @@ import (
2424 crdv1 "github.com/kubernetes-csi/external-snapshotter/v2/pkg/apis/volumesnapshot/v1beta1"
2525 "github.com/kubernetes-csi/external-snapshotter/v2/pkg/utils"
2626 v1 "k8s.io/api/core/v1"
27- storagev1beta1 "k8s.io/api/storage/v1beta1"
2827 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2928)
3029
3130var metaTimeNow = & metav1.Time {
3231 Time : time .Now (),
3332}
3433
35- var volumeErr = & storagev1beta1.VolumeError {
36- Time : * metaTimeNow ,
37- Message : "Failed to upload the snapshot" ,
38- }
39-
4034var emptyString = ""
4135
4236// Test single call to syncSnapshot and syncContent methods.
@@ -46,6 +40,7 @@ var emptyString = ""
4640// 3. Compare resulting contents and snapshots with expected contents and snapshots.
4741func TestSync (t * testing.T ) {
4842 size := int64 (1 )
43+ snapshotErr := newVolumeError ("Mock content error" )
4944 tests := []controllerTest {
5045 {
5146 // snapshot is bound to a non-existing content
@@ -459,6 +454,62 @@ func TestSync(t *testing.T) {
459454 expectSuccess : false ,
460455 test : testSyncContentError ,
461456 },
457+ {
458+ // Update Error in snapshot status based on content status
459+ name : "6-1 - update snapshot error status" ,
460+ initialContents : newContentArrayWithError ("content6-1" , "snapuid6-1" , "snap6-1" , "sid6-1" , validSecretClass , "" , "" , deletionPolicy , nil , nil , false , snapshotErr ),
461+ expectedContents : newContentArrayWithError ("content6-1" , "snapuid6-1" , "snap6-1" , "sid6-1" , validSecretClass , "" , "" , deletionPolicy , nil , nil , false , snapshotErr ),
462+ initialSnapshots : newSnapshotArray ("snap6-1" , "snapuid6-1" , "claim6-1" , "" , validSecretClass , "content6-1" , & False , nil , nil , nil , false , true , nil ),
463+ expectedSnapshots : newSnapshotArray ("snap6-1" , "snapuid6-1" , "claim6-1" , "" , validSecretClass , "content6-1" , & False , nil , nil , snapshotErr , false , true , nil ),
464+ initialClaims : newClaimArray ("claim6-1" , "pvc-uid6-1" , "1Gi" , "volume6-1" , v1 .ClaimBound , & classEmpty ),
465+ initialVolumes : newVolumeArray ("volume6-1" , "pv-uid6-1" , "pv-handle6-1" , "1Gi" , "pvc-uid6-1" , "claim6-1" , v1 .VolumeBound , v1 .PersistentVolumeReclaimDelete , classEmpty ),
466+ initialSecrets : []* v1.Secret {secret ()},
467+ errors : noerrors ,
468+ expectSuccess : true ,
469+ test : testUpdateSnapshotErrorStatus ,
470+ },
471+ {
472+ // Clear out Error in snapshot status if no Error in content status
473+ name : "6-2 - clear out snapshot error status" ,
474+ initialContents : newContentArray ("content6-2" , "snapuid6-2" , "snap6-2" , "sid6-2" , validSecretClass , "" , "" , deletionPolicy , nil , nil , false ),
475+ expectedContents : newContentArray ("content6-2" , "snapuid6-2" , "snap6-2" , "sid6-2" , validSecretClass , "" , "" , deletionPolicy , nil , nil , false ),
476+ initialSnapshots : newSnapshotArray ("snap6-2" , "snapuid6-2" , "claim6-2" , "" , validSecretClass , "content6-2" , & False , metaTimeNow , nil , snapshotErr , false , true , nil ),
477+ expectedSnapshots : newSnapshotArray ("snap6-2" , "snapuid6-2" , "claim6-2" , "" , validSecretClass , "content6-2" , & True , metaTimeNow , nil , nil , false , true , nil ),
478+ initialClaims : newClaimArray ("claim6-2" , "pvc-uid6-2" , "1Gi" , "volume6-2" , v1 .ClaimBound , & classEmpty ),
479+ initialVolumes : newVolumeArray ("volume6-2" , "pv-uid6-2" , "pv-handle6-2" , "1Gi" , "pvc-uid6-2" , "claim6-2" , v1 .VolumeBound , v1 .PersistentVolumeReclaimDelete , classEmpty ),
480+ initialSecrets : []* v1.Secret {secret ()},
481+ errors : noerrors ,
482+ expectSuccess : true ,
483+ test : testUpdateSnapshotErrorStatus ,
484+ },
485+ {
486+ // Snapshot status is nil, but gets updated to Error status based on content status
487+ name : "6-3 - nil snapshot status updated with error status from content" ,
488+ initialContents : newContentArrayWithError ("content6-3" , "snapuid6-3" , "snap6-3" , "sid6-3" , validSecretClass , "" , "" , deletionPolicy , nil , nil , false , snapshotErr ),
489+ expectedContents : newContentArrayWithError ("content6-3" , "snapuid6-3" , "snap6-3" , "sid6-3" , validSecretClass , "" , "" , deletionPolicy , nil , nil , false , snapshotErr ),
490+ initialSnapshots : newSnapshotArray ("snap6-3" , "snapuid6-3" , "claim6-3" , "" , validSecretClass , "" , nil , nil , nil , nil , true , true , nil ),
491+ expectedSnapshots : newSnapshotArray ("snap6-3" , "snapuid6-3" , "claim6-3" , "" , validSecretClass , "content6-3" , & False , nil , nil , snapshotErr , false , true , nil ),
492+ initialClaims : newClaimArray ("claim6-3" , "pvc-uid6-3" , "1Gi" , "volume6-3" , v1 .ClaimBound , & classEmpty ),
493+ initialVolumes : newVolumeArray ("volume6-3" , "pv-uid6-3" , "pv-handle6-3" , "1Gi" , "pvc-uid6-3" , "claim6-3" , v1 .VolumeBound , v1 .PersistentVolumeReclaimDelete , classEmpty ),
494+ initialSecrets : []* v1.Secret {secret ()},
495+ errors : noerrors ,
496+ expectSuccess : true ,
497+ test : testUpdateSnapshotErrorStatus ,
498+ },
499+ {
500+ // Snapshot status and content status are both nil, create snapshot status with boundContentName and readyToUse set to false
501+ name : "6-4 - both snapshot status and content status are nil" ,
502+ initialContents : newContentArrayNoStatus ("content6-4" , "snapuid6-4" , "snap6-4" , "sid6-4" , validSecretClass , "" , "" , deletionPolicy , nil , nil , false , false ),
503+ expectedContents : newContentArrayNoStatus ("content6-4" , "snapuid6-4" , "snap6-4" , "sid6-4" , validSecretClass , "" , "" , deletionPolicy , nil , nil , false , false ),
504+ initialSnapshots : newSnapshotArray ("snap6-4" , "snapuid6-4" , "claim6-4" , "" , validSecretClass , "" , nil , nil , nil , nil , true , false , nil ),
505+ expectedSnapshots : newSnapshotArray ("snap6-4" , "snapuid6-4" , "claim6-4" , "" , validSecretClass , "content6-4" , & False , nil , nil , nil , false , false , nil ),
506+ initialClaims : newClaimArray ("claim6-4" , "pvc-uid6-4" , "1Gi" , "volume6-3" , v1 .ClaimBound , & classEmpty ),
507+ initialVolumes : newVolumeArray ("volume6-4" , "pv-uid6-4" , "pv-handle6-4" , "1Gi" , "pvc-uid6-4" , "claim6-4" , v1 .VolumeBound , v1 .PersistentVolumeReclaimDelete , classEmpty ),
508+ initialSecrets : []* v1.Secret {secret ()},
509+ errors : noerrors ,
510+ expectSuccess : true ,
511+ test : testUpdateSnapshotErrorStatus ,
512+ },
462513 }
463514
464515 runSyncTests (t , tests , snapshotClasses )
0 commit comments