@@ -265,140 +265,141 @@ public void accept(int messageCount, ByteBuffer buffer) {
265265 Payload payload = mapper .newPayload ().withBody (messageCount , buffer );
266266 payload .writeTo (this );
267267 captured .flip ();
268- MessageUnpacker unpacker = MessagePack .newDefaultUnpacker (captured );
269- int traceCount = unpacker .unpackArrayHeader ();
270- for (int i = 0 ; i < traceCount ; ++i ) {
271- List <TraceGenerator .PojoSpan > expectedTrace = expectedTraces .get (position ++);
272- int spanCount = unpacker .unpackArrayHeader ();
273- assertEquals (expectedTrace .size (), spanCount );
274- for (int k = 0 ; k < spanCount ; ++k ) {
275- TraceGenerator .PojoSpan expectedSpan = expectedTrace .get (k );
276- int elementCount = unpacker .unpackMapHeader ();
277- boolean hasMetaStruct = !expectedSpan .getMetaStruct ().isEmpty ();
278- assertEquals (hasMetaStruct ? 13 : 12 , elementCount );
279- assertEquals ("service" , unpacker .unpackString ());
280- String serviceName = unpacker .unpackString ();
281- assertEqualsWithNullAsEmpty (expectedSpan .getServiceName (), serviceName );
282- assertEquals ("name" , unpacker .unpackString ());
283- String operationName = unpacker .unpackString ();
284- assertEqualsWithNullAsEmpty (expectedSpan .getOperationName (), operationName );
285- assertEquals ("resource" , unpacker .unpackString ());
286- String resourceName = unpacker .unpackString ();
287- assertEqualsWithNullAsEmpty (expectedSpan .getResourceName (), resourceName );
288- assertEquals ("trace_id" , unpacker .unpackString ());
289- long traceId = unpacker .unpackValue ().asNumberValue ().toLong ();
290- assertEquals (expectedSpan .getTraceId ().toLong (), traceId );
291- assertEquals ("span_id" , unpacker .unpackString ());
292- long spanId = unpacker .unpackValue ().asNumberValue ().toLong ();
293- assertEquals (expectedSpan .getSpanId (), spanId );
294- assertEquals ("parent_id" , unpacker .unpackString ());
295- long parentId = unpacker .unpackValue ().asNumberValue ().toLong ();
296- assertEquals (expectedSpan .getParentId (), parentId );
297- assertEquals ("start" , unpacker .unpackString ());
298- long startTime = unpacker .unpackLong ();
299- assertEquals (expectedSpan .getStartTime (), startTime );
300- assertEquals ("duration" , unpacker .unpackString ());
301- long duration = unpacker .unpackLong ();
302- assertEquals (expectedSpan .getDurationNano (), duration );
303- assertEquals ("type" , unpacker .unpackString ());
304- String type = unpacker .unpackString ();
305- assertEquals (expectedSpan .getType (), type );
306- assertEquals ("error" , unpacker .unpackString ());
307- int error = unpacker .unpackInt ();
308- assertEquals (expectedSpan .getError (), error );
309- assertEquals ("metrics" , unpacker .unpackString ());
310- int metricsSize = unpacker .unpackMapHeader ();
311- HashMap <String , Number > metrics = new HashMap <>();
312- for (int j = 0 ; j < metricsSize ; ++j ) {
313- String key = unpacker .unpackString ();
314- Number metricValue = null ;
315- MessageFormat format = unpacker .getNextFormat ();
316- switch (format ) {
317- case NEGFIXINT :
318- case POSFIXINT :
319- case INT8 :
320- case UINT8 :
321- case INT16 :
322- case UINT16 :
323- case INT32 :
324- case UINT32 :
325- metricValue = unpacker .unpackInt ();
326- break ;
327- case INT64 :
328- case UINT64 :
329- metricValue = unpacker .unpackLong ();
330- break ;
331- case FLOAT32 :
332- metricValue = unpacker .unpackFloat ();
333- break ;
334- case FLOAT64 :
335- metricValue = unpacker .unpackDouble ();
336- break ;
337- default :
338- Assertions .fail ("Unexpected type in metrics values: " + format );
339- }
340- if (DD_MEASURED .toString ().equals (key )) {
341- assertTrue (metricValue .intValue () == 1 || !expectedSpan .isMeasured ());
342- } else if (DDSpanContext .PRIORITY_SAMPLING_KEY .equals (key )) {
343- // check that priority sampling is only on first and last span
344- if (k == 0 || k == spanCount - 1 ) {
345- assertEquals (expectedSpan .samplingPriority (), metricValue .intValue ());
268+ try (MessageUnpacker unpacker = MessagePack .newDefaultUnpacker (captured )) {
269+ int traceCount = unpacker .unpackArrayHeader ();
270+ for (int i = 0 ; i < traceCount ; ++i ) {
271+ List <TraceGenerator .PojoSpan > expectedTrace = expectedTraces .get (position ++);
272+ int spanCount = unpacker .unpackArrayHeader ();
273+ assertEquals (expectedTrace .size (), spanCount );
274+ for (int k = 0 ; k < spanCount ; ++k ) {
275+ TraceGenerator .PojoSpan expectedSpan = expectedTrace .get (k );
276+ int elementCount = unpacker .unpackMapHeader ();
277+ boolean hasMetaStruct = !expectedSpan .getMetaStruct ().isEmpty ();
278+ assertEquals (hasMetaStruct ? 13 : 12 , elementCount );
279+ assertEquals ("service" , unpacker .unpackString ());
280+ String serviceName = unpacker .unpackString ();
281+ assertEqualsWithNullAsEmpty (expectedSpan .getServiceName (), serviceName );
282+ assertEquals ("name" , unpacker .unpackString ());
283+ String operationName = unpacker .unpackString ();
284+ assertEqualsWithNullAsEmpty (expectedSpan .getOperationName (), operationName );
285+ assertEquals ("resource" , unpacker .unpackString ());
286+ String resourceName = unpacker .unpackString ();
287+ assertEqualsWithNullAsEmpty (expectedSpan .getResourceName (), resourceName );
288+ assertEquals ("trace_id" , unpacker .unpackString ());
289+ long traceId = unpacker .unpackValue ().asNumberValue ().toLong ();
290+ assertEquals (expectedSpan .getTraceId ().toLong (), traceId );
291+ assertEquals ("span_id" , unpacker .unpackString ());
292+ long spanId = unpacker .unpackValue ().asNumberValue ().toLong ();
293+ assertEquals (expectedSpan .getSpanId (), spanId );
294+ assertEquals ("parent_id" , unpacker .unpackString ());
295+ long parentId = unpacker .unpackValue ().asNumberValue ().toLong ();
296+ assertEquals (expectedSpan .getParentId (), parentId );
297+ assertEquals ("start" , unpacker .unpackString ());
298+ long startTime = unpacker .unpackLong ();
299+ assertEquals (expectedSpan .getStartTime (), startTime );
300+ assertEquals ("duration" , unpacker .unpackString ());
301+ long duration = unpacker .unpackLong ();
302+ assertEquals (expectedSpan .getDurationNano (), duration );
303+ assertEquals ("type" , unpacker .unpackString ());
304+ String type = unpacker .unpackString ();
305+ assertEquals (expectedSpan .getType (), type );
306+ assertEquals ("error" , unpacker .unpackString ());
307+ int error = unpacker .unpackInt ();
308+ assertEquals (expectedSpan .getError (), error );
309+ assertEquals ("metrics" , unpacker .unpackString ());
310+ int metricsSize = unpacker .unpackMapHeader ();
311+ HashMap <String , Number > metrics = new HashMap <>();
312+ for (int j = 0 ; j < metricsSize ; ++j ) {
313+ String key = unpacker .unpackString ();
314+ Number metricValue = null ;
315+ MessageFormat format = unpacker .getNextFormat ();
316+ switch (format ) {
317+ case NEGFIXINT :
318+ case POSFIXINT :
319+ case INT8 :
320+ case UINT8 :
321+ case INT16 :
322+ case UINT16 :
323+ case INT32 :
324+ case UINT32 :
325+ metricValue = unpacker .unpackInt ();
326+ break ;
327+ case INT64 :
328+ case UINT64 :
329+ metricValue = unpacker .unpackLong ();
330+ break ;
331+ case FLOAT32 :
332+ metricValue = unpacker .unpackFloat ();
333+ break ;
334+ case FLOAT64 :
335+ metricValue = unpacker .unpackDouble ();
336+ break ;
337+ default :
338+ Assertions .fail ("Unexpected type in metrics values: " + format );
339+ }
340+ if (DD_MEASURED .toString ().equals (key )) {
341+ assertTrue (metricValue .intValue () == 1 || !expectedSpan .isMeasured ());
342+ } else if (DDSpanContext .PRIORITY_SAMPLING_KEY .equals (key )) {
343+ // check that priority sampling is only on first and last span
344+ if (k == 0 || k == spanCount - 1 ) {
345+ assertEquals (expectedSpan .samplingPriority (), metricValue .intValue ());
346+ } else {
347+ assertFalse (expectedSpan .hasSamplingPriority ());
348+ }
346349 } else {
347- assertFalse ( expectedSpan . hasSamplingPriority () );
350+ metrics . put ( key , metricValue );
348351 }
349- } else {
350- metrics .put (key , metricValue );
351352 }
352- }
353- for (Map .Entry <String , Number > metric : metrics .entrySet ()) {
354- if (metric .getValue () instanceof Double || metric .getValue () instanceof Float ) {
355- assertEquals (
356- ((Number ) expectedSpan .getTag (metric .getKey ())).doubleValue (),
357- metric .getValue ().doubleValue (),
358- 0.001 );
359- } else {
360- // Groovy compared numerically, Java requires explicit long comparison to avoid
361- // Long/Integer type mismatch from different msgpack integer encoding widths
362- assertEquals (
363- ((Number ) expectedSpan .getTag (metric .getKey ())).longValue (),
364- metric .getValue ().longValue ());
353+ metrics .forEach ((key , value ) -> {
354+ if (value instanceof Double || value instanceof Float ) {
355+ assertEquals (
356+ ((Number ) expectedSpan .getTag (key )).doubleValue (),
357+ value .doubleValue (),
358+ 0.001 );
359+ } else {
360+ // Groovy compared numerically, Java requires explicit long comparison to avoid
361+ // Long/Integer type mismatch from different msgpack integer encoding widths
362+ assertEquals (
363+ ((Number ) expectedSpan .getTag (key )).longValue (),
364+ value .longValue ());
365+ }
366+ });
367+ assertEquals ("meta" , unpacker .unpackString ());
368+ int metaSize = unpacker .unpackMapHeader ();
369+ HashMap <String , String > meta = new HashMap <>();
370+ for (int j = 0 ; j < metaSize ; ++j ) {
371+ meta .put (unpacker .unpackString (), unpacker .unpackString ());
365372 }
366- }
367- assertEquals ("meta" , unpacker .unpackString ());
368- int metaSize = unpacker .unpackMapHeader ();
369- HashMap <String , String > meta = new HashMap <>();
370- for (int j = 0 ; j < metaSize ; ++j ) {
371- meta .put (unpacker .unpackString (), unpacker .unpackString ());
372- }
373- for (Map .Entry <String , String > entry : meta .entrySet ()) {
374- if (Tags .HTTP_STATUS .equals (entry .getKey ())) {
375- assertEquals (String .valueOf (expectedSpan .getHttpStatusCode ()), entry .getValue ());
376- } else if (DDTags .ORIGIN_KEY .equals (entry .getKey ())) {
377- assertEquals (expectedSpan .getOrigin (), entry .getValue ());
378- } else if (DDTags .PROCESS_TAGS .equals (entry .getKey ())) {
379- assertTrue (Config .get ().isExperimentalPropagateProcessTagsEnabled ());
380- assertEquals (0 , k );
381- assertEquals (ProcessTags .getTagsForSerialization ().toString (), entry .getValue ());
382- processTagsCount ++;
383- } else {
384- Object tag = expectedSpan .getTag (entry .getKey ());
385- if (null != tag ) {
386- assertEquals (String .valueOf (tag ), entry .getValue ());
373+ for (Map .Entry <String , String > entry : meta .entrySet ()) {
374+ if (Tags .HTTP_STATUS .equals (entry .getKey ())) {
375+ assertEquals (String .valueOf (expectedSpan .getHttpStatusCode ()), entry .getValue ());
376+ } else if (DDTags .ORIGIN_KEY .equals (entry .getKey ())) {
377+ assertEquals (expectedSpan .getOrigin (), entry .getValue ());
378+ } else if (DDTags .PROCESS_TAGS .equals (entry .getKey ())) {
379+ assertTrue (Config .get ().isExperimentalPropagateProcessTagsEnabled ());
380+ assertEquals (0 , k );
381+ assertEquals (ProcessTags .getTagsForSerialization ().toString (), entry .getValue ());
382+ processTagsCount ++;
387383 } else {
388- assertEquals (expectedSpan .getBaggage ().get (entry .getKey ()), entry .getValue ());
384+ Object tag = expectedSpan .getTag (entry .getKey ());
385+ if (null != tag ) {
386+ assertEquals (String .valueOf (tag ), entry .getValue ());
387+ } else {
388+ assertEquals (expectedSpan .getBaggage ().get (entry .getKey ()), entry .getValue ());
389+ }
389390 }
390391 }
391- }
392- if ( hasMetaStruct ) {
393- Map < String , Object > metaStruct = expectedSpan . getMetaStruct ( );
394- assertEquals ( "meta_struct" , unpacker .unpackString () );
395- int metaStructSize = unpacker . unpackMapHeader ();
396- for ( int j = 0 ; j < metaStructSize ; ++ j ) {
397- String field = unpacker . unpackString ();
398- if ( metaStructVerifier != null ) {
399- byte [] binary = new byte [ unpacker .unpackBinaryHeader ()] ;
400- unpacker . readPayload ( binary );
401- metaStructVerifier . verify ( metaStruct . get ( field ), binary );
392+ if ( hasMetaStruct ) {
393+ Map < String , Object > metaStruct = expectedSpan . getMetaStruct ();
394+ assertEquals ( "meta_struct" , unpacker . unpackString () );
395+ int metaStructSize = unpacker .unpackMapHeader ( );
396+ for ( int j = 0 ; j < metaStructSize ; ++ j ) {
397+ String field = unpacker . unpackString ();
398+ if ( metaStructVerifier != null ) {
399+ byte [] binary = new byte [ unpacker . unpackBinaryHeader ()];
400+ unpacker .readPayload ( binary ) ;
401+ metaStructVerifier . verify ( metaStruct . get ( field ), binary );
402+ }
402403 }
403404 }
404405 }
0 commit comments