github.com/rudderlabs/rudder-go-kit@v0.30.0/kafkaclient/config_test.go (about) 1 package client 2 3 import ( 4 "testing" 5 6 "github.com/segmentio/kafka-go/sasl/plain" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestScramHashGeneratorString(t *testing.T) { 11 t.Run("ok", func(t *testing.T) { 12 tests := []struct { 13 generator ScramHashGenerator 14 expected string 15 }{ 16 {ScramPlainText, "plain"}, 17 {ScramSHA256, "sha256"}, 18 {ScramSHA512, "sha512"}, 19 } 20 21 for _, test := range tests { 22 require.Equal(t, test.expected, test.generator.String()) 23 } 24 }) 25 t.Run("panic", func(t *testing.T) { 26 require.Panics(t, func() { 27 _ = ScramHashGenerator(123).String() 28 }) 29 }) 30 } 31 32 func TestScramHashGeneratorFromString(t *testing.T) { 33 t.Run("ok", func(t *testing.T) { 34 tests := []struct { 35 generator string 36 expected ScramHashGenerator 37 }{ 38 {"plain", ScramPlainText}, 39 {"sha256", ScramSHA256}, 40 {"sha512", ScramSHA512}, 41 } 42 43 for _, test := range tests { 44 generator, err := ScramHashGeneratorFromString(test.generator) 45 require.NoError(t, err) 46 require.Equal(t, test.expected, generator) 47 } 48 }) 49 t.Run("error", func(t *testing.T) { 50 _, err := ScramHashGeneratorFromString("foo") 51 require.Error(t, err) 52 }) 53 } 54 55 func TestTLS(t *testing.T) { 56 t.Run("empty configuration", func(t *testing.T) { 57 conf, err := (&TLS{}).build() 58 require.Nil(t, conf) 59 require.ErrorContains(t, err, "invalid TLS configuration, either provide certificates or skip validation") 60 }) 61 t.Run("can run with system cert pool", func(t *testing.T) { 62 conf, err := (&TLS{WithSystemCertPool: true}).build() 63 require.NoError(t, err) 64 require.NotNil(t, conf) 65 }) 66 t.Run("it fails with invalid ca cert", func(t *testing.T) { 67 conf, err := (&TLS{CACertificate: []byte("foo")}).build() 68 require.Nil(t, conf) 69 require.ErrorContains(t, err, "could not append certs from PEM") 70 }) 71 t.Run("it fails with invalid cert and key", func(t *testing.T) { 72 conf, err := (&TLS{Cert: []byte("foo"), Key: []byte("bar"), WithSystemCertPool: true}).build() 73 require.Nil(t, conf) 74 require.ErrorContains(t, err, "could not get TLS certificate") 75 }) 76 } 77 78 func TestSASL(t *testing.T) { 79 t.Run("plain text", func(t *testing.T) { 80 mechanism, err := (&SASL{ 81 ScramHashGen: ScramPlainText, 82 Username: "foo", 83 Password: "bar", 84 }).build() 85 require.NoError(t, err) 86 require.NotNil(t, mechanism) 87 require.IsType(t, plain.Mechanism{}, mechanism) 88 }) 89 t.Run("sha256", func(t *testing.T) { 90 mechanism, err := (&SASL{ 91 ScramHashGen: ScramSHA256, 92 Username: "foo", 93 Password: "bar", 94 }).build() 95 require.NoError(t, err) 96 require.NotNil(t, mechanism) 97 require.Equal(t, "SCRAM-SHA-256", mechanism.Name()) 98 }) 99 t.Run("sha512", func(t *testing.T) { 100 mechanism, err := (&SASL{ 101 ScramHashGen: ScramSHA512, 102 Username: "foo", 103 Password: "bar", 104 }).build() 105 require.NoError(t, err) 106 require.NotNil(t, mechanism) 107 require.Equal(t, "SCRAM-SHA-512", mechanism.Name()) 108 }) 109 t.Run("error", func(t *testing.T) { 110 mechanism, err := (&SASL{ 111 ScramHashGen: ScramHashGenerator(123), 112 Username: "foo", 113 Password: "bar", 114 }).build() 115 require.Nil(t, mechanism) 116 require.Error(t, err) 117 }) 118 }