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  }