From df2aef9a7e708a65dcb8860cf8e95acbc52b9ba1 Mon Sep 17 00:00:00 2001 From: Ben Swartzlander Date: Mon, 4 Feb 2019 16:24:54 -0500 Subject: [PATCH] Use real volumes when testing no capabilities Negative tests that expect the plugin to return InvalidArgument because no capabilities were supplied must use a real volume, otherwise plugins might return NotFound instead. --- pkg/sanity/controller.go | 44 +++++++++++++++++++++++++++++++++++++-- pkg/sanity/node.go | 45 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 85 insertions(+), 4 deletions(-) diff --git a/pkg/sanity/controller.go b/pkg/sanity/controller.go index 8ab1bea3..197d3517 100644 --- a/pkg/sanity/controller.go +++ b/pkg/sanity/controller.go @@ -603,16 +603,56 @@ var _ = DescribeSanity("Controller Service", func(sc *SanityContext) { It("should fail when no volume capabilities are provided", func() { - _, err := c.ValidateVolumeCapabilities( + // Create Volume First + By("creating a single node writer volume") + name := uniqueString("sanity-controller-validate-nocaps") + + vol, err := c.CreateVolume( + context.Background(), + &csi.CreateVolumeRequest{ + Name: name, + VolumeCapabilities: []*csi.VolumeCapability{ + { + AccessType: &csi.VolumeCapability_Mount{ + Mount: &csi.VolumeCapability_MountVolume{}, + }, + AccessMode: &csi.VolumeCapability_AccessMode{ + Mode: csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER, + }, + }, + }, + Secrets: sc.Secrets.CreateVolumeSecret, + Parameters: sc.Config.TestVolumeParameters, + }, + ) + Expect(err).NotTo(HaveOccurred()) + Expect(vol).NotTo(BeNil()) + Expect(vol.GetVolume()).NotTo(BeNil()) + Expect(vol.GetVolume().GetVolumeId()).NotTo(BeEmpty()) + cl.RegisterVolume(name, VolumeInfo{VolumeID: vol.GetVolume().GetVolumeId()}) + + _, err = c.ValidateVolumeCapabilities( context.Background(), &csi.ValidateVolumeCapabilitiesRequest{ - VolumeId: "id", + VolumeId: vol.GetVolume().GetVolumeId(), }) Expect(err).To(HaveOccurred()) serverError, ok := status.FromError(err) Expect(ok).To(BeTrue()) Expect(serverError.Code()).To(Equal(codes.InvalidArgument)) + + By("cleaning up deleting the volume") + + _, err = c.DeleteVolume( + context.Background(), + &csi.DeleteVolumeRequest{ + VolumeId: vol.GetVolume().GetVolumeId(), + Secrets: sc.Secrets.DeleteVolumeSecret, + }, + ) + Expect(err).NotTo(HaveOccurred()) + cl.UnregisterVolume(name) }) It("should return appropriate values (no optional values added)", func() { diff --git a/pkg/sanity/node.go b/pkg/sanity/node.go index af22c8a3..41f05440 100644 --- a/pkg/sanity/node.go +++ b/pkg/sanity/node.go @@ -297,10 +297,39 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { }) It("should fail when no volume capability is provided", func() { - _, err := c.NodeStageVolume( + + // Create Volume First + By("creating a single node writer volume") + name := uniqueString("sanity-node-stage-nocaps") + + vol, err := s.CreateVolume( + context.Background(), + &csi.CreateVolumeRequest{ + Name: name, + VolumeCapabilities: []*csi.VolumeCapability{ + { + AccessType: &csi.VolumeCapability_Mount{ + Mount: &csi.VolumeCapability_MountVolume{}, + }, + AccessMode: &csi.VolumeCapability_AccessMode{ + Mode: csi.VolumeCapability_AccessMode_SINGLE_NODE_WRITER, + }, + }, + }, + Secrets: sc.Secrets.CreateVolumeSecret, + Parameters: sc.Config.TestVolumeParameters, + }, + ) + Expect(err).NotTo(HaveOccurred()) + Expect(vol).NotTo(BeNil()) + Expect(vol.GetVolume()).NotTo(BeNil()) + Expect(vol.GetVolume().GetVolumeId()).NotTo(BeEmpty()) + cl.RegisterVolume(name, VolumeInfo{VolumeID: vol.GetVolume().GetVolumeId()}) + + _, err = c.NodeStageVolume( context.Background(), &csi.NodeStageVolumeRequest{ - VolumeId: "id", + VolumeId: vol.GetVolume().GetVolumeId(), StagingTargetPath: sc.Config.StagingPath, PublishContext: map[string]string{ "device": device, @@ -313,6 +342,18 @@ var _ = DescribeSanity("Node Service", func(sc *SanityContext) { serverError, ok := status.FromError(err) Expect(ok).To(BeTrue()) Expect(serverError.Code()).To(Equal(codes.InvalidArgument)) + + By("cleaning up deleting the volume") + + _, err = s.DeleteVolume( + context.Background(), + &csi.DeleteVolumeRequest{ + VolumeId: vol.GetVolume().GetVolumeId(), + Secrets: sc.Secrets.DeleteVolumeSecret, + }, + ) + Expect(err).NotTo(HaveOccurred()) + cl.UnregisterVolume(name) }) })