@@ -261,9 +261,11 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
261
261
Parameters : sc .Parameters ,
262
262
ClaimSize : "1Gi" ,
263
263
ExpectedSize : "1Gi" ,
264
- NodeName : nodeName ,
265
264
}
266
- class , claim , pod := startPausePod (cs , scTest , ns .Name )
265
+ nodeSelection := testsuites.NodeSelection {
266
+ Name : nodeName ,
267
+ }
268
+ class , claim , pod := startPausePod (cs , scTest , nodeSelection , ns .Name )
267
269
if class != nil {
268
270
defer cs .StorageV1 ().StorageClasses ().Delete (class .Name , nil )
269
271
}
@@ -381,16 +383,16 @@ var _ = utils.SIGDescribe("CSI Volumes", func() {
381
383
Parameters : sc .Parameters ,
382
384
ClaimSize : "1Gi" ,
383
385
ExpectedSize : "1Gi" ,
384
- // The mock driver only works when everything runs on a single node.
385
- NodeName : nodeName ,
386
386
// Provisioner and storage class name must match what's used in
387
387
// csi-storageclass.yaml, plus the test-specific suffix.
388
388
Provisioner : sc .Provisioner ,
389
389
StorageClassName : "csi-mock-sc-" + f .UniqueName ,
390
- // Mock driver does not provide any persistency.
391
- SkipWriteReadCheck : true ,
392
390
}
393
- class , claim , pod := startPausePod (cs , scTest , ns .Name )
391
+ nodeSelection := testsuites.NodeSelection {
392
+ // The mock driver only works when everything runs on a single node.
393
+ Name : nodeName ,
394
+ }
395
+ class , claim , pod := startPausePod (cs , scTest , nodeSelection , ns .Name )
394
396
if class != nil {
395
397
defer cs .StorageV1 ().StorageClasses ().Delete (class .Name , nil )
396
398
}
@@ -429,7 +431,7 @@ func testTopologyPositive(cs clientset.Interface, suffix, namespace string, dela
429
431
claim .Spec .StorageClassName = & class .Name
430
432
431
433
if delayBinding {
432
- _ , node := testsuites .TestBindingWaitForFirstConsumer (test , cs , claim , class )
434
+ _ , node := testsuites .TestBindingWaitForFirstConsumer (test , cs , claim , class , nil /* node selector */ , false /* expect unschedulable */ )
433
435
Expect (node ).ToNot (BeNil (), "Unexpected nil node found" )
434
436
} else {
435
437
testsuites .TestDynamicProvisioning (test , cs , claim , class )
@@ -450,16 +452,22 @@ func testTopologyNegative(cs clientset.Interface, suffix, namespace string, dela
450
452
451
453
test := createGCEPDStorageClassTest ()
452
454
test .DelayBinding = delayBinding
453
- test .NodeSelector = map [string ]string {v1 .LabelZoneFailureDomain : podZone }
454
- test .ExpectUnschedulable = true
455
+ nodeSelector := map [string ]string {v1 .LabelZoneFailureDomain : podZone }
455
456
456
457
class := newStorageClass (test , namespace , suffix )
457
458
addSingleCSIZoneAllowedTopologyToStorageClass (cs , class , pvZone )
458
459
claim := newClaim (test , namespace , suffix )
459
460
claim .Spec .StorageClassName = & class .Name
460
461
if delayBinding {
461
- testsuites .TestBindingWaitForFirstConsumer (test , cs , claim , class )
462
+ testsuites .TestBindingWaitForFirstConsumer (test , cs , claim , class , nodeSelector , true /* expect unschedulable */ )
462
463
} else {
464
+ test .PvCheck = func (claim * v1.PersistentVolumeClaim , volume * v1.PersistentVolume ) {
465
+ // Ensure that a pod cannot be scheduled in an unsuitable zone.
466
+ pod := testsuites .StartInPodWithVolume (cs , namespace , claim .Name , "pvc-tester-unschedulable" , "sleep 100000" ,
467
+ testsuites.NodeSelection {Selector : nodeSelector })
468
+ defer testsuites .StopPod (cs , pod )
469
+ framework .ExpectNoError (framework .WaitForPodNameUnschedulableInNamespace (cs , pod .Name , pod .Namespace ), "pod should be unschedulable" )
470
+ }
463
471
testsuites .TestDynamicProvisioning (test , cs , claim , class )
464
472
}
465
473
}
@@ -500,7 +508,7 @@ func getVolumeHandle(cs clientset.Interface, claim *v1.PersistentVolumeClaim) st
500
508
return pv .Spec .CSI .VolumeHandle
501
509
}
502
510
503
- func startPausePod (cs clientset.Interface , t testsuites.StorageClassTest , ns string ) (* storagev1.StorageClass , * v1.PersistentVolumeClaim , * v1.Pod ) {
511
+ func startPausePod (cs clientset.Interface , t testsuites.StorageClassTest , node testsuites. NodeSelection , ns string ) (* storagev1.StorageClass , * v1.PersistentVolumeClaim , * v1.Pod ) {
504
512
class := newStorageClass (t , ns , "" )
505
513
class , err := cs .StorageV1 ().StorageClasses ().Create (class )
506
514
framework .ExpectNoError (err , "Failed to create class : %v" , err )
@@ -514,6 +522,9 @@ func startPausePod(cs clientset.Interface, t testsuites.StorageClassTest, ns str
514
522
GenerateName : "pvc-volume-tester-" ,
515
523
},
516
524
Spec : v1.PodSpec {
525
+ NodeName : node .Name ,
526
+ NodeSelector : node .Selector ,
527
+ Affinity : node .Affinity ,
517
528
Containers : []v1.Container {
518
529
{
519
530
Name : "volume-tester" ,
@@ -541,9 +552,6 @@ func startPausePod(cs clientset.Interface, t testsuites.StorageClassTest, ns str
541
552
},
542
553
}
543
554
544
- if len (t .NodeName ) != 0 {
545
- pod .Spec .NodeName = t .NodeName
546
- }
547
555
pod , err = cs .CoreV1 ().Pods (ns ).Create (pod )
548
556
framework .ExpectNoError (err , "Failed to create pod: %v" , err )
549
557
return class , claim , pod
0 commit comments