Skip to content

Commit b7916a4

Browse files
committed
Added unit test for repairing ID
1 parent bbc6725 commit b7916a4

File tree

5 files changed

+90
-50
lines changed

5 files changed

+90
-50
lines changed

pkg/gce-cloud-provider/compute/cloud-disk.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,14 @@ func (d *CloudDisk) GetSizeGb() int64 {
123123
return -1
124124
}
125125
}
126+
127+
func (d *CloudDisk) GetZone() string {
128+
switch d.Type() {
129+
case Zonal:
130+
return d.ZonalDisk.Zone
131+
case Regional:
132+
return d.RegionalDisk.Zone
133+
default:
134+
return ""
135+
}
136+
}

pkg/gce-cloud-provider/compute/fake-gce.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,47 @@ type FakeCloudProvider struct {
4949

5050
var _ GCECompute = &FakeCloudProvider{}
5151

52-
func FakeCreateCloudProvider(project, zone string) (*FakeCloudProvider, error) {
53-
return &FakeCloudProvider{
52+
func FakeCreateCloudProvider(project, zone string, cloudDisks []*CloudDisk) (*FakeCloudProvider, error) {
53+
fcp := &FakeCloudProvider{
5454
project: project,
5555
zone: zone,
5656
disks: map[string]*CloudDisk{},
5757
instances: map[string]*compute.Instance{},
5858
snapshots: map[string]*compute.Snapshot{},
59-
}, nil
59+
}
60+
for _, d := range cloudDisks {
61+
fcp.disks[d.GetName()] = d
62+
}
63+
return fcp, nil
6064

6165
}
6266

6367
func (cloud *FakeCloudProvider) RepairUnderspecifiedVolumeKey(ctx context.Context, volumeKey *meta.Key) (*meta.Key, error) {
64-
return volumeKey, nil
68+
switch volumeKey.Type() {
69+
case meta.Zonal:
70+
if volumeKey.Zone != common.UnspecifiedValue {
71+
return volumeKey, nil
72+
}
73+
for name, d := range cloud.disks {
74+
if name == volumeKey.Name {
75+
volumeKey.Zone = d.GetZone()
76+
return volumeKey, nil
77+
}
78+
}
79+
return nil, fmt.Errorf("Couldn't repair unspecified volume information")
80+
case meta.Regional:
81+
if volumeKey.Region != common.UnspecifiedValue {
82+
return volumeKey, nil
83+
}
84+
r, err := common.GetRegionFromZones([]string{cloud.zone})
85+
if err != nil {
86+
return nil, fmt.Errorf("failed to get region from zones: %v", err)
87+
}
88+
volumeKey.Region = r
89+
return volumeKey, nil
90+
default:
91+
return nil, fmt.Errorf("Volume key %v not zonal nor regional", volumeKey.Name)
92+
}
6593
}
6694

6795
func (cloud *FakeCloudProvider) ListZones(ctx context.Context, region string) ([]string, error) {
@@ -199,6 +227,9 @@ func (cloud *FakeCloudProvider) InsertDisk(ctx context.Context, volKey *meta.Key
199227
}
200228

201229
func (cloud *FakeCloudProvider) DeleteDisk(ctx context.Context, volKey *meta.Key) error {
230+
if _, ok := cloud.disks[volKey.Name]; !ok {
231+
return notFoundError()
232+
}
202233
delete(cloud.disks, volKey.Name)
203234
return nil
204235
}

pkg/gce-pd-csi-driver/controller_test.go

Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,7 @@ func TestCreateSnapshotArguments(t *testing.T) {
126126
for _, tc := range testCases {
127127
t.Logf("test case: %s", tc.name)
128128
// Setup new driver each time so no interference
129-
gceDriver := GetGCEDriver()
130-
fakeCloudProvider, err := gce.FakeCreateCloudProvider(project, zone)
131-
if err != nil {
132-
t.Fatalf("Failed to create fake cloud provider: %v", err)
133-
}
134-
err = gceDriver.SetupGCEDriver(fakeCloudProvider, nil, nil, metadataservice.NewFakeService(), driver, "vendor-version")
135-
if err != nil {
136-
t.Fatalf("Failed to setup GCE Driver: %v", err)
137-
}
129+
gceDriver := initGCEDriver(t, nil)
138130

139131
// Start Test
140132
resp, err := gceDriver.cs.CreateSnapshot(context.Background(), tc.req)
@@ -195,7 +187,7 @@ func TestDeleteSnapshot(t *testing.T) {
195187
for _, tc := range testCases {
196188
t.Logf("test case: %s", tc.name)
197189
// Setup new driver each time so no interference
198-
gceDriver := initGCEDriver(t)
190+
gceDriver := initGCEDriver(t, nil)
199191

200192
_, err := gceDriver.cs.DeleteSnapshot(context.Background(), tc.req)
201193
//check response
@@ -251,15 +243,7 @@ func TestListSnapshotsArguments(t *testing.T) {
251243
for _, tc := range testCases {
252244
t.Logf("test case: %s", tc.name)
253245
// Setup new driver each time so no interference
254-
gceDriver := GetGCEDriver()
255-
fakeCloudProvider, err := gce.FakeCreateCloudProvider(project, zone)
256-
if err != nil {
257-
t.Fatalf("Failed to create fake cloud provider: %v", err)
258-
}
259-
err = gceDriver.SetupGCEDriver(fakeCloudProvider, nil, nil, metadataservice.NewFakeService(), driver, "vendor-version")
260-
if err != nil {
261-
t.Fatalf("Failed to setup GCE Driver: %v", err)
262-
}
246+
gceDriver := initGCEDriver(t, nil)
263247

264248
createReq := &csi.CreateSnapshotRequest{
265249
Name: name,
@@ -592,15 +576,7 @@ func TestCreateVolumeArguments(t *testing.T) {
592576
for _, tc := range testCases {
593577
t.Logf("test case: %s", tc.name)
594578
// Setup new driver each time so no interference
595-
gceDriver := GetGCEDriver()
596-
fakeCloudProvider, err := gce.FakeCreateCloudProvider(project, zone)
597-
if err != nil {
598-
t.Fatalf("Failed to create fake cloud provider: %v", err)
599-
}
600-
err = gceDriver.SetupGCEDriver(fakeCloudProvider, nil, nil, metadataservice.NewFakeService(), driver, "vendor-version")
601-
if err != nil {
602-
t.Fatalf("Failed to setup GCE Driver: %v", err)
603-
}
579+
gceDriver := initGCEDriver(t, nil)
604580

605581
// Start Test
606582
resp, err := gceDriver.cs.CreateVolume(context.Background(), tc.req)
@@ -661,15 +637,7 @@ func TestCreateVolumeRandomRequisiteTopology(t *testing.T) {
661637
},
662638
}
663639

664-
gceDriver := GetGCEDriver()
665-
fakeCloudProvider, err := gce.FakeCreateCloudProvider(project, zone)
666-
if err != nil {
667-
t.Fatalf("Failed to create fake cloud provider: %v", err)
668-
}
669-
err = gceDriver.SetupGCEDriver(fakeCloudProvider, nil, nil, metadataservice.NewFakeService(), driver, "vendor-version")
670-
if err != nil {
671-
t.Fatalf("Failed to setup GCE Driver: %v", err)
672-
}
640+
gceDriver := initGCEDriver(t, nil)
673641

674642
tZones := map[string]bool{}
675643
// Start Test
@@ -690,14 +658,24 @@ func TestCreateVolumeRandomRequisiteTopology(t *testing.T) {
690658
}
691659
}
692660

661+
func createZonalCloudDisk(name string) *gce.CloudDisk {
662+
return gce.ZonalCloudDisk(&compute.Disk{
663+
Name: name,
664+
})
665+
}
666+
693667
func TestDeleteVolume(t *testing.T) {
694668
testCases := []struct {
695-
name string
696-
req *csi.DeleteVolumeRequest
697-
expErr bool
669+
name string
670+
seedDisks []*gce.CloudDisk
671+
req *csi.DeleteVolumeRequest
672+
expErr bool
698673
}{
699674
{
700675
name: "valid",
676+
seedDisks: []*gce.CloudDisk{
677+
createZonalCloudDisk(name),
678+
},
701679
req: &csi.DeleteVolumeRequest{
702680
VolumeId: testVolumeId,
703681
},
@@ -709,18 +687,38 @@ func TestDeleteVolume(t *testing.T) {
709687
},
710688
expErr: false,
711689
},
690+
{
691+
name: "repairable ID",
692+
seedDisks: []*gce.CloudDisk{
693+
createZonalCloudDisk(name),
694+
},
695+
req: &csi.DeleteVolumeRequest{
696+
VolumeId: common.GenerateUnderspecifiedVolumeID(name, true /* isZonal */),
697+
},
698+
expErr: false,
699+
},
700+
{
701+
name: "non-repairable ID",
702+
seedDisks: []*gce.CloudDisk{
703+
createZonalCloudDisk("nottherightname"),
704+
},
705+
req: &csi.DeleteVolumeRequest{
706+
VolumeId: common.GenerateUnderspecifiedVolumeID(name, true /* isZonal */),
707+
},
708+
expErr: true,
709+
},
712710
}
713711
for _, tc := range testCases {
714712
t.Logf("test case: %s", tc.name)
715713
// Setup new driver each time so no interference
716-
gceDriver := initGCEDriver(t)
714+
gceDriver := initGCEDriver(t, tc.seedDisks)
717715

718716
_, err := gceDriver.cs.DeleteVolume(context.Background(), tc.req)
719717
if err == nil && tc.expErr {
720-
t.Fatalf("Expected error but got none")
718+
t.Errorf("Expected error but got none")
721719
}
722720
if err != nil && !tc.expErr {
723-
t.Fatalf("Did not expect error but got: %v", err)
721+
t.Errorf("Did not expect error but got: %v", err)
724722
}
725723

726724
if err != nil {

pkg/gce-pd-csi-driver/gce-pd-driver_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import (
2121
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
2222
)
2323

24-
func initGCEDriver(t *testing.T) *GCEDriver {
24+
func initGCEDriver(t *testing.T, cloudDisks []*gce.CloudDisk) *GCEDriver {
2525
vendorVersion := "test-vendor"
2626
gceDriver := GetGCEDriver()
27-
fakeCloudProvider, err := gce.FakeCreateCloudProvider(project, zone)
27+
fakeCloudProvider, err := gce.FakeCreateCloudProvider(project, zone, cloudDisks)
2828
if err != nil {
2929
t.Fatalf("Failed to create fake cloud provider: %v", err)
3030
}

test/sanity/sanity_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func TestSanity(t *testing.T) {
3737
// Set up driver and env
3838
gceDriver := driver.GetGCEDriver()
3939

40-
cloudProvider, err := gce.FakeCreateCloudProvider(project, zone)
40+
cloudProvider, err := gce.FakeCreateCloudProvider(project, zone, nil)
4141
if err != nil {
4242
t.Fatalf("Failed to get cloud provider: %v", err)
4343
}

0 commit comments

Comments
 (0)