19
19
import org .apache .kafka .common .errors .UnsupportedVersionException ;
20
20
import org .apache .kafka .common .protocol .ByteBufferAccessor ;
21
21
import org .apache .kafka .common .protocol .ObjectSerializationCache ;
22
+ import org .apache .kafka .common .protocol .types .Schema ;
22
23
import org .apache .kafka .common .protocol .types .Struct ;
23
24
import org .apache .kafka .common .utils .ByteUtils ;
24
25
import org .junit .Test ;
@@ -321,6 +322,38 @@ public void testMyTaggedStruct() {
321
322
message -> assertEquals ("abc" , message .myString ()), (short ) 2 );
322
323
}
323
324
325
+ private ByteBuffer serialize (SimpleExampleMessageData message , short version ) {
326
+ ObjectSerializationCache cache = new ObjectSerializationCache ();
327
+ int size = message .size (cache , version );
328
+ ByteBuffer buf = ByteBuffer .allocate (size );
329
+ message .write (new ByteBufferAccessor (buf ), cache , version );
330
+ buf .flip ();
331
+ assertEquals (size , buf .remaining ());
332
+ return buf ;
333
+ }
334
+
335
+ private SimpleExampleMessageData deserialize (ByteBuffer buf , short version ) {
336
+ SimpleExampleMessageData message = new SimpleExampleMessageData ();
337
+ message .read (new ByteBufferAccessor (buf .duplicate ()), version );
338
+ return message ;
339
+ }
340
+
341
+ private ByteBuffer serializeThroughStruct (SimpleExampleMessageData message , short version ) {
342
+ Struct struct = message .toStruct (version );
343
+ int size = struct .sizeOf ();
344
+ ByteBuffer buf = ByteBuffer .allocate (size );
345
+ struct .writeTo (buf );
346
+ buf .flip ();
347
+ assertEquals (size , buf .remaining ());
348
+ return buf ;
349
+ }
350
+
351
+ private SimpleExampleMessageData deserializeThroughStruct (ByteBuffer buf , short version ) {
352
+ Schema schema = SimpleExampleMessageData .SCHEMAS [version ];
353
+ Struct struct = schema .read (buf );
354
+ return new SimpleExampleMessageData (struct , version );
355
+ }
356
+
324
357
private void testRoundTrip (SimpleExampleMessageData message ,
325
358
Consumer <SimpleExampleMessageData > validator ) {
326
359
testRoundTrip (message , validator , (short ) 1 );
@@ -330,17 +363,18 @@ private void testRoundTrip(SimpleExampleMessageData message,
330
363
Consumer <SimpleExampleMessageData > validator ,
331
364
short version ) {
332
365
validator .accept (message );
333
- ObjectSerializationCache cache = new ObjectSerializationCache ();
334
- int size = message .size (cache , version );
335
- ByteBuffer buf = ByteBuffer .allocate (size );
336
- message .write (new ByteBufferAccessor (buf ), cache , version );
337
- buf .flip ();
338
- assertEquals (size , buf .remaining ());
366
+ ByteBuffer buf = serialize (message , version );
339
367
340
- SimpleExampleMessageData message2 = new SimpleExampleMessageData ();
341
- message2 .read (new ByteBufferAccessor (buf .duplicate ()), version );
368
+ SimpleExampleMessageData message2 = deserialize (buf .duplicate (), version );
342
369
validator .accept (message2 );
343
370
assertEquals (message , message2 );
344
371
assertEquals (message .hashCode (), message2 .hashCode ());
372
+
373
+ // Check struct serialization as well
374
+ assertEquals (buf , serializeThroughStruct (message , version ));
375
+ SimpleExampleMessageData messageFromStruct = deserializeThroughStruct (buf .duplicate (), version );
376
+ validator .accept (messageFromStruct );
377
+ assertEquals (message , messageFromStruct );
378
+ assertEquals (message .hashCode (), messageFromStruct .hashCode ());
345
379
}
346
380
}
0 commit comments