go.opentelemetry.io/contrib/instrumentation/github.com/Shopify/sarama/otelsarama@v0.43.0/message_test.go (about)

     1  // Copyright The OpenTelemetry Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package otelsarama
    16  
    17  import (
    18  	"testing"
    19  
    20  	"github.com/Shopify/sarama"
    21  	"github.com/stretchr/testify/assert"
    22  )
    23  
    24  func TestProducerMessageCarrierGet(t *testing.T) {
    25  	testCases := []struct {
    26  		name     string
    27  		carrier  ProducerMessageCarrier
    28  		key      string
    29  		expected string
    30  	}{
    31  		{
    32  			name: "exists",
    33  			carrier: ProducerMessageCarrier{msg: &sarama.ProducerMessage{Headers: []sarama.RecordHeader{
    34  				{Key: []byte("foo"), Value: []byte("bar")},
    35  			}}},
    36  			key:      "foo",
    37  			expected: "bar",
    38  		},
    39  		{
    40  			name:     "not exists",
    41  			carrier:  ProducerMessageCarrier{msg: &sarama.ProducerMessage{Headers: []sarama.RecordHeader{}}},
    42  			key:      "foo",
    43  			expected: "",
    44  		},
    45  	}
    46  
    47  	for _, tc := range testCases {
    48  		t.Run(tc.name, func(t *testing.T) {
    49  			result := tc.carrier.Get(tc.key)
    50  			assert.Equal(t, tc.expected, result)
    51  		})
    52  	}
    53  }
    54  
    55  func TestProducerMessageCarrierSet(t *testing.T) {
    56  	msg := sarama.ProducerMessage{Headers: []sarama.RecordHeader{
    57  		{Key: []byte("foo"), Value: []byte("bar")},
    58  	}}
    59  	carrier := ProducerMessageCarrier{msg: &msg}
    60  
    61  	carrier.Set("foo", "bar2")
    62  	carrier.Set("foo2", "bar2")
    63  	carrier.Set("foo2", "bar3")
    64  	carrier.Set("foo3", "bar4")
    65  
    66  	assert.ElementsMatch(t, carrier.msg.Headers, []sarama.RecordHeader{
    67  		{Key: []byte("foo"), Value: []byte("bar2")},
    68  		{Key: []byte("foo2"), Value: []byte("bar3")},
    69  		{Key: []byte("foo3"), Value: []byte("bar4")},
    70  	})
    71  }
    72  
    73  func TestProducerMessageCarrierKeys(t *testing.T) {
    74  	testCases := []struct {
    75  		name     string
    76  		carrier  ProducerMessageCarrier
    77  		expected []string
    78  	}{
    79  		{
    80  			name: "one",
    81  			carrier: ProducerMessageCarrier{msg: &sarama.ProducerMessage{Headers: []sarama.RecordHeader{
    82  				{Key: []byte("foo"), Value: []byte("bar")},
    83  			}}},
    84  			expected: []string{"foo"},
    85  		},
    86  		{
    87  			name:     "none",
    88  			carrier:  ProducerMessageCarrier{msg: &sarama.ProducerMessage{Headers: []sarama.RecordHeader{}}},
    89  			expected: []string{},
    90  		},
    91  		{
    92  			name: "many",
    93  			carrier: ProducerMessageCarrier{msg: &sarama.ProducerMessage{Headers: []sarama.RecordHeader{
    94  				{Key: []byte("foo"), Value: []byte("bar")},
    95  				{Key: []byte("baz"), Value: []byte("quux")},
    96  			}}},
    97  			expected: []string{"foo", "baz"},
    98  		},
    99  	}
   100  
   101  	for _, tc := range testCases {
   102  		t.Run(tc.name, func(t *testing.T) {
   103  			result := tc.carrier.Keys()
   104  			assert.Equal(t, tc.expected, result)
   105  		})
   106  	}
   107  }
   108  
   109  func TestConsumerMessageCarrierGet(t *testing.T) {
   110  	testCases := []struct {
   111  		name     string
   112  		carrier  ConsumerMessageCarrier
   113  		key      string
   114  		expected string
   115  	}{
   116  		{
   117  			name: "exists",
   118  			carrier: ConsumerMessageCarrier{msg: &sarama.ConsumerMessage{Headers: []*sarama.RecordHeader{
   119  				{Key: []byte("foo"), Value: []byte("bar")},
   120  			}}},
   121  			key:      "foo",
   122  			expected: "bar",
   123  		},
   124  		{
   125  			name:     "not exists",
   126  			carrier:  ConsumerMessageCarrier{msg: &sarama.ConsumerMessage{Headers: []*sarama.RecordHeader{}}},
   127  			key:      "foo",
   128  			expected: "",
   129  		},
   130  	}
   131  
   132  	for _, tc := range testCases {
   133  		t.Run(tc.name, func(t *testing.T) {
   134  			result := tc.carrier.Get(tc.key)
   135  			assert.Equal(t, tc.expected, result)
   136  		})
   137  	}
   138  }
   139  
   140  func TestConsumerMessageCarrierSet(t *testing.T) {
   141  	msg := sarama.ConsumerMessage{Headers: []*sarama.RecordHeader{
   142  		{Key: []byte("foo"), Value: []byte("bar")},
   143  	}}
   144  	carrier := ConsumerMessageCarrier{msg: &msg}
   145  
   146  	carrier.Set("foo", "bar2")
   147  	carrier.Set("foo2", "bar2")
   148  	carrier.Set("foo2", "bar3")
   149  	carrier.Set("foo3", "bar4")
   150  
   151  	assert.ElementsMatch(t, carrier.msg.Headers, []*sarama.RecordHeader{
   152  		{Key: []byte("foo"), Value: []byte("bar2")},
   153  		{Key: []byte("foo2"), Value: []byte("bar3")},
   154  		{Key: []byte("foo3"), Value: []byte("bar4")},
   155  	})
   156  }
   157  
   158  func TestConsumerMessageCarrierKeys(t *testing.T) {
   159  	testCases := []struct {
   160  		name     string
   161  		carrier  ConsumerMessageCarrier
   162  		expected []string
   163  	}{
   164  		{
   165  			name: "one",
   166  			carrier: ConsumerMessageCarrier{msg: &sarama.ConsumerMessage{Headers: []*sarama.RecordHeader{
   167  				{Key: []byte("foo"), Value: []byte("bar")},
   168  			}}},
   169  			expected: []string{"foo"},
   170  		},
   171  		{
   172  			name:     "none",
   173  			carrier:  ConsumerMessageCarrier{msg: &sarama.ConsumerMessage{Headers: []*sarama.RecordHeader{}}},
   174  			expected: []string{},
   175  		},
   176  		{
   177  			name: "many",
   178  			carrier: ConsumerMessageCarrier{msg: &sarama.ConsumerMessage{Headers: []*sarama.RecordHeader{
   179  				{Key: []byte("foo"), Value: []byte("bar")},
   180  				{Key: []byte("baz"), Value: []byte("quux")},
   181  			}}},
   182  			expected: []string{"foo", "baz"},
   183  		},
   184  	}
   185  
   186  	for _, tc := range testCases {
   187  		t.Run(tc.name, func(t *testing.T) {
   188  			result := tc.carrier.Keys()
   189  			assert.Equal(t, tc.expected, result)
   190  		})
   191  	}
   192  }