1
1
package io .kafbat .ui .serdes ;
2
2
3
3
import static io .kafbat .ui .serde .api .DeserializeResult .Type .STRING ;
4
+ import static org .junit .jupiter .api .Assertions .assertEquals ;
5
+ import static org .junit .jupiter .api .Assertions .assertTrue ;
4
6
import static org .mockito .Mockito .any ;
5
7
import static org .mockito .Mockito .mock ;
6
8
import static org .mockito .Mockito .verify ;
9
+ import static org .mockito .Mockito .when ;
7
10
8
11
import io .kafbat .ui .model .TopicMessageDTO ;
9
12
import io .kafbat .ui .serde .api .DeserializeResult ;
10
13
import io .kafbat .ui .serde .api .Serde ;
14
+ import java .util .List ;
11
15
import java .util .Map ;
12
16
import java .util .function .UnaryOperator ;
13
17
import org .apache .kafka .clients .consumer .ConsumerRecord ;
@@ -22,9 +26,50 @@ void dataMaskingAppliedOnDeserializedMessage() {
22
26
Serde .Deserializer deser = (headers , data ) -> new DeserializeResult ("test" , STRING , Map .of ());
23
27
24
28
var recordDeser = new ConsumerRecordDeserializer ("test" , deser , "test" , deser , "test" , deser , deser , maskerMock );
25
- recordDeser .deserialize (new ConsumerRecord <>( "t" , 1 , 1L , Bytes . wrap ( "t" . getBytes ()), Bytes . wrap ( "t" . getBytes ()) ));
29
+ recordDeser .deserialize (record ( ));
26
30
27
31
verify (maskerMock ).apply (any (TopicMessageDTO .class ));
28
32
}
29
33
34
+ @ Test
35
+ void deserializeWithMultipleHeaderValues () {
36
+ UnaryOperator <TopicMessageDTO > maskerMock = mock ();
37
+ when (maskerMock .apply (any (TopicMessageDTO .class ))).thenAnswer (invocation -> invocation .getArgument (0 ));
38
+ Serde .Deserializer deser = (headers , data ) -> new DeserializeResult ("test" , STRING , Map .of ());
39
+
40
+ var recordDeser = new ConsumerRecordDeserializer ("test" , deser , "test" , deser , "test" , deser , deser , maskerMock );
41
+ ConsumerRecord <Bytes , Bytes > record = record ();
42
+ record .headers ().add ("headerKey" , "headerValue1" .getBytes ());
43
+ record .headers ().add ("headerKey" , "headerValue2" .getBytes ());
44
+ TopicMessageDTO message = recordDeser .deserialize (record );
45
+
46
+ Map <String , List <String >> headers = message .getHeaders ();
47
+ assertEquals (1 , headers .size ());
48
+ assertEquals (List .of ("headerValue1" , "headerValue2" ), headers .get ("headerKey" ));
49
+ }
50
+
51
+ @ Test
52
+ void deserializeWithMixedSingleAndMultipleHeaderValues () {
53
+ UnaryOperator <TopicMessageDTO > maskerMock = mock ();
54
+ when (maskerMock .apply (any (TopicMessageDTO .class ))).thenAnswer (invocation -> invocation .getArgument (0 ));
55
+ Serde .Deserializer deser = (headers , data ) -> new DeserializeResult ("test" , STRING , Map .of ());
56
+
57
+ var recordDeser = new ConsumerRecordDeserializer ("test" , deser , "test" , deser , "test" , deser , deser , maskerMock );
58
+ ConsumerRecord <Bytes , Bytes > record = record ();
59
+ record .headers ().add ("headerKey1" , "singleValue" .getBytes ());
60
+ record .headers ().add ("headerKey2" , "multiValue1" .getBytes ());
61
+ record .headers ().add ("headerKey2" , "multiValue2" .getBytes ());
62
+ TopicMessageDTO message = recordDeser .deserialize (record );
63
+
64
+ Map <String , List <String >> headers = message .getHeaders ();
65
+ assertEquals (1 , headers .get ("headerKey1" ).size ());
66
+ assertEquals (List .of ("singleValue" ), headers .get ("headerKey1" ));
67
+ assertEquals (2 , headers .get ("headerKey2" ).size ());
68
+ assertEquals (List .of ("multiValue1" , "multiValue2" ), headers .get ("headerKey2" ));
69
+ }
70
+
71
+ private ConsumerRecord <Bytes , Bytes > record () {
72
+ return new ConsumerRecord <>("t" , 1 , 1L , Bytes .wrap ("t" .getBytes ()), Bytes .wrap ("t" .getBytes ()));
73
+ }
74
+
30
75
}
0 commit comments