github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/nomad/volumewatcher/volume_watcher_test.go (about) 1 package volumewatcher 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/hashicorp/nomad/helper/testlog" 8 "github.com/hashicorp/nomad/nomad/mock" 9 "github.com/hashicorp/nomad/nomad/state" 10 "github.com/hashicorp/nomad/nomad/structs" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestVolumeWatch_Reap(t *testing.T) { 15 t.Parallel() 16 require := require.New(t) 17 18 srv := &MockRPCServer{ 19 state: state.TestStateStore(t), 20 } 21 22 plugin := mock.CSIPlugin() 23 node := testNode(plugin, srv.State()) 24 alloc := mock.Alloc() 25 alloc.NodeID = node.ID 26 alloc.ClientStatus = structs.AllocClientStatusComplete 27 vol := testVolume(plugin, alloc, node.ID) 28 vol.PastClaims = vol.ReadClaims 29 30 ctx, exitFn := context.WithCancel(context.Background()) 31 w := &volumeWatcher{ 32 v: vol, 33 rpc: srv, 34 state: srv.State(), 35 ctx: ctx, 36 exitFn: exitFn, 37 logger: testlog.HCLogger(t), 38 } 39 40 err := w.volumeReapImpl(vol) 41 require.NoError(err) 42 43 // past claim from a previous pass 44 vol.PastClaims = map[string]*structs.CSIVolumeClaim{ 45 alloc.ID: { 46 NodeID: node.ID, 47 Mode: structs.CSIVolumeClaimRead, 48 State: structs.CSIVolumeClaimStateNodeDetached, 49 }, 50 } 51 err = w.volumeReapImpl(vol) 52 require.NoError(err) 53 require.Len(vol.PastClaims, 1) 54 55 // claim emitted by a GC event 56 vol.PastClaims = map[string]*structs.CSIVolumeClaim{ 57 "": { 58 NodeID: node.ID, 59 Mode: structs.CSIVolumeClaimGC, 60 }, 61 } 62 err = w.volumeReapImpl(vol) 63 require.NoError(err) 64 require.Len(vol.PastClaims, 2) // alloc claim + GC claim 65 66 // release claims of a previously GC'd allocation 67 vol.ReadAllocs[alloc.ID] = nil 68 vol.PastClaims = map[string]*structs.CSIVolumeClaim{ 69 "": { 70 NodeID: node.ID, 71 Mode: structs.CSIVolumeClaimRead, 72 }, 73 } 74 err = w.volumeReapImpl(vol) 75 require.NoError(err) 76 require.Len(vol.PastClaims, 2) // alloc claim + GC claim 77 }