1
+ package com .hivemq .extensions .kafka .customizations .helloworld ;
2
+
3
+ import com .codahale .metrics .MetricRegistry ;
4
+ import com .hivemq .extension .sdk .api .packets .general .UserProperty ;
5
+ import com .hivemq .extension .sdk .api .packets .publish .PublishPacket ;
6
+ import com .hivemq .extension .sdk .api .services .builder .PublishBuilder ;
7
+ import com .hivemq .extension .sdk .api .services .publish .Publish ;
8
+ import com .hivemq .extensions .kafka .api .builders .KafkaRecordBuilder ;
9
+ import com .hivemq .extensions .kafka .api .model .KafkaHeader ;
10
+ import com .hivemq .extensions .kafka .api .model .KafkaHeaders ;
11
+ import com .hivemq .extensions .kafka .api .model .KafkaRecord ;
12
+ import com .hivemq .extensions .kafka .api .services .KafkaTopicService ;
13
+ import com .hivemq .extensions .kafka .api .transformers .kafkatomqtt .KafkaToMqttInitInput ;
14
+ import com .hivemq .extensions .kafka .api .transformers .kafkatomqtt .KafkaToMqttInput ;
15
+ import com .hivemq .extensions .kafka .api .transformers .kafkatomqtt .KafkaToMqttOutput ;
16
+ import com .hivemq .extensions .kafka .api .transformers .mqtttokafka .MqttToKafkaInput ;
17
+ import com .hivemq .extensions .kafka .api .transformers .mqtttokafka .MqttToKafkaOutput ;
18
+ import org .junit .jupiter .api .BeforeEach ;
19
+ import org .junit .jupiter .api .Test ;
20
+
21
+ import java .nio .ByteBuffer ;
22
+ import java .util .List ;
23
+ import java .util .Optional ;
24
+
25
+ import static org .junit .jupiter .api .Assertions .*;
26
+ import static org .mockito .ArgumentMatchers .eq ;
27
+ import static org .mockito .Mockito .*;
28
+
29
+ class KafkaToMqttHelloWorldTransformerTest {
30
+
31
+ // mock objects
32
+ private KafkaToMqttInput input ;
33
+ private KafkaToMqttInitInput initInput ;
34
+ private KafkaToMqttOutput output ;
35
+ private PublishBuilder publishBuilder ;
36
+ private KafkaRecord kafkaRecord ;
37
+ private KafkaHeaders kafkaHeaders ;
38
+ private KafkaHeader kafkaHeader ;
39
+ private Publish publish ;
40
+
41
+ // test object
42
+ private KafkaToMqttHelloWorldTransformer transformer ;
43
+
44
+ private MetricRegistry metricRegistry ;
45
+
46
+ @ BeforeEach
47
+ void setUp () {
48
+ input = mock (KafkaToMqttInput .class );
49
+ initInput = mock (KafkaToMqttInitInput .class );
50
+ output = mock (KafkaToMqttOutput .class );
51
+ kafkaRecord = mock (KafkaRecord .class );
52
+ publishBuilder = mock (PublishBuilder .class );
53
+ publish = mock (Publish .class );
54
+ kafkaHeaders = mock (KafkaHeaders .class );
55
+ kafkaHeader = mock (KafkaHeader .class );
56
+ metricRegistry = new MetricRegistry ();
57
+
58
+ when (input .getKafkaRecord ()).thenReturn (kafkaRecord );
59
+ when (output .newPublishBuilder ()).thenReturn (publishBuilder );
60
+ transformer = new KafkaToMqttHelloWorldTransformer ();
61
+
62
+ when (kafkaRecord .getHeaders ()).thenReturn (kafkaHeaders );
63
+ when (kafkaRecord .getTopic ()).thenReturn ("topic" );
64
+ when (kafkaRecord .getValue ()).thenReturn (Optional .of (ByteBuffer .wrap ("test" .getBytes ())));
65
+
66
+ when (kafkaHeaders .asList ()).thenReturn (List .of (kafkaHeader ));
67
+ when (kafkaHeader .getKey ()).thenReturn ("test-key" );
68
+ when (kafkaHeader .getValueAsString ()).thenReturn ("test-value" );
69
+
70
+ when (publishBuilder .build ()).thenReturn (publish );
71
+ when (publishBuilder .contentType (any ())).thenReturn (publishBuilder );
72
+ when (publishBuilder .topic (anyString ())).thenReturn (publishBuilder );
73
+ when (publishBuilder .correlationData (any ())).thenReturn (publishBuilder );
74
+ when (publishBuilder .messageExpiryInterval (anyLong ())).thenReturn (publishBuilder );
75
+ when (publishBuilder .payloadFormatIndicator (any ())).thenReturn (publishBuilder );
76
+ when (publishBuilder .userProperty (anyString (), anyString ())).thenReturn (publishBuilder );
77
+
78
+ when (initInput .getMetricRegistry ()).thenReturn (metricRegistry );
79
+ transformer .init (initInput );
80
+ }
81
+
82
+ @ Test
83
+ void transformMqttToKafka_setsDataFromKafkaRecord () {
84
+ transformer .transformKafkaToMqtt (input , output );
85
+ verify (publishBuilder ).topic (eq (kafkaRecord .getTopic ()));
86
+ verify (publishBuilder ).payload (eq (kafkaRecord .getValue ().get ()));
87
+ // work around for a mockito bug
88
+ final String value = kafkaHeader .getValueAsString ();
89
+ verify (publishBuilder ).userProperty (eq (kafkaHeader .getKey ()), eq (value ));
90
+ verify (output ).setPublishes (eq (List .of (publish )));
91
+ }
92
+
93
+ @ Test
94
+ void transformMqttToKafka_missingValueIncCounter () {
95
+ when (kafkaRecord .getValue ()).thenReturn (Optional .empty ());
96
+ transformer .transformKafkaToMqtt (input , output );
97
+ assertEquals (1 , metricRegistry .counter (KafkaToMqttHelloWorldTransformer .MISSING_VALUE_COUNTER_NAME ).getCount ());
98
+ }
99
+ }
0 commit comments