diff --git a/pkg/api/persistentvolumeclaim/util.go b/pkg/api/persistentvolumeclaim/util.go index 3612881107c..2fbb207a32e 100644 --- a/pkg/api/persistentvolumeclaim/util.go +++ b/pkg/api/persistentvolumeclaim/util.go @@ -65,7 +65,6 @@ func dataSourceIsEnabled(pvcSpec *core.PersistentVolumeClaimSpec) bool { *pvcSpec.DataSource.APIGroup == "snapshot.storage.k8s.io" && utilfeature.DefaultFeatureGate.Enabled(features.VolumeSnapshotDataSource) { return true - } } return false diff --git a/pkg/apis/core/validation/validation_test.go b/pkg/apis/core/validation/validation_test.go index 4e4cf4dbdb6..66258259f5b 100644 --- a/pkg/apis/core/validation/validation_test.go +++ b/pkg/apis/core/validation/validation_test.go @@ -13333,3 +13333,48 @@ func TestAlphaVolumePVCDataSource(t *testing.T) { } } } + +func testDataSourceInSpec(name string, kind string, apiGroup string) *core.PersistentVolumeClaimSpec { + scName := "csi-plugin" + dataSourceInSpec := core.PersistentVolumeClaimSpec{ + AccessModes: []core.PersistentVolumeAccessMode{ + core.ReadOnlyMany, + }, + Resources: core.ResourceRequirements{ + Requests: core.ResourceList{ + core.ResourceName(core.ResourceStorage): resource.MustParse("10G"), + }, + }, + StorageClassName: &scName, + DataSource: &core.TypedLocalObjectReference{ + APIGroup: &apiGroup, + Kind: kind, + Name: name, + }, + } + + return &dataSourceInSpec +} + +func TestAlphaVolumeDataSource(t *testing.T) { + successTestCases := []core.PersistentVolumeClaimSpec{ + *testDataSourceInSpec("test_snapshot", "VolumeSnapshot", "snapshot.storage.k8s.io"), + *testDataSourceInSpec("test_pvc", "PersistentVolumeClaim", ""), + } + failedTestCases := []core.PersistentVolumeClaimSpec{ + *testDataSourceInSpec("", "VolumeSnapshot", "snapshot.storage.k8s.io"), + *testDataSourceInSpec("test_snapshot", "PersistentVolumeClaim", "snapshot.storage.k8s.io"), + *testDataSourceInSpec("test_snapshot", "VolumeSnapshot", "storage.k8s.io"), + } + + for _, tc := range successTestCases { + if errs := ValidatePersistentVolumeClaimSpec(&tc, field.NewPath("spec")); len(errs) != 0 { + t.Errorf("expected success: %v", errs) + } + } + for _, tc := range failedTestCases { + if errs := ValidatePersistentVolumeClaimSpec(&tc, field.NewPath("spec")); len(errs) == 0 { + t.Errorf("expected failure: %v", errs) + } + } +}