Ignore non-avaiable volumes in findMatchingVolume: update tests

- Use VolumeAvaiable instead of empty or pending phase in tests
- Add a test case to verify findMatchingVolume will not choose
  non-avaiable PVs if it's not pre-bind
- Add a test case to verify syncClaim will not choose non-avaibalbe PVs
  if it's not pre-bind
This commit is contained in:
Yecheng Fu
2018-09-14 20:02:04 +08:00
parent b3cb1bdc4a
commit 1e27a28dca
5 changed files with 301 additions and 91 deletions

View File

@@ -213,6 +213,9 @@ func TestMatchingWithBoundVolumes(t *testing.T) {
// this one we're pretending is already bound
ClaimRef: &v1.ObjectReference{UID: "abc123"},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeBound,
},
}
pv2 := &v1.PersistentVolume{
@@ -229,6 +232,9 @@ func TestMatchingWithBoundVolumes(t *testing.T) {
},
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce, v1.ReadOnlyMany},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
}
volumeIndex.store.Add(pv1)
@@ -330,6 +336,9 @@ func TestFindingVolumeWithDifferentAccessModes(t *testing.T) {
v1.ReadOnlyMany,
},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
}
ebs := &v1.PersistentVolume{
@@ -341,6 +350,9 @@ func TestFindingVolumeWithDifferentAccessModes(t *testing.T) {
v1.ReadWriteOnce,
},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
}
nfs := &v1.PersistentVolume{
@@ -354,6 +366,9 @@ func TestFindingVolumeWithDifferentAccessModes(t *testing.T) {
v1.ReadWriteMany,
},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
}
claim := &v1.PersistentVolumeClaim{
@@ -442,6 +457,9 @@ func createTestVolumes() []*v1.PersistentVolume {
v1.ReadOnlyMany,
},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -462,6 +480,9 @@ func createTestVolumes() []*v1.PersistentVolume {
// this one we're pretending is already bound
ClaimRef: &v1.ObjectReference{UID: "def456"},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeBound,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -481,6 +502,9 @@ func createTestVolumes() []*v1.PersistentVolume {
v1.ReadWriteMany,
},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -501,6 +525,9 @@ func createTestVolumes() []*v1.PersistentVolume {
// this one we're pretending is already bound
ClaimRef: &v1.ObjectReference{UID: "abc123"},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeBound,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -520,6 +547,9 @@ func createTestVolumes() []*v1.PersistentVolume {
v1.ReadWriteMany,
},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -538,6 +568,9 @@ func createTestVolumes() []*v1.PersistentVolume {
v1.ReadOnlyMany,
},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -557,6 +590,9 @@ func createTestVolumes() []*v1.PersistentVolume {
v1.ReadWriteMany,
},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -577,6 +613,9 @@ func createTestVolumes() []*v1.PersistentVolume {
v1.ReadWriteOnce,
},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -598,6 +637,9 @@ func createTestVolumes() []*v1.PersistentVolume {
},
StorageClassName: classSilver,
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -616,6 +658,9 @@ func createTestVolumes() []*v1.PersistentVolume {
},
StorageClassName: classSilver,
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -634,6 +679,9 @@ func createTestVolumes() []*v1.PersistentVolume {
},
StorageClassName: classGold,
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -654,6 +702,9 @@ func createTestVolumes() []*v1.PersistentVolume {
},
StorageClassName: classLarge,
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -674,6 +725,9 @@ func createTestVolumes() []*v1.PersistentVolume {
},
StorageClassName: classLarge,
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -694,6 +748,9 @@ func createTestVolumes() []*v1.PersistentVolume {
StorageClassName: classWait,
NodeAffinity: getVolumeNodeAffinity("key1", "value1"),
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -714,6 +771,9 @@ func createTestVolumes() []*v1.PersistentVolume {
StorageClassName: classWait,
NodeAffinity: getVolumeNodeAffinity("key1", "value1"),
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -735,6 +795,9 @@ func createTestVolumes() []*v1.PersistentVolume {
ClaimRef: &v1.ObjectReference{Name: "claim02", Namespace: "myns"},
NodeAffinity: getVolumeNodeAffinity("key1", "value1"),
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
@@ -755,6 +818,98 @@ func createTestVolumes() []*v1.PersistentVolume {
StorageClassName: classWait,
NodeAffinity: getVolumeNodeAffinity("key1", "value3"),
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
},
{
ObjectMeta: metav1.ObjectMeta{
UID: "affinity-pv4-pending",
Name: "affinity004-pending",
},
Spec: v1.PersistentVolumeSpec{
Capacity: v1.ResourceList{
v1.ResourceName(v1.ResourceStorage): resource.MustParse("200G"),
},
PersistentVolumeSource: v1.PersistentVolumeSource{
Local: &v1.LocalVolumeSource{},
},
AccessModes: []v1.PersistentVolumeAccessMode{
v1.ReadWriteOnce,
v1.ReadOnlyMany,
},
StorageClassName: classWait,
NodeAffinity: getVolumeNodeAffinity("key1", "value4"),
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumePending,
},
},
{
ObjectMeta: metav1.ObjectMeta{
UID: "affinity-pv4-failed",
Name: "affinity004-failed",
},
Spec: v1.PersistentVolumeSpec{
Capacity: v1.ResourceList{
v1.ResourceName(v1.ResourceStorage): resource.MustParse("200G"),
},
PersistentVolumeSource: v1.PersistentVolumeSource{
Local: &v1.LocalVolumeSource{},
},
AccessModes: []v1.PersistentVolumeAccessMode{
v1.ReadWriteOnce,
v1.ReadOnlyMany,
},
StorageClassName: classWait,
NodeAffinity: getVolumeNodeAffinity("key1", "value4"),
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeFailed,
},
},
{
ObjectMeta: metav1.ObjectMeta{
UID: "affinity-pv4-released",
Name: "affinity004-released",
},
Spec: v1.PersistentVolumeSpec{
Capacity: v1.ResourceList{
v1.ResourceName(v1.ResourceStorage): resource.MustParse("200G"),
},
PersistentVolumeSource: v1.PersistentVolumeSource{
Local: &v1.LocalVolumeSource{},
},
AccessModes: []v1.PersistentVolumeAccessMode{
v1.ReadWriteOnce,
v1.ReadOnlyMany,
},
StorageClassName: classWait,
NodeAffinity: getVolumeNodeAffinity("key1", "value4"),
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeReleased,
},
},
{
ObjectMeta: metav1.ObjectMeta{
UID: "affinity-pv4-empty",
Name: "affinity004-empty",
},
Spec: v1.PersistentVolumeSpec{
Capacity: v1.ResourceList{
v1.ResourceName(v1.ResourceStorage): resource.MustParse("200G"),
},
PersistentVolumeSource: v1.PersistentVolumeSource{
Local: &v1.LocalVolumeSource{},
},
AccessModes: []v1.PersistentVolumeAccessMode{
v1.ReadWriteOnce,
v1.ReadOnlyMany,
},
StorageClassName: classWait,
NodeAffinity: getVolumeNodeAffinity("key1", "value4"),
},
},
}
}
@@ -770,6 +925,9 @@ func testVolume(name, size string) *v1.PersistentVolume {
PersistentVolumeSource: v1.PersistentVolumeSource{HostPath: &v1.HostPathVolumeSource{}},
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
}
}
@@ -811,6 +969,9 @@ func createVolumeModeBlockTestVolume() *v1.PersistentVolume {
},
VolumeMode: &blockMode,
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
}
}
@@ -834,6 +995,9 @@ func createVolumeModeFilesystemTestVolume() *v1.PersistentVolume {
},
VolumeMode: &filesystemMode,
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
}
}
@@ -1054,6 +1218,9 @@ func TestAlphaStorageObjectInUseProtectionFiltering(t *testing.T) {
PersistentVolumeSource: v1.PersistentVolumeSource{HostPath: &v1.HostPathVolumeSource{}},
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
},
Status: v1.PersistentVolumeStatus{
Phase: v1.VolumeAvailable,
},
}
pvToDelete := pv.DeepCopy()
@@ -1274,6 +1441,11 @@ func TestFindMatchVolumeWithNode(t *testing.T) {
Labels: map[string]string{"key1": "value3"},
},
}
node4 := &v1.Node{
ObjectMeta: metav1.ObjectMeta{
Labels: map[string]string{"key1": "value4"},
},
}
scenarios := map[string]struct {
expectedMatch string
@@ -1341,6 +1513,15 @@ func TestFindMatchVolumeWithNode(t *testing.T) {
}),
node: node3,
},
"fail-nonavaiable": {
expectedMatch: "",
claim: makePVC("100G", func(pvc *v1.PersistentVolumeClaim) {
pvc.Spec.AccessModes = []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}
pvc.Spec.StorageClassName = &classWait
pvc.Name = "claim04"
}),
node: node4,
},
"success-bad-and-good-node-affinity": {
expectedMatch: "affinity-pv3",
claim: makePVC("100G", func(pvc *v1.PersistentVolumeClaim) {