1// +build !integration 2 3package referees 4 5import ( 6 "testing" 7 8 "github.com/sirupsen/logrus" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/mock" 11) 12 13func Test_CreateReferees(t *testing.T) { 14 fakeMockMetricsExecutor := func(t *testing.T) (interface{}, func(t mock.TestingT) bool) { 15 return struct{}{}, func(t mock.TestingT) bool { return false } 16 } 17 18 mockMetricsExecutor := func(t *testing.T) (interface{}, func(t mock.TestingT) bool) { 19 m := new(MockMetricsExecutor) 20 21 m.On("GetMetricsSelector").Return(`name="value"`).Maybe() 22 23 return m, m.AssertExpectations 24 } 25 26 testCases := map[string]struct { 27 mockExecutor func(t *testing.T) (interface{}, func(t mock.TestingT) bool) 28 config *Config 29 expectedReferees []Referee 30 }{ 31 "Executor doesn't support any referee": { 32 mockExecutor: fakeMockMetricsExecutor, 33 config: &Config{Metrics: &MetricsRefereeConfig{QueryInterval: 0}}, 34 expectedReferees: nil, 35 }, 36 "Executor supports metrics referee": { 37 mockExecutor: mockMetricsExecutor, 38 config: &Config{Metrics: &MetricsRefereeConfig{QueryInterval: 0}}, 39 expectedReferees: []Referee{&MetricsReferee{}}, 40 }, 41 "No config provided": { 42 mockExecutor: mockMetricsExecutor, 43 config: nil, 44 expectedReferees: nil, 45 }, 46 } 47 48 for testName, test := range testCases { 49 t.Run(testName, func(t *testing.T) { 50 logger := logrus.WithField("test", t.Name()) 51 52 executor, assertExpectations := test.mockExecutor(t) 53 defer assertExpectations(t) 54 55 referees := CreateReferees(executor, test.config, logger) 56 57 if test.expectedReferees == nil { 58 assert.Nil(t, referees) 59 return 60 } 61 62 assert.Len(t, referees, len(test.expectedReferees)) 63 for i, referee := range test.expectedReferees { 64 assert.IsType(t, referee, referees[i]) 65 } 66 }) 67 } 68} 69