@@ -24,6 +24,7 @@ import (
24
24
"k8s.io/apimachinery/pkg/util/wait"
25
25
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
26
26
gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute"
27
+ remote "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/remote"
27
28
28
29
csi "github.com/container-storage-interface/spec/lib/go/csi"
29
30
. "github.com/onsi/ginkgo"
@@ -44,7 +45,7 @@ const (
44
45
ssdDiskType = "pd-ssd"
45
46
defaultVolumeLimit int64 = 127
46
47
47
- defaultEpsiolon = 500000000 // 500M
48
+ defaultEpsilon = 500000000 // 500M
48
49
)
49
50
50
51
var _ = Describe ("GCE PD CSI Driver" , func () {
@@ -65,28 +66,11 @@ var _ = Describe("GCE PD CSI Driver", func() {
65
66
instance := testContext .Instance
66
67
67
68
// Create Disk
68
- volName := testNamePrefix + string (uuid .NewUUID ())
69
- volID , err := client .CreateVolume (volName , nil , defaultSizeGb ,
70
- & csi.TopologyRequirement {
71
- Requisite : []* csi.Topology {
72
- {
73
- Segments : map [string ]string {common .TopologyKeyZone : z },
74
- },
75
- },
76
- })
77
- Expect (err ).To (BeNil (), "CreateVolume failed with error: %v" , err )
78
-
79
- // Validate Disk Created
80
- cloudDisk , err := computeService .Disks .Get (p , z , volName ).Do ()
81
- Expect (err ).To (BeNil (), "Could not get disk from cloud directly" )
82
- Expect (cloudDisk .Type ).To (ContainSubstring (standardDiskType ))
83
- Expect (cloudDisk .Status ).To (Equal (readyState ))
84
- Expect (cloudDisk .SizeGb ).To (Equal (defaultSizeGb ))
85
- Expect (cloudDisk .Name ).To (Equal (volName ))
69
+ volName , volID := createAndValidateUniqueZonalDisk (client , p , z )
86
70
87
71
defer func () {
88
72
// Delete Disk
89
- client .DeleteVolume (volID )
73
+ err := client .DeleteVolume (volID )
90
74
Expect (err ).To (BeNil (), "DeleteVolume failed" )
91
75
92
76
// Validate Disk Deleted
@@ -95,7 +79,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
95
79
}()
96
80
97
81
// Attach Disk
98
- err = testAttachWriteReadDetach (volID , volName , instance , client , false /* readOnly */ )
82
+ err : = testAttachWriteReadDetach (volID , volName , instance , client , false /* readOnly */ )
99
83
Expect (err ).To (BeNil (), "Failed to go through volume lifecycle" )
100
84
101
85
})
@@ -137,31 +121,13 @@ var _ = Describe("GCE PD CSI Driver", func() {
137
121
client := testContext .Client
138
122
instance := testContext .Instance
139
123
140
- // Create Disk
141
- volName := testNamePrefix + string (uuid .NewUUID ())
142
- _ , err := client .CreateVolume (volName , nil , defaultSizeGb ,
143
- & csi.TopologyRequirement {
144
- Requisite : []* csi.Topology {
145
- {
146
- Segments : map [string ]string {common .TopologyKeyZone : z },
147
- },
148
- },
149
- })
150
- Expect (err ).To (BeNil (), "CreateVolume failed with error: %v" , err )
151
-
152
- // Validate Disk Created
153
- cloudDisk , err := computeService .Disks .Get (p , z , volName ).Do ()
154
- Expect (err ).To (BeNil (), "Could not get disk from cloud directly" )
155
- Expect (cloudDisk .Type ).To (ContainSubstring (standardDiskType ))
156
- Expect (cloudDisk .Status ).To (Equal (readyState ))
157
- Expect (cloudDisk .SizeGb ).To (Equal (defaultSizeGb ))
158
- Expect (cloudDisk .Name ).To (Equal (volName ))
124
+ volName , _ := createAndValidateUniqueZonalDisk (client , p , z )
159
125
160
126
underSpecifiedID := common .GenerateUnderspecifiedVolumeID (volName , true /* isZonal */ )
161
127
162
128
defer func () {
163
129
// Delete Disk
164
- client .DeleteVolume (underSpecifiedID )
130
+ err := client .DeleteVolume (underSpecifiedID )
165
131
Expect (err ).To (BeNil (), "DeleteVolume failed" )
166
132
167
133
// Validate Disk Deleted
@@ -170,7 +136,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
170
136
}()
171
137
172
138
// Attach Disk
173
- err = testAttachWriteReadDetach (underSpecifiedID , volName , instance , client , false /* readOnly */ )
139
+ err : = testAttachWriteReadDetach (underSpecifiedID , volName , instance , client , false /* readOnly */ )
174
140
Expect (err ).To (BeNil (), "Failed to go through volume lifecycle" )
175
141
176
142
})
@@ -262,22 +228,11 @@ var _ = Describe("GCE PD CSI Driver", func() {
262
228
p , z , _ := testContext .Instance .GetIdentity ()
263
229
client := testContext .Client
264
230
265
- // Create Disk
266
- volName := testNamePrefix + string (uuid .NewUUID ())
267
- volId , err := client .CreateVolume (volName , nil , defaultSizeGb , nil )
268
- Expect (err ).To (BeNil (), "CreateVolume failed with error: %v" , err )
269
-
270
- // Validate Disk Created
271
- cloudDisk , err := computeService .Disks .Get (p , z , volName ).Do ()
272
- Expect (err ).To (BeNil (), "Could not get disk from cloud directly" )
273
- Expect (cloudDisk .Type ).To (ContainSubstring (standardDiskType ))
274
- Expect (cloudDisk .Status ).To (Equal (readyState ))
275
- Expect (cloudDisk .SizeGb ).To (Equal (defaultSizeGb ))
276
- Expect (cloudDisk .Name ).To (Equal (volName ))
231
+ volName , volID := createAndValidateUniqueZonalDisk (client , p , z )
277
232
278
233
// Create Snapshot
279
234
snapshotName := testNamePrefix + string (uuid .NewUUID ())
280
- snapshotID , err := client .CreateSnapshot (snapshotName , volId , nil )
235
+ snapshotID , err := client .CreateSnapshot (snapshotName , volID , nil )
281
236
Expect (err ).To (BeNil (), "CreateSnapshot failed with error: %v" , err )
282
237
283
238
// Validate Snapshot Created
@@ -297,7 +252,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
297
252
298
253
defer func () {
299
254
// Delete Disk
300
- err := client .DeleteVolume (volId )
255
+ err := client .DeleteVolume (volID )
301
256
Expect (err ).To (BeNil (), "DeleteVolume failed" )
302
257
303
258
// Validate Disk Deleted
@@ -482,7 +437,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
482
437
483
438
// Create Disk
484
439
volName := testNamePrefix + string (uuid .NewUUID ())
485
- volId , err := controllerClient .CreateVolume (volName , map [string ]string {
440
+ volID , err := controllerClient .CreateVolume (volName , map [string ]string {
486
441
common .ParameterKeyReplicationType : "regional-pd" ,
487
442
}, defaultRepdSizeGb , nil )
488
443
Expect (err ).To (BeNil (), "CreateVolume failed with error: %v" , err )
@@ -505,7 +460,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
505
460
506
461
// Create Snapshot
507
462
snapshotName := testNamePrefix + string (uuid .NewUUID ())
508
- snapshotID , err := controllerClient .CreateSnapshot (snapshotName , volId , nil )
463
+ snapshotID , err := controllerClient .CreateSnapshot (snapshotName , volID , nil )
509
464
Expect (err ).To (BeNil (), "CreateSnapshot failed with error: %v" , err )
510
465
511
466
// Validate Snapshot Created
@@ -525,7 +480,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
525
480
526
481
defer func () {
527
482
// Delete Disk
528
- err := controllerClient .DeleteVolume (volId )
483
+ err := controllerClient .DeleteVolume (volID )
529
484
Expect (err ).To (BeNil (), "DeleteVolume failed" )
530
485
531
486
// Validate Disk Deleted
@@ -542,36 +497,55 @@ var _ = Describe("GCE PD CSI Driver", func() {
542
497
}()
543
498
})
544
499
545
- It ("Should get correct VolumeStats" , func () {
500
+ It ("Should get correct VolumeStats for Block " , func () {
546
501
testContext := getRandomTestContext ()
547
502
548
503
p , z , _ := testContext .Instance .GetIdentity ()
549
504
client := testContext .Client
550
505
instance := testContext .Instance
551
506
552
- // Create Disk
553
- volName := testNamePrefix + string (uuid .NewUUID ())
554
- volID , err := client .CreateVolume (volName , nil , defaultSizeGb ,
555
- & csi.TopologyRequirement {
556
- Requisite : []* csi.Topology {
557
- {
558
- Segments : map [string ]string {common .TopologyKeyZone : z },
559
- },
560
- },
561
- })
562
- Expect (err ).To (BeNil (), "CreateVolume failed with error: %v" , err )
507
+ volName , volID := createAndValidateUniqueZonalDisk (client , p , z )
563
508
564
- // Validate Disk Created
565
- cloudDisk , err := computeService .Disks .Get (p , z , volName ).Do ()
566
- Expect (err ).To (BeNil (), "Could not get disk from cloud directly" )
567
- Expect (cloudDisk .Type ).To (ContainSubstring (standardDiskType ))
568
- Expect (cloudDisk .Status ).To (Equal (readyState ))
569
- Expect (cloudDisk .SizeGb ).To (Equal (defaultSizeGb ))
570
- Expect (cloudDisk .Name ).To (Equal (volName ))
509
+ defer func () {
510
+ // Delete Disk
511
+ err := client .DeleteVolume (volID )
512
+ Expect (err ).To (BeNil (), "DeleteVolume failed" )
513
+
514
+ // Validate Disk Deleted
515
+ _ , err = computeService .Disks .Get (p , z , volName ).Do ()
516
+ Expect (gce .IsGCEError (err , "notFound" )).To (BeTrue (), "Expected disk to not be found" )
517
+ }()
518
+
519
+ verifyVolumeStats := func (a verifyArgs ) error {
520
+ available , capacity , used , inodesFree , inodes , inodesUsed , err := client .NodeGetVolumeStats (volID , a .publishDir )
521
+ if err != nil {
522
+ return fmt .Errorf ("failed to get node volume stats: %v" , err )
523
+ }
524
+ if available != 0 || capacity != common .GbToBytes (defaultSizeGb ) || used != 0 ||
525
+ inodesFree != 0 || inodes != 0 || inodesUsed != 0 {
526
+ return fmt .Errorf ("got: available %v, capacity %v, used %v, inodesFree %v, inodes %v, inodesUsed %v -- expected: capacity = %v, available = 0, used = 0, inodesFree = 0, inodes = 0 , inodesUsed = 0" ,
527
+ available , capacity , used , inodesFree , inodes , inodesUsed , common .GbToBytes (defaultSizeGb ))
528
+ }
529
+ return nil
530
+ }
531
+
532
+ // Attach Disk
533
+ err := testLifecycleWithVerify (volID , volName , instance , client , false /* readOnly */ , true /* block */ , verifyVolumeStats , nil )
534
+ Expect (err ).To (BeNil (), "Failed to go through volume lifecycle" )
535
+ })
536
+
537
+ It ("Should get correct VolumeStats" , func () {
538
+ testContext := getRandomTestContext ()
539
+
540
+ p , z , _ := testContext .Instance .GetIdentity ()
541
+ client := testContext .Client
542
+ instance := testContext .Instance
543
+
544
+ volName , volID := createAndValidateUniqueZonalDisk (client , p , z )
571
545
572
546
defer func () {
573
547
// Delete Disk
574
- client .DeleteVolume (volID )
548
+ err := client .DeleteVolume (volID )
575
549
Expect (err ).To (BeNil (), "DeleteVolume failed" )
576
550
577
551
// Validate Disk Deleted
@@ -584,7 +558,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
584
558
if err != nil {
585
559
return fmt .Errorf ("failed to get node volume stats: %v" , err )
586
560
}
587
- if ! equalWithinEpsilon (available , common .GbToBytes (defaultSizeGb ), defaultEpsiolon ) || ! equalWithinEpsilon (capacity , common .GbToBytes (defaultSizeGb ), defaultEpsiolon ) || ! equalWithinEpsilon (used , 0 , defaultEpsiolon ) ||
561
+ if ! equalWithinEpsilon (available , common .GbToBytes (defaultSizeGb ), defaultEpsilon ) || ! equalWithinEpsilon (capacity , common .GbToBytes (defaultSizeGb ), defaultEpsilon ) || ! equalWithinEpsilon (used , 0 , defaultEpsilon ) ||
588
562
inodesFree == 0 || inodes == 0 || inodesUsed == 0 {
589
563
return fmt .Errorf ("got: available %v, capacity %v, used %v, inodesFree %v, inodes %v, inodesUsed %v -- expected: available ~= %v, capacity ~= %v, used = 0, inodesFree != 0, inodes != 0 , inodesUsed != 0" ,
590
564
available , capacity , used , inodesFree , inodes , inodesUsed , common .GbToBytes (defaultSizeGb ), common .GbToBytes (defaultSizeGb ))
@@ -593,9 +567,8 @@ var _ = Describe("GCE PD CSI Driver", func() {
593
567
}
594
568
595
569
// Attach Disk
596
- err = testLifecycleWithVerify (volID , volName , instance , client , false /* readOnly */ , verifyVolumeStats , nil )
570
+ err : = testLifecycleWithVerify (volID , volName , instance , client , false /* readOnly */ , false /* fs */ , verifyVolumeStats , nil )
597
571
Expect (err ).To (BeNil (), "Failed to go through volume lifecycle" )
598
-
599
572
})
600
573
601
574
})
@@ -606,3 +579,27 @@ func equalWithinEpsilon(a, b, epsiolon int64) bool {
606
579
}
607
580
return b - a < epsiolon
608
581
}
582
+
583
+ func createAndValidateUniqueZonalDisk (client * remote.CsiClient , project , zone string ) (string , string ) {
584
+ // Create Disk
585
+ volName := testNamePrefix + string (uuid .NewUUID ())
586
+ volID , err := client .CreateVolume (volName , nil , defaultSizeGb ,
587
+ & csi.TopologyRequirement {
588
+ Requisite : []* csi.Topology {
589
+ {
590
+ Segments : map [string ]string {common .TopologyKeyZone : zone },
591
+ },
592
+ },
593
+ })
594
+ Expect (err ).To (BeNil (), "CreateVolume failed with error: %v" , err )
595
+
596
+ // Validate Disk Created
597
+ cloudDisk , err := computeService .Disks .Get (project , zone , volName ).Do ()
598
+ Expect (err ).To (BeNil (), "Could not get disk from cloud directly" )
599
+ Expect (cloudDisk .Type ).To (ContainSubstring (standardDiskType ))
600
+ Expect (cloudDisk .Status ).To (Equal (readyState ))
601
+ Expect (cloudDisk .SizeGb ).To (Equal (defaultSizeGb ))
602
+ Expect (cloudDisk .Name ).To (Equal (volName ))
603
+
604
+ return volName , volID
605
+ }
0 commit comments