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  }