github.com/bigcommerce/nomad@v0.9.3-bc/client/pluginmanager/group_test.go (about) 1 package pluginmanager 2 3 import ( 4 "sync" 5 "testing" 6 7 "github.com/hashicorp/nomad/helper/testlog" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestPluginGroup_RegisterAndRun(t *testing.T) { 12 t.Parallel() 13 require := require.New(t) 14 15 var hasRun bool 16 var wg sync.WaitGroup 17 wg.Add(1) 18 manager := &MockPluginManager{RunF: func() { 19 hasRun = true 20 wg.Done() 21 }} 22 23 group := New(testlog.HCLogger(t)) 24 require.NoError(group.RegisterAndRun(manager)) 25 wg.Wait() 26 require.True(hasRun) 27 } 28 29 func TestPluginGroup_Shutdown(t *testing.T) { 30 t.Parallel() 31 require := require.New(t) 32 33 var stack []int 34 var stackMu sync.Mutex 35 var runWg sync.WaitGroup 36 var shutdownWg sync.WaitGroup 37 group := New(testlog.HCLogger(t)) 38 for i := 1; i < 4; i++ { 39 i := i 40 runWg.Add(1) 41 shutdownWg.Add(1) 42 manager := &MockPluginManager{RunF: func() { 43 stackMu.Lock() 44 defer stackMu.Unlock() 45 defer runWg.Done() 46 stack = append(stack, i) 47 }, ShutdownF: func() { 48 stackMu.Lock() 49 defer stackMu.Unlock() 50 defer shutdownWg.Done() 51 idx := len(stack) - 1 52 val := stack[idx] 53 require.Equal(i, val) 54 stack = stack[:idx] 55 }} 56 require.NoError(group.RegisterAndRun(manager)) 57 runWg.Wait() 58 } 59 group.Shutdown() 60 shutdownWg.Wait() 61 require.Empty(stack) 62 63 require.Error(group.RegisterAndRun(&MockPluginManager{})) 64 }