@@ -336,12 +336,19 @@ func TestHTTPTraceMiddleware(t *testing.T) {
336
336
ctx := otelbaggage .ContextWithBaggage (req .Context (), bag )
337
337
req = req .WithContext (ctx )
338
338
339
+ // overwrite handler to ensure we check the ctx baggage properly
340
+ var handlerCtx context.Context
341
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
342
+ handlerCtx = r .Context ()
343
+ w .WriteHeader (http .StatusOK )
344
+ })
345
+
339
346
rr := httptest .NewRecorder ()
340
347
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
341
348
handler .ServeHTTP (rr , req )
342
349
343
350
// Verify baggage is in ctx
344
- baggage := otelbaggage .FromContext (req . Context () )
351
+ baggage := otelbaggage .FromContext (handlerCtx )
345
352
assert .NotNil (t , baggage )
346
353
member := baggage .Member ("key1" )
347
354
assert .Equal (t , "value1" , member .Value ())
@@ -357,12 +364,19 @@ func TestHTTPTraceMiddleware(t *testing.T) {
357
364
req := httptest .NewRequest (http .MethodGet , "/test" , nil )
358
365
req .Header .Set ("baggage" , "key1=value1;prop1=propvalue1" )
359
366
367
+ // overwrite handler to ensure we check the ctx baggage properly
368
+ var handlerCtx context.Context
369
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
370
+ handlerCtx = r .Context ()
371
+ w .WriteHeader (http .StatusOK )
372
+ })
373
+
360
374
rr := httptest .NewRecorder ()
361
375
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
362
376
handler .ServeHTTP (rr , req )
363
377
364
378
// Verify baggage is NOT in ctx
365
- baggage := otelbaggage .FromContext (req . Context () )
379
+ baggage := otelbaggage .FromContext (handlerCtx )
366
380
assert .Empty (t , baggage .Members ())
367
381
368
382
// Verify baggage is in headers
@@ -379,11 +393,18 @@ func TestHTTPTraceMiddleware(t *testing.T) {
379
393
req = req .WithContext (ctx )
380
394
req .Header .Set ("baggage" , "meta1=metaval1;prop1=metaprop1" )
381
395
396
+ // overwrite handler to ensure we check the ctx baggage properly
397
+ var handlerCtx context.Context
398
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
399
+ handlerCtx = r .Context ()
400
+ w .WriteHeader (http .StatusOK )
401
+ })
402
+
382
403
rr := httptest .NewRecorder ()
383
404
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
384
405
handler .ServeHTTP (rr , req )
385
406
386
- baggage := otelbaggage .FromContext (req . Context () )
407
+ baggage := otelbaggage .FromContext (handlerCtx )
387
408
assert .NotNil (t , baggage )
388
409
member := baggage .Member ("ctx1" )
389
410
assert .Equal (t , "ctxval1" , member .Value ())
@@ -398,6 +419,13 @@ func TestHTTPTraceMiddleware(t *testing.T) {
398
419
req := httptest .NewRequest (http .MethodGet , "/test" , nil )
399
420
req .Header .Add ("baggage" , "" )
400
421
422
+ // overwrite handler to ensure we check the ctx baggage properly
423
+ var handlerCtx context.Context
424
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
425
+ handlerCtx = r .Context ()
426
+ w .WriteHeader (http .StatusOK )
427
+ })
428
+
401
429
rr := httptest .NewRecorder ()
402
430
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
403
431
handler .ServeHTTP (rr , req )
@@ -406,7 +434,7 @@ func TestHTTPTraceMiddleware(t *testing.T) {
406
434
assert .Equal (t , "" , rr .Header ().Get ("baggage" ))
407
435
408
436
// Verify no baggage in context
409
- baggage := otelbaggage .FromContext (req . Context () )
437
+ baggage := otelbaggage .FromContext (handlerCtx )
410
438
assert .Empty (t , baggage .Members (), "baggage should be empty" )
411
439
})
412
440
@@ -418,6 +446,13 @@ func TestHTTPTraceMiddleware(t *testing.T) {
418
446
ctx := otelbaggage .ContextWithBaggage (req .Context (), bag )
419
447
req = req .WithContext (ctx )
420
448
449
+ // overwrite handler to ensure we check the ctx baggage properly
450
+ var handlerCtx context.Context
451
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
452
+ handlerCtx = r .Context ()
453
+ w .WriteHeader (http .StatusOK )
454
+ })
455
+
421
456
rr := httptest .NewRecorder ()
422
457
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
423
458
handler .ServeHTTP (rr , req )
@@ -426,22 +461,29 @@ func TestHTTPTraceMiddleware(t *testing.T) {
426
461
assert .Empty (t , rr .Header ().Get ("baggage" ))
427
462
428
463
// Verify empty baggage in context
429
- baggage := otelbaggage .FromContext (req . Context () )
464
+ baggage := otelbaggage .FromContext (handlerCtx )
430
465
assert .Empty (t , baggage .Members (), "baggage should be empty" )
431
466
})
432
467
433
468
t .Run ("header baggage with properties" , func (t * testing.T ) {
434
469
req := httptest .NewRequest (http .MethodGet , "/test" , nil )
435
470
req .Header .Add ("baggage" , "key1=value1;prop1=propvalue1,key2=value2;prop2=propvalue2" )
436
471
472
+ // overwrite handler to ensure we check the ctx baggage properly
473
+ var handlerCtx context.Context
474
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
475
+ handlerCtx = r .Context ()
476
+ w .WriteHeader (http .StatusOK )
477
+ })
478
+
437
479
rr := httptest .NewRecorder ()
438
480
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
439
481
handler .ServeHTTP (rr , req )
440
482
441
483
assert .Equal (t , "key1=value1;prop1=propvalue1,key2=value2;prop2=propvalue2" , rr .Header ().Get ("baggage" ))
442
484
443
485
// Verify baggage is NOT in ctx
444
- baggage := otelbaggage .FromContext (req . Context () )
486
+ baggage := otelbaggage .FromContext (handlerCtx )
445
487
assert .Empty (t , baggage .Members ())
446
488
})
447
489
@@ -453,14 +495,21 @@ func TestHTTPTraceMiddleware(t *testing.T) {
453
495
ctx := otelbaggage .ContextWithBaggage (req .Context (), bag )
454
496
req = req .WithContext (ctx )
455
497
498
+ // overwrite handler to ensure we check the ctx baggage properly
499
+ var handlerCtx context.Context
500
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
501
+ handlerCtx = r .Context ()
502
+ w .WriteHeader (http .StatusOK )
503
+ })
504
+
456
505
rr := httptest .NewRecorder ()
457
506
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
458
507
handler .ServeHTTP (rr , req )
459
508
460
509
assert .Empty (t , rr .Header ().Get ("baggage" ))
461
510
462
511
// Verify baggage is in ctx w/ both members & properties
463
- baggage := otelbaggage .FromContext (req . Context () )
512
+ baggage := otelbaggage .FromContext (handlerCtx )
464
513
assert .NotNil (t , baggage , "baggage should be in ctx" )
465
514
assert .Len (t , baggage .Members (), 2 , "should have 2 baggage members" )
466
515
@@ -488,6 +537,13 @@ func TestHTTPTraceMiddleware(t *testing.T) {
488
537
req := httptest .NewRequest (http .MethodGet , "/test" , nil )
489
538
req .Header .Add ("baggage" , "key1=value1%20with%20spaces,key2=value2%2Fwith%2Fslashes" )
490
539
540
+ // overwrite handler to ensure we check the ctx baggage properly
541
+ var handlerCtx context.Context
542
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
543
+ handlerCtx = r .Context ()
544
+ w .WriteHeader (http .StatusOK )
545
+ })
546
+
491
547
rr := httptest .NewRecorder ()
492
548
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
493
549
handler .ServeHTTP (rr , req )
@@ -496,7 +552,7 @@ func TestHTTPTraceMiddleware(t *testing.T) {
496
552
assert .Equal (t , "key1=value1%20with%20spaces,key2=value2%2Fwith%2Fslashes" , rr .Header ().Get ("baggage" ))
497
553
498
554
// Verify baggage is NOT in ctx
499
- baggage := otelbaggage .FromContext (req . Context () )
555
+ baggage := otelbaggage .FromContext (handlerCtx )
500
556
assert .Empty (t , baggage .Members ())
501
557
})
502
558
@@ -508,12 +564,19 @@ func TestHTTPTraceMiddleware(t *testing.T) {
508
564
ctx := otelbaggage .ContextWithBaggage (req .Context (), bag )
509
565
req = req .WithContext (ctx )
510
566
567
+ // overwrite handler to ensure we check the ctx baggage properly
568
+ var handlerCtx context.Context
569
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
570
+ handlerCtx = r .Context ()
571
+ w .WriteHeader (http .StatusOK )
572
+ })
573
+
511
574
rr := httptest .NewRecorder ()
512
575
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
513
576
handler .ServeHTTP (rr , req )
514
577
515
578
// Verify baggage is in ctx with special chars (URL-decoded by OpenTelemetry)
516
- baggage := otelbaggage .FromContext (req . Context () )
579
+ baggage := otelbaggage .FromContext (handlerCtx )
517
580
assert .NotNil (t , baggage )
518
581
member := baggage .Member ("key1" )
519
582
assert .Equal (t , "value2/with/slashes" , member .Value ())
@@ -561,6 +624,13 @@ func TestHTTPTraceMiddleware(t *testing.T) {
561
624
ctx := otelbaggage .ContextWithBaggage (req .Context (), bag )
562
625
req = req .WithContext (ctx )
563
626
627
+ // overwrite handler to ensure we check the ctx baggage properly
628
+ var handlerCtx context.Context
629
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
630
+ handlerCtx = r .Context ()
631
+ w .WriteHeader (http .StatusOK )
632
+ })
633
+
564
634
rr := httptest .NewRecorder ()
565
635
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
566
636
handler .ServeHTTP (rr , req )
@@ -569,7 +639,7 @@ func TestHTTPTraceMiddleware(t *testing.T) {
569
639
assert .Empty (t , rr .Header ().Get ("baggage" ))
570
640
571
641
// Verify both members in ctx
572
- baggage := otelbaggage .FromContext (req . Context () )
642
+ baggage := otelbaggage .FromContext (handlerCtx )
573
643
assert .NotNil (t , baggage )
574
644
assert .Len (t , baggage .Members (), 2 )
575
645
@@ -591,12 +661,19 @@ func TestHTTPTraceMiddleware(t *testing.T) {
591
661
req := httptest .NewRequest (http .MethodGet , "/test" , nil )
592
662
req .Header .Set ("baggage" , "" )
593
663
664
+ // overwrite handler to ensure we check the ctx baggage properly
665
+ var handlerCtx context.Context
666
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
667
+ handlerCtx = r .Context ()
668
+ w .WriteHeader (http .StatusOK )
669
+ })
670
+
594
671
rr := httptest .NewRecorder ()
595
672
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
596
673
handler .ServeHTTP (rr , req )
597
674
598
675
// Verify baggage is empty in ctx
599
- baggage := otelbaggage .FromContext (req . Context () )
676
+ baggage := otelbaggage .FromContext (handlerCtx )
600
677
assert .Empty (t , baggage .Members ())
601
678
602
679
// Verify no baggage in headers
@@ -613,10 +690,7 @@ func TestHTTPTraceMiddleware(t *testing.T) {
613
690
614
691
assert .Equal (t , http .StatusBadRequest , rr .Code )
615
692
assert .Contains (t , rr .Body .String (), "invalid baggage header" )
616
-
617
693
assert .Empty (t , rr .Header ().Get ("baggage" ))
618
- baggage := otelbaggage .FromContext (req .Context ())
619
- assert .Empty (t , baggage .Members (), "baggage should be empty since it was rejected" )
620
694
})
621
695
622
696
t .Run ("baggage with same key in context and metadata" , func (t * testing.T ) {
@@ -628,11 +702,18 @@ func TestHTTPTraceMiddleware(t *testing.T) {
628
702
req = req .WithContext (ctx )
629
703
req .Header .Set ("baggage" , "key1=headerval;prop1=headerprop" )
630
704
705
+ // overwrite handler to ensure we check the ctx baggage properly
706
+ var handlerCtx context.Context
707
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
708
+ handlerCtx = r .Context ()
709
+ w .WriteHeader (http .StatusOK )
710
+ })
711
+
631
712
rr := httptest .NewRecorder ()
632
713
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
633
714
handler .ServeHTTP (rr , req )
634
715
635
- baggage := otelbaggage .FromContext (req . Context () )
716
+ baggage := otelbaggage .FromContext (handlerCtx )
636
717
assert .NotNil (t , baggage )
637
718
member := baggage .Member ("key1" )
638
719
assert .Equal (t , "ctxval" , member .Value ())
@@ -652,14 +733,21 @@ func TestHTTPTraceMiddleware(t *testing.T) {
652
733
req := httptest .NewRequest (http .MethodGet , "/test" , nil )
653
734
req .Header .Add ("baggage" , "key1=value1,key2=" + longValue )
654
735
736
+ // overwrite handler to ensure we check the ctx baggage properly
737
+ var handlerCtx context.Context
738
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
739
+ handlerCtx = r .Context ()
740
+ w .WriteHeader (http .StatusOK )
741
+ })
742
+
655
743
rr := httptest .NewRecorder ()
656
744
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
657
745
handler .ServeHTTP (rr , req )
658
746
659
747
assert .Equal (t , "key1=value1,key2=" + longValue , rr .Header ().Get ("baggage" ))
660
748
661
749
// Verify baggage is NOT in context
662
- baggage := otelbaggage .FromContext (req . Context () )
750
+ baggage := otelbaggage .FromContext (handlerCtx )
663
751
assert .Empty (t , baggage .Members ())
664
752
})
665
753
@@ -677,11 +765,18 @@ func TestHTTPTraceMiddleware(t *testing.T) {
677
765
ctx := otelbaggage .ContextWithBaggage (req .Context (), bag )
678
766
req = req .WithContext (ctx )
679
767
768
+ // overwrite handler to ensure we check the ctx baggage properly
769
+ var handlerCtx context.Context
770
+ fakeHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
771
+ handlerCtx = r .Context ()
772
+ w .WriteHeader (http .StatusOK )
773
+ })
774
+
680
775
rr := httptest .NewRecorder ()
681
776
handler := HTTPTraceMiddleware (fakeHandler , "fakeAppID" , config.TracingSpec {SamplingRate : "1" })
682
777
handler .ServeHTTP (rr , req )
683
778
684
- baggage := otelbaggage .FromContext (req . Context () )
779
+ baggage := otelbaggage .FromContext (handlerCtx )
685
780
assert .NotNil (t , baggage )
686
781
assert .Len (t , baggage .Members (), 2 )
687
782
member := baggage .Member ("key2" )
@@ -707,10 +802,6 @@ func TestHTTPTraceMiddleware(t *testing.T) {
707
802
708
803
// OpenTelemetry rejects entire baggage if any item exceeds length limit
709
804
assert .Empty (t , rr .Header ().Get ("baggage" ))
710
-
711
- // Verify baggage is in ctx, but empty (OpenTelemetry creates empty baggage)
712
- baggage := otelbaggage .FromContext (req .Context ())
713
- assert .Empty (t , baggage .Members (), "baggage should be empty since it was rejected" )
714
805
})
715
806
}
716
807
0 commit comments