github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/kafka/topics_test.go (about) 1 package kafka 2 3 import ( 4 "errors" 5 "strings" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 ) 10 11 type mockKafkaClient struct { 12 topics []string 13 err error 14 } 15 16 func (m *mockKafkaClient) RefreshMetadata(topics ...string) error { 17 return nil 18 } 19 20 func (m *mockKafkaClient) Topics() ([]string, error) { 21 return m.topics, m.err 22 } 23 24 func Test_NewTopicManager(t *testing.T) { 25 t.Parallel() 26 27 for _, tt := range []struct { 28 in []string 29 expectedErr bool 30 }{ 31 { 32 []string{""}, 33 true, 34 }, 35 { 36 []string{"^("}, 37 true, 38 }, 39 { 40 []string{"foo"}, 41 false, 42 }, 43 { 44 []string{"foo", "^foo.*"}, 45 false, 46 }, 47 } { 48 tt := tt 49 t.Run(strings.Join(tt.in, ","), func(t *testing.T) { 50 t.Parallel() 51 _, err := newTopicManager(&mockKafkaClient{}, tt.in) 52 if tt.expectedErr { 53 require.Error(t, err) 54 return 55 } 56 require.NoError(t, err) 57 }) 58 } 59 } 60 61 func Test_Topics(t *testing.T) { 62 t.Parallel() 63 64 for _, tt := range []struct { 65 manager *topicManager 66 expected []string 67 expectedErr bool 68 }{ 69 { 70 mustNewTopicsManager(&mockKafkaClient{err: errors.New("")}, []string{"foo"}), 71 []string{}, 72 true, 73 }, 74 { 75 mustNewTopicsManager(&mockKafkaClient{topics: []string{"foo", "foobar", "buzz"}}, []string{"^foo"}), 76 []string{"foo", "foobar"}, 77 false, 78 }, 79 { 80 mustNewTopicsManager(&mockKafkaClient{topics: []string{"foo", "foobar", "buzz"}}, []string{"^foo.*", "buzz"}), 81 []string{"buzz", "foo", "foobar"}, 82 false, 83 }, 84 } { 85 tt := tt 86 t.Run("", func(t *testing.T) { 87 t.Parallel() 88 89 actual, err := tt.manager.Topics() 90 if tt.expectedErr { 91 require.Error(t, err) 92 return 93 } 94 require.NoError(t, err) 95 require.Equal(t, tt.expected, actual) 96 }) 97 } 98 } 99 100 func mustNewTopicsManager(client topicClient, topics []string) *topicManager { 101 t, err := newTopicManager(client, topics) 102 if err != nil { 103 panic(err) 104 } 105 return t 106 }