Skip to content

Commit 4f1164b

Browse files
committed
Unit and E2E tests for NodGetVolumeStats
1 parent 330efe6 commit 4f1164b

File tree

6 files changed

+268
-99
lines changed

6 files changed

+268
-99
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func initBlockingGCEDriver(t *testing.T, cloudDisks []*gce.CloudDisk, readyToExe
4444
func initGCEDriverWithCloudProvider(t *testing.T, cloudProvider gce.GCECompute) *GCEDriver {
4545
vendorVersion := "test-vendor"
4646
gceDriver := GetGCEDriver()
47-
err := gceDriver.SetupGCEDriver(cloudProvider, nil, nil, metadataservice.NewFakeService(), driver, vendorVersion)
47+
err := gceDriver.SetupGCEDriver(cloudProvider, nil, nil, metadataservice.NewFakeService(), nil, driver, vendorVersion)
4848
if err != nil {
4949
t.Fatalf("Failed to setup GCE Driver: %v", err)
5050
}

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import (
2626
func TestGetPluginInfo(t *testing.T) {
2727
vendorVersion := "test-vendor"
2828
gceDriver := GetGCEDriver()
29-
err := gceDriver.SetupGCEDriver(nil, nil, nil, metadataservice.NewFakeService(), driver, vendorVersion)
29+
err := gceDriver.SetupGCEDriver(nil, nil, nil, metadataservice.NewFakeService(), nil, driver, vendorVersion)
3030
if err != nil {
3131
t.Fatalf("Failed to setup GCE Driver: %v", err)
3232
}
@@ -48,7 +48,7 @@ func TestGetPluginInfo(t *testing.T) {
4848

4949
func TestGetPluginCapabilities(t *testing.T) {
5050
gceDriver := GetGCEDriver()
51-
err := gceDriver.SetupGCEDriver(nil, nil, nil, metadataservice.NewFakeService(), driver, "test-vendor")
51+
err := gceDriver.SetupGCEDriver(nil, nil, nil, metadataservice.NewFakeService(), nil, driver, "test-vendor")
5252
if err != nil {
5353
t.Fatalf("Failed to setup GCE Driver: %v", err)
5454
}
@@ -80,7 +80,7 @@ func TestGetPluginCapabilities(t *testing.T) {
8080

8181
func TestProbe(t *testing.T) {
8282
gceDriver := GetGCEDriver()
83-
err := gceDriver.SetupGCEDriver(nil, nil, nil, metadataservice.NewFakeService(), driver, "test-vendor")
83+
err := gceDriver.SetupGCEDriver(nil, nil, nil, metadataservice.NewFakeService(), nil, driver, "test-vendor")
8484
if err != nil {
8585
t.Fatalf("Failed to setup GCE Driver: %v", err)
8686
}

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

+65-2
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func getTestGCEDriverWithCustomMounter(t *testing.T, mounter *mount.SafeFormatAn
4444

4545
func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, deviceUtils mountmanager.DeviceUtils, metaService metadataservice.MetadataService) *GCEDriver {
4646
gceDriver := GetGCEDriver()
47-
err := gceDriver.SetupGCEDriver(nil, mounter, deviceUtils, metaService, driver, "test-vendor")
47+
err := gceDriver.SetupGCEDriver(nil, mounter, deviceUtils, metaService, mountmanager.NewFakeStatter(), driver, "test-vendor")
4848
if err != nil {
4949
t.Fatalf("Failed to setup GCE Driver: %v", err)
5050
}
@@ -53,13 +53,76 @@ func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, dev
5353

5454
func getTestBlockingGCEDriver(t *testing.T, readyToExecute chan chan struct{}) *GCEDriver {
5555
gceDriver := GetGCEDriver()
56-
err := gceDriver.SetupGCEDriver(nil, mountmanager.NewFakeSafeBlockingMounter(readyToExecute), mountmanager.NewFakeDeviceUtils(), metadataservice.NewFakeService(), driver, "test-vendor")
56+
err := gceDriver.SetupGCEDriver(nil, mountmanager.NewFakeSafeBlockingMounter(readyToExecute), mountmanager.NewFakeDeviceUtils(), metadataservice.NewFakeService(), nil, driver, "test-vendor")
5757
if err != nil {
5858
t.Fatalf("Failed to setup GCE Driver: %v", err)
5959
}
6060
return gceDriver
6161
}
6262

63+
func TestNodeGetVolumeStats(t *testing.T) {
64+
gceDriver := getTestGCEDriver(t)
65+
ns := gceDriver.ns
66+
67+
req := &csi.NodePublishVolumeRequest{
68+
VolumeId: defaultVolumeID,
69+
TargetPath: defaultTargetPath,
70+
StagingTargetPath: defaultStagingPath,
71+
Readonly: false,
72+
VolumeCapability: stdVolCap,
73+
}
74+
_, err := ns.NodePublishVolume(context.Background(), req)
75+
if err != nil {
76+
t.Fatalf("Failed to set up test by publishing default vol: %v", err)
77+
}
78+
79+
testCases := []struct {
80+
name string
81+
volumeID string
82+
volumePath string
83+
expectErr bool
84+
}{
85+
{
86+
name: "normal",
87+
volumeID: defaultVolumeID,
88+
volumePath: defaultTargetPath,
89+
},
90+
{
91+
name: "no vol id",
92+
volumePath: defaultTargetPath,
93+
expectErr: true,
94+
},
95+
{
96+
name: "no vol path",
97+
volumeID: defaultVolumeID,
98+
expectErr: true,
99+
},
100+
{
101+
name: "bad vol path",
102+
volumeID: defaultVolumeID,
103+
volumePath: "/mnt/fake",
104+
expectErr: true,
105+
},
106+
}
107+
108+
for _, tc := range testCases {
109+
t.Run(tc.name, func(t *testing.T) {
110+
111+
req := &csi.NodeGetVolumeStatsRequest{
112+
VolumeId: tc.volumeID,
113+
VolumePath: tc.volumePath,
114+
}
115+
_, err := ns.NodeGetVolumeStats(context.Background(), req)
116+
if err != nil && !tc.expectErr {
117+
t.Fatalf("Got unexpected err: %v", err)
118+
}
119+
if err == nil && tc.expectErr {
120+
t.Fatal("Did not get error but expected one")
121+
}
122+
})
123+
}
124+
}
125+
63126
func TestNodeGetVolumeLimits(t *testing.T) {
64127

65128
gceDriver := getTestGCEDriver(t)

test/e2e/tests/multi_zone_e2e_test.go

+77-34
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,46 @@ var _ = Describe("GCE PD CSI Driver Multi-Zone", func() {
139139
testAttachWriteReadDetach(volID, volName, testContext.Instance, testContext.Client, readOnly)
140140
i = i + 1
141141
}
142-
143142
})
144-
145143
})
146144

145+
type verifyArgs struct {
146+
publishDir string
147+
}
148+
149+
type verifyFunc func(verifyArgs) error
150+
147151
func testAttachWriteReadDetach(volID string, volName string, instance *remote.InstanceInfo, client *remote.CsiClient, readOnly bool) error {
148-
var err error
152+
var testFileContents = "test"
153+
writeFile := func(a verifyArgs) error {
154+
if !readOnly {
155+
// Write a file
156+
testFile := filepath.Join(a.publishDir, "testfile")
157+
err := testutils.WriteFile(instance, testFile, testFileContents)
158+
if err != nil {
159+
return fmt.Errorf("Failed to write file: %v", err)
160+
}
161+
}
162+
return nil
163+
}
149164

165+
verifyReadFile := func(a verifyArgs) error {
166+
// Read File
167+
secondTestFile := filepath.Join(a.publishDir, "testfile")
168+
readContents, err := testutils.ReadFile(instance, secondTestFile)
169+
if err != nil {
170+
return fmt.Errorf("ReadFile failed with error: %v", err)
171+
}
172+
if strings.TrimSpace(string(readContents)) != testFileContents {
173+
return fmt.Errorf("wanted test file content: %s, got content: %s", testFileContents, readContents)
174+
}
175+
return nil
176+
}
177+
return testLifecycleWithVerify(volID, volName, instance, client, readOnly, false /* fs */, writeFile, verifyReadFile)
178+
}
179+
180+
func testLifecycleWithVerify(volID string, volName string, instance *remote.InstanceInfo, client *remote.CsiClient, readOnly, useBlock bool, firstMountVerify, secondMountVerify verifyFunc) error {
181+
var err error
150182
klog.Infof("Starting testAttachWriteReadDetach with volume %v node %v with readonly %v\n", volID, instance.GetNodeID(), readOnly)
151183
// Attach Disk
152184
err = client.ControllerPublishVolume(volID, instance.GetNodeID())
@@ -165,7 +197,13 @@ func testAttachWriteReadDetach(volID string, volName string, instance *remote.In
165197

166198
// Stage Disk
167199
stageDir := filepath.Join("/tmp/", volName, "stage")
168-
err = client.NodeStageExt4Volume(volID, stageDir)
200+
if useBlock {
201+
err = client.NodeStageBlockVolume(volID, stageDir)
202+
} else {
203+
err = client.NodeStageExt4Volume(volID, stageDir)
204+
}
205+
206+
//err = client.NodeStageExt4Volume(volID, stageDir)
169207
if err != nil {
170208
return fmt.Errorf("NodeStageExt4Volume failed with error: %v", err)
171209
}
@@ -185,33 +223,13 @@ func testAttachWriteReadDetach(volID string, volName string, instance *remote.In
185223

186224
// Mount Disk
187225
publishDir := filepath.Join("/tmp/", volName, "mount")
188-
err = client.NodePublishVolume(volID, stageDir, publishDir)
189-
if err != nil {
190-
return fmt.Errorf("NodePublishVolume failed with error: %v", err)
191-
}
192-
err = testutils.ForceChmod(instance, filepath.Join("/tmp/", volName), "777")
193-
if err != nil {
194-
return fmt.Errorf("Chmod failed with error: %v", err)
195-
}
196-
testFileContents := "test"
197-
if !readOnly {
198-
// Write a file
199-
testFile := filepath.Join(publishDir, "testfile")
200-
err = testutils.WriteFile(instance, testFile, testFileContents)
201-
if err != nil {
202-
return fmt.Errorf("Failed to write file: %v", err)
203-
}
204-
}
205226

206-
// Unmount Disk
207-
err = client.NodeUnpublishVolume(volID, publishDir)
208-
if err != nil {
209-
return fmt.Errorf("NodeUnpublishVolume failed with error: %v", err)
227+
if useBlock {
228+
err = client.NodePublishBlockVolume(volID, stageDir, publishDir)
229+
} else {
230+
err = client.NodePublishVolume(volID, stageDir, publishDir)
210231
}
211232

212-
// Mount disk somewhere else
213-
secondPublishDir := filepath.Join("/tmp/", volName, "secondmount")
214-
err = client.NodePublishVolume(volID, stageDir, secondPublishDir)
215233
if err != nil {
216234
return fmt.Errorf("NodePublishVolume failed with error: %v", err)
217235
}
@@ -220,20 +238,45 @@ func testAttachWriteReadDetach(volID string, volName string, instance *remote.In
220238
return fmt.Errorf("Chmod failed with error: %v", err)
221239
}
222240

223-
// Read File
224-
secondTestFile := filepath.Join(secondPublishDir, "testfile")
225-
readContents, err := testutils.ReadFile(instance, secondTestFile)
241+
a := verifyArgs{
242+
publishDir: publishDir,
243+
}
244+
245+
err = firstMountVerify(a)
226246
if err != nil {
227-
return fmt.Errorf("ReadFile failed with error: %v", err)
247+
return fmt.Errorf("failed to verify after first mount to %s: %v", publishDir, err)
228248
}
229-
Expect(strings.TrimSpace(string(readContents))).To(Equal(testFileContents))
230249

231250
// Unmount Disk
232-
err = client.NodeUnpublishVolume(volID, secondPublishDir)
251+
err = client.NodeUnpublishVolume(volID, publishDir)
233252
if err != nil {
234253
return fmt.Errorf("NodeUnpublishVolume failed with error: %v", err)
235254
}
236255

256+
if secondMountVerify != nil {
257+
// Mount disk somewhere else
258+
secondPublishDir := filepath.Join("/tmp/", volName, "secondmount")
259+
err = client.NodePublishVolume(volID, stageDir, secondPublishDir)
260+
if err != nil {
261+
return fmt.Errorf("NodePublishVolume failed with error: %v", err)
262+
}
263+
err = testutils.ForceChmod(instance, filepath.Join("/tmp/", volName), "777")
264+
if err != nil {
265+
return fmt.Errorf("Chmod failed with error: %v", err)
266+
}
267+
268+
b := verifyArgs{
269+
publishDir: secondPublishDir,
270+
}
271+
secondMountVerify(b)
272+
273+
// Unmount Disk
274+
err = client.NodeUnpublishVolume(volID, secondPublishDir)
275+
if err != nil {
276+
return fmt.Errorf("NodeUnpublishVolume failed with error: %v", err)
277+
}
278+
}
279+
237280
klog.Infof("Completed testAttachWriteReadDetach with volume %v node %v\n", volID, instance.GetNodeID())
238281
return nil
239282
}

0 commit comments

Comments
 (0)