github.com/aminovpavel/nomad@v0.11.8/command/volume_register_test.go (about) 1 package command 2 3 import ( 4 "testing" 5 6 "github.com/hashicorp/hcl" 7 "github.com/hashicorp/nomad/api" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestVolumeDispatchParse(t *testing.T) { 12 t.Parallel() 13 14 cases := []struct { 15 hcl string 16 t string 17 err string 18 }{{ 19 hcl: ` 20 type = "foo" 21 rando = "bar" 22 `, 23 t: "foo", 24 err: "", 25 }, { 26 hcl: `{"id": "foo", "type": "foo", "other": "bar"}`, 27 t: "foo", 28 err: "", 29 }} 30 31 for _, c := range cases { 32 t.Run(c.hcl, func(t *testing.T) { 33 _, s, err := parseVolumeType(c.hcl) 34 require.Equal(t, c.t, s) 35 if c.err == "" { 36 require.NoError(t, err) 37 } else { 38 require.Contains(t, err.Error(), c.err) 39 } 40 41 }) 42 } 43 } 44 45 func TestCSIVolumeParse(t *testing.T) { 46 t.Parallel() 47 48 cases := []struct { 49 hcl string 50 q *api.CSIVolume 51 err string 52 }{{ 53 hcl: ` 54 id = "foo" 55 type = "csi" 56 namespace = "n" 57 access_mode = "single-node-writer" 58 attachment_mode = "file-system" 59 plugin_id = "p" 60 secrets { 61 mysecret = "secretvalue" 62 } 63 `, 64 q: &api.CSIVolume{ 65 ID: "foo", 66 Namespace: "n", 67 AccessMode: "single-node-writer", 68 AttachmentMode: "file-system", 69 PluginID: "p", 70 Secrets: api.CSISecrets{"mysecret": "secretvalue"}, 71 }, 72 err: "", 73 }, { 74 hcl: ` 75 {"id": "foo", "namespace": "n", "type": "csi", "access_mode": "single-node-writer", "attachment_mode": "file-system", 76 "plugin_id": "p"} 77 `, 78 q: &api.CSIVolume{ 79 ID: "foo", 80 Namespace: "n", 81 AccessMode: "single-node-writer", 82 AttachmentMode: "file-system", 83 PluginID: "p", 84 }, 85 err: "", 86 }} 87 88 for _, c := range cases { 89 t.Run(c.hcl, func(t *testing.T) { 90 ast, err := hcl.ParseString(c.hcl) 91 require.NoError(t, err) 92 vol, err := csiDecodeVolume(ast) 93 require.Equal(t, c.q, vol) 94 if c.err == "" { 95 require.NoError(t, err) 96 } else { 97 require.Contains(t, err.Error(), c.err) 98 } 99 }) 100 } 101 }