github.com/xmidt-org/webpa-common@v1.11.9/service/instancers_test.go (about) 1 package service 2 3 import ( 4 "testing" 5 6 "github.com/go-kit/kit/sd" 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 "github.com/xmidt-org/webpa-common/logging" 10 ) 11 12 func testNewContextualInstancerEmpty(t *testing.T, m map[string]interface{}) { 13 var ( 14 assert = assert.New(t) 15 next = new(MockInstancer) 16 ) 17 18 i := NewContextualInstancer(next, m) 19 assert.Equal(next, i) 20 _, ok := i.(logging.Contextual) 21 assert.False(ok) 22 23 next.AssertExpectations(t) 24 } 25 26 func testNewContextualInstancerWithMetadata(t *testing.T) { 27 var ( 28 assert = assert.New(t) 29 require = require.New(t) 30 31 next = new(MockInstancer) 32 m = map[string]interface{}{"key": "value"} 33 ) 34 35 i := NewContextualInstancer(next, m) 36 require.NotNil(i) 37 assert.NotEqual(next, i) 38 39 c, ok := i.(logging.Contextual) 40 require.True(ok) 41 require.NotNil(c) 42 43 assert.Equal(m, c.Metadata()) 44 } 45 46 func TestNewContextualInstancer(t *testing.T) { 47 t.Run("Empty", func(t *testing.T) { 48 testNewContextualInstancerEmpty(t, map[string]interface{}{}) 49 }) 50 51 t.Run("Nil", func(t *testing.T) { 52 testNewContextualInstancerEmpty(t, nil) 53 }) 54 55 t.Run("WithMetadata", testNewContextualInstancerWithMetadata) 56 } 57 58 func testInstancers(t *testing.T, is Instancers) { 59 assert := assert.New(t) 60 61 assert.Equal(0, is.Len()) 62 assert.False(is.Has("nosuch")) 63 i, ok := is.Get("nosuch") 64 assert.Nil(i) 65 assert.False(ok) 66 67 assert.NotPanics(func() { is.Stop() }) 68 69 var ( 70 child1 = new(MockInstancer) 71 child2 = new(MockInstancer) 72 ) 73 74 is.Set("child1", child1) 75 assert.Equal(1, is.Len()) 76 77 assert.False(is.Has("nosuch")) 78 i, ok = is.Get("nosuch") 79 assert.Nil(i) 80 assert.False(ok) 81 82 i, ok = is.Get("child1") 83 assert.Equal(child1, i) 84 assert.True(ok) 85 86 is.Set("child2", child2) 87 assert.Equal(2, is.Len()) 88 89 assert.False(is.Has("nosuch")) 90 i, ok = is.Get("nosuch") 91 assert.Nil(i) 92 assert.False(ok) 93 94 i, ok = is.Get("child1") 95 assert.Equal(child1, i) 96 assert.True(ok) 97 98 i, ok = is.Get("child2") 99 assert.Equal(child2, i) 100 assert.True(ok) 101 102 child1.On("Stop").Once() 103 child2.On("Stop").Once() 104 assert.NotPanics(func() { is.Stop() }) 105 106 assert.Equal( 107 map[string]sd.Instancer{ 108 "child1": child1, 109 "child2": child2, 110 }, 111 map[string]sd.Instancer(is.Copy()), 112 ) 113 114 child1.AssertExpectations(t) 115 child2.AssertExpectations(t) 116 } 117 118 func TestInstancers(t *testing.T) { 119 t.Run("Empty", func(t *testing.T) { 120 testInstancers(t, Instancers{}) 121 testInstancers(t, Instancers{}.Copy()) 122 }) 123 124 t.Run("Nil", func(t *testing.T) { 125 testInstancers(t, nil) 126 testInstancers(t, Instancers(nil).Copy()) 127 }) 128 }