integration: Wait for PV to be available

This commit is contained in:
Yecheng Fu 2020-07-30 13:37:20 +08:00
parent 0c642b6ef0
commit 930409c993

View File

@ -762,7 +762,7 @@ func testVolumeProvision(t *testing.T, storageCapacity bool) {
} }
run := func(t *testing.T, test testcaseType) { run := func(t *testing.T, test testcaseType) {
// Create StorageClasses t.Log("Creating StorageClass")
suffix := rand.String(4) suffix := rand.String(4)
classes := map[string]*storagev1.StorageClass{} classes := map[string]*storagev1.StorageClass{}
classes[classImmediate] = makeDynamicProvisionerStorageClass(fmt.Sprintf("immediate-%v", suffix), &modeImmediate, nil) classes[classImmediate] = makeDynamicProvisionerStorageClass(fmt.Sprintf("immediate-%v", suffix), &modeImmediate, nil)
@ -783,27 +783,35 @@ func testVolumeProvision(t *testing.T, storageCapacity bool) {
t.Fatalf("Failed to create StorageClass %q: %v", sc.Name, err) t.Fatalf("Failed to create StorageClass %q: %v", sc.Name, err)
} }
} }
// Create PVs
t.Log("Creating PVs")
for _, pvConfig := range test.pvs { for _, pvConfig := range test.pvs {
pv := makePV(pvConfig.name, classes[pvConfig.scName].Name, pvConfig.preboundPVC, config.ns, pvConfig.node) pv := makePV(pvConfig.name, classes[pvConfig.scName].Name, pvConfig.preboundPVC, config.ns, pvConfig.node)
if _, err := config.client.CoreV1().PersistentVolumes().Create(context.TODO(), pv, metav1.CreateOptions{}); err != nil { if _, err := config.client.CoreV1().PersistentVolumes().Create(context.TODO(), pv, metav1.CreateOptions{}); err != nil {
t.Fatalf("Failed to create PersistentVolume %q: %v", pv.Name, err) t.Fatalf("Failed to create PersistentVolume %q: %v", pv.Name, err)
} }
if err := waitForPVPhase(config.client, pvConfig.name, v1.VolumeAvailable); err != nil {
t.Fatalf("PersistentVolume %q failed to become available: %v", pvConfig.name, err)
}
} }
// Create PVCs t.Log("Creating PVCs")
for _, pvcConfig := range test.boundPvcs { for _, pvcConfig := range test.boundPvcs {
pvc := makePVC(pvcConfig.name, config.ns, &classes[pvcConfig.scName].Name, pvcConfig.preboundPV) pvc := makePVC(pvcConfig.name, config.ns, &classes[pvcConfig.scName].Name, pvcConfig.preboundPV)
if _, err := config.client.CoreV1().PersistentVolumeClaims(config.ns).Create(context.TODO(), pvc, metav1.CreateOptions{}); err != nil { if _, err := config.client.CoreV1().PersistentVolumeClaims(config.ns).Create(context.TODO(), pvc, metav1.CreateOptions{}); err != nil {
t.Fatalf("Failed to create PersistentVolumeClaim %q: %v", pvc.Name, err) t.Fatalf("Failed to create PersistentVolumeClaim %q: %v", pvc.Name, err)
} }
} }
t.Log("Creating unbound PVCs")
for _, pvcConfig := range test.unboundPvcs { for _, pvcConfig := range test.unboundPvcs {
pvc := makePVC(pvcConfig.name, config.ns, &classes[pvcConfig.scName].Name, pvcConfig.preboundPV) pvc := makePVC(pvcConfig.name, config.ns, &classes[pvcConfig.scName].Name, pvcConfig.preboundPV)
if _, err := config.client.CoreV1().PersistentVolumeClaims(config.ns).Create(context.TODO(), pvc, metav1.CreateOptions{}); err != nil { if _, err := config.client.CoreV1().PersistentVolumeClaims(config.ns).Create(context.TODO(), pvc, metav1.CreateOptions{}); err != nil {
t.Fatalf("Failed to create PersistentVolumeClaim %q: %v", pvc.Name, err) t.Fatalf("Failed to create PersistentVolumeClaim %q: %v", pvc.Name, err)
} }
} }
t.Log("Creating unbound PVCs which should be dynamically provisioned")
for _, pvcConfig := range test.provisionedPvcs { for _, pvcConfig := range test.provisionedPvcs {
pvc := makePVC(pvcConfig.name, config.ns, &classes[pvcConfig.scName].Name, pvcConfig.preboundPV) pvc := makePVC(pvcConfig.name, config.ns, &classes[pvcConfig.scName].Name, pvcConfig.preboundPV)
if _, err := config.client.CoreV1().PersistentVolumeClaims(config.ns).Create(context.TODO(), pvc, metav1.CreateOptions{}); err != nil { if _, err := config.client.CoreV1().PersistentVolumeClaims(config.ns).Create(context.TODO(), pvc, metav1.CreateOptions{}); err != nil {
@ -811,7 +819,7 @@ func testVolumeProvision(t *testing.T, storageCapacity bool) {
} }
} }
// Create Pod t.Log("Creating the pod to schedule")
if _, err := config.client.CoreV1().Pods(config.ns).Create(context.TODO(), test.pod, metav1.CreateOptions{}); err != nil { if _, err := config.client.CoreV1().Pods(config.ns).Create(context.TODO(), test.pod, metav1.CreateOptions{}); err != nil {
t.Fatalf("Failed to create Pod %q: %v", test.pod.Name, err) t.Fatalf("Failed to create Pod %q: %v", test.pod.Name, err)
} }
@ -825,7 +833,7 @@ func testVolumeProvision(t *testing.T, storageCapacity bool) {
} }
} }
// Validate PVC/PV binding t.Log("Validating PVC/PV binding")
for _, pvc := range test.boundPvcs { for _, pvc := range test.boundPvcs {
validatePVCPhase(t, config.client, pvc.name, config.ns, v1.ClaimBound, false) validatePVCPhase(t, config.client, pvc.name, config.ns, v1.ClaimBound, false)
} }
@ -840,6 +848,7 @@ func testVolumeProvision(t *testing.T, storageCapacity bool) {
} }
// Force delete objects, but they still may not be immediately removed // Force delete objects, but they still may not be immediately removed
t.Log("Deleting test objects")
deleteTestObjects(config.client, config.ns, deleteOption) deleteTestObjects(config.client, config.ns, deleteOption)
} }