From 6455d9bfd75cf2045e68429cda38fa6fcafbc3d4 Mon Sep 17 00:00:00 2001 From: Tim Gross Date: Mon, 29 Mar 2021 16:04:53 -0400 Subject: [PATCH] CSI: fix misleading HTTP test The HTTP test to create CSI volumes depends on having a controller plugin to talk to, but the test was using a node-only plugin, which allows it to silently ignore the missing controller. --- command/agent/csi_endpoint_test.go | 24 ++++++++++++++++-------- nomad/state/testing.go | 2 ++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/command/agent/csi_endpoint_test.go b/command/agent/csi_endpoint_test.go index 8b2ace2e1..bff283697 100644 --- a/command/agent/csi_endpoint_test.go +++ b/command/agent/csi_endpoint_test.go @@ -58,7 +58,7 @@ func TestHTTP_CSIEndpointUtils(t *testing.T) { require.Equal(t, "bar", tops[0].Segments["foo"]) } -func TestHTTP_CSIEndpointVolume(t *testing.T) { +func TestHTTP_CSIEndpointRegisterVolume(t *testing.T) { t.Parallel() httpTest(t, nil, func(s *TestAgent) { server := s.Agent.Server() @@ -95,8 +95,17 @@ func TestHTTP_CSIEndpointVolume(t *testing.T) { resp = httptest.NewRecorder() _, err = s.Server.CSIVolumeSpecificRequest(resp, req) require.Equal(t, CodedError(400, "detach requires node ID"), err) + }) +} - cArgs := structs.CSIVolumeCreateRequest{ +func TestHTTP_CSIEndpointCreateVolume(t *testing.T) { + t.Parallel() + httpTest(t, nil, func(s *TestAgent) { + server := s.Agent.Server() + cleanup := state.CreateTestCSIPlugin(server.State(), "foo") + defer cleanup() + + args := structs.CSIVolumeCreateRequest{ Volumes: []*structs.CSIVolume{{ ID: "baz", PluginID: "foo", @@ -104,19 +113,18 @@ func TestHTTP_CSIEndpointVolume(t *testing.T) { AttachmentMode: structs.CSIVolumeAttachmentModeFilesystem, }}, } - body = encodeReq(cArgs) - req, err = http.NewRequest("PUT", "/v1/volumes/create", body) + body := encodeReq(args) + req, err := http.NewRequest("PUT", "/v1/volumes/create", body) require.NoError(t, err) - resp = httptest.NewRecorder() + resp := httptest.NewRecorder() _, err = s.Server.CSIVolumesRequest(resp, req) - require.NoError(t, err, "put error") + require.Error(t, err, "controller validate volume: No path to node") req, err = http.NewRequest("DELETE", "/v1/volume/csi/baz", nil) require.NoError(t, err) resp = httptest.NewRecorder() _, err = s.Server.CSIVolumeSpecificRequest(resp, req) - require.NoError(t, err, "delete error") - + require.Error(t, err, "volume not found: baz") }) } diff --git a/nomad/state/testing.go b/nomad/state/testing.go index 39072010b..554d21fb5 100644 --- a/nomad/state/testing.go +++ b/nomad/state/testing.go @@ -81,6 +81,8 @@ func createTestCSIPlugin(s *StateStore, id string, requiresController bool) func SupportsAttachDetach: true, SupportsListVolumes: true, SupportsListVolumesAttachedNodes: false, + SupportsCreateDeleteSnapshot: true, + SupportsListSnapshots: true, }, }, }