mirror of
https://github.com/optim-enterprises-bv/kubernetes.git
synced 2025-11-02 19:28:16 +00:00
Merge pull request #77703 from ddebroy/inline-mig-1
API changes to support migration of inline in-tree volumes to CSI
This commit is contained in:
@@ -426,6 +426,147 @@ func TestValidatePersistentVolumes(t *testing.T) {
|
||||
|
||||
}
|
||||
|
||||
func TestValidatePersistentVolumeSpec(t *testing.T) {
|
||||
fsmode := core.PersistentVolumeFilesystem
|
||||
blockmode := core.PersistentVolumeBlock
|
||||
scenarios := map[string]struct {
|
||||
isExpectedFailure bool
|
||||
isInlineSpec bool
|
||||
pvSpec *core.PersistentVolumeSpec
|
||||
}{
|
||||
"pv-pvspec-valid": {
|
||||
isExpectedFailure: false,
|
||||
isInlineSpec: false,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
Capacity: core.ResourceList{
|
||||
core.ResourceName(core.ResourceStorage): resource.MustParse("10G"),
|
||||
},
|
||||
StorageClassName: "testclass",
|
||||
PersistentVolumeReclaimPolicy: core.PersistentVolumeReclaimRecycle,
|
||||
AccessModes: []core.PersistentVolumeAccessMode{core.ReadWriteOnce},
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
HostPath: &core.HostPathVolumeSource{
|
||||
Path: "/foo",
|
||||
Type: newHostPathType(string(core.HostPathDirectory)),
|
||||
},
|
||||
},
|
||||
VolumeMode: &fsmode,
|
||||
NodeAffinity: simpleVolumeNodeAffinity("foo", "bar"),
|
||||
},
|
||||
},
|
||||
"inline-pvspec-with-capacity": {
|
||||
isExpectedFailure: true,
|
||||
isInlineSpec: true,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
Capacity: core.ResourceList{
|
||||
core.ResourceName(core.ResourceStorage): resource.MustParse("10G"),
|
||||
},
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
CSI: &core.CSIPersistentVolumeSource{Driver: "test-driver", VolumeHandle: "test-123", ReadOnly: true},
|
||||
},
|
||||
AccessModes: []core.PersistentVolumeAccessMode{core.ReadWriteOnce},
|
||||
},
|
||||
},
|
||||
"inline-pvspec-with-sc": {
|
||||
isExpectedFailure: true,
|
||||
isInlineSpec: true,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
CSI: &core.CSIPersistentVolumeSource{Driver: "test-driver", VolumeHandle: "test-123", ReadOnly: true},
|
||||
},
|
||||
AccessModes: []core.PersistentVolumeAccessMode{core.ReadWriteOnce},
|
||||
StorageClassName: "testclass",
|
||||
},
|
||||
},
|
||||
"inline-pvspec-with-non-fs-volume-mode": {
|
||||
isExpectedFailure: true,
|
||||
isInlineSpec: true,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
CSI: &core.CSIPersistentVolumeSource{Driver: "test-driver", VolumeHandle: "test-123", ReadOnly: true},
|
||||
},
|
||||
AccessModes: []core.PersistentVolumeAccessMode{core.ReadWriteOnce},
|
||||
VolumeMode: &blockmode,
|
||||
},
|
||||
},
|
||||
"inline-pvspec-with-non-retain-reclaim-policy": {
|
||||
isExpectedFailure: true,
|
||||
isInlineSpec: true,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
PersistentVolumeReclaimPolicy: core.PersistentVolumeReclaimRecycle,
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
CSI: &core.CSIPersistentVolumeSource{Driver: "test-driver", VolumeHandle: "test-123", ReadOnly: true},
|
||||
},
|
||||
AccessModes: []core.PersistentVolumeAccessMode{core.ReadWriteOnce},
|
||||
},
|
||||
},
|
||||
"inline-pvspec-with-node-affinity": {
|
||||
isExpectedFailure: true,
|
||||
isInlineSpec: true,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
CSI: &core.CSIPersistentVolumeSource{Driver: "test-driver", VolumeHandle: "test-123", ReadOnly: true},
|
||||
},
|
||||
AccessModes: []core.PersistentVolumeAccessMode{core.ReadWriteOnce},
|
||||
NodeAffinity: simpleVolumeNodeAffinity("foo", "bar"),
|
||||
},
|
||||
},
|
||||
"inline-pvspec-with-non-csi-source": {
|
||||
isExpectedFailure: true,
|
||||
isInlineSpec: true,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
HostPath: &core.HostPathVolumeSource{
|
||||
Path: "/foo",
|
||||
Type: newHostPathType(string(core.HostPathDirectory)),
|
||||
},
|
||||
},
|
||||
AccessModes: []core.PersistentVolumeAccessMode{core.ReadWriteOnce},
|
||||
},
|
||||
},
|
||||
"inline-pvspec-valid-with-access-modes-and-mount-options": {
|
||||
isExpectedFailure: false,
|
||||
isInlineSpec: true,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
CSI: &core.CSIPersistentVolumeSource{Driver: "test-driver", VolumeHandle: "test-123", ReadOnly: true},
|
||||
},
|
||||
AccessModes: []core.PersistentVolumeAccessMode{core.ReadWriteOnce},
|
||||
MountOptions: []string{"soft", "read-write"},
|
||||
},
|
||||
},
|
||||
"inline-pvspec-valid-with-access-modes": {
|
||||
isExpectedFailure: false,
|
||||
isInlineSpec: true,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
CSI: &core.CSIPersistentVolumeSource{Driver: "test-driver", VolumeHandle: "test-123", ReadOnly: true},
|
||||
},
|
||||
AccessModes: []core.PersistentVolumeAccessMode{core.ReadWriteOnce},
|
||||
},
|
||||
},
|
||||
"inline-pvspec-with-missing-acess-modes": {
|
||||
isExpectedFailure: true,
|
||||
isInlineSpec: true,
|
||||
pvSpec: &core.PersistentVolumeSpec{
|
||||
PersistentVolumeSource: core.PersistentVolumeSource{
|
||||
CSI: &core.CSIPersistentVolumeSource{Driver: "test-driver", VolumeHandle: "test-123", ReadOnly: true},
|
||||
},
|
||||
MountOptions: []string{"soft", "read-write"},
|
||||
},
|
||||
},
|
||||
}
|
||||
for name, scenario := range scenarios {
|
||||
errs := ValidatePersistentVolumeSpec(scenario.pvSpec, "", scenario.isInlineSpec, field.NewPath("field"))
|
||||
if len(errs) == 0 && scenario.isExpectedFailure {
|
||||
t.Errorf("Unexpected success for scenario: %s", name)
|
||||
}
|
||||
if len(errs) > 0 && !scenario.isExpectedFailure {
|
||||
t.Errorf("Unexpected failure for scenario: %s - %+v", name, errs)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidatePersistentVolumeSourceUpdate(t *testing.T) {
|
||||
validVolume := testVolume("foo", "", core.PersistentVolumeSpec{
|
||||
Capacity: core.ResourceList{
|
||||
|
||||
Reference in New Issue
Block a user