Skip to content

Commit adb23de

Browse files
committed
fix http_tracing_test
Signed-off-by: Cassandra Coyle <[email protected]>
1 parent 0716833 commit adb23de

File tree

1 file changed

+112
-21
lines changed

1 file changed

+112
-21
lines changed

pkg/diagnostics/http_tracing_test.go

Lines changed: 112 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -336,12 +336,19 @@ func TestHTTPTraceMiddleware(t *testing.T) {
336336
ctx := otelbaggage.ContextWithBaggage(req.Context(), bag)
337337
req = req.WithContext(ctx)
338338

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+
339346
rr := httptest.NewRecorder()
340347
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
341348
handler.ServeHTTP(rr, req)
342349

343350
// Verify baggage is in ctx
344-
baggage := otelbaggage.FromContext(req.Context())
351+
baggage := otelbaggage.FromContext(handlerCtx)
345352
assert.NotNil(t, baggage)
346353
member := baggage.Member("key1")
347354
assert.Equal(t, "value1", member.Value())
@@ -357,12 +364,19 @@ func TestHTTPTraceMiddleware(t *testing.T) {
357364
req := httptest.NewRequest(http.MethodGet, "/test", nil)
358365
req.Header.Set("baggage", "key1=value1;prop1=propvalue1")
359366

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+
360374
rr := httptest.NewRecorder()
361375
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
362376
handler.ServeHTTP(rr, req)
363377

364378
// Verify baggage is NOT in ctx
365-
baggage := otelbaggage.FromContext(req.Context())
379+
baggage := otelbaggage.FromContext(handlerCtx)
366380
assert.Empty(t, baggage.Members())
367381

368382
// Verify baggage is in headers
@@ -379,11 +393,18 @@ func TestHTTPTraceMiddleware(t *testing.T) {
379393
req = req.WithContext(ctx)
380394
req.Header.Set("baggage", "meta1=metaval1;prop1=metaprop1")
381395

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+
382403
rr := httptest.NewRecorder()
383404
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
384405
handler.ServeHTTP(rr, req)
385406

386-
baggage := otelbaggage.FromContext(req.Context())
407+
baggage := otelbaggage.FromContext(handlerCtx)
387408
assert.NotNil(t, baggage)
388409
member := baggage.Member("ctx1")
389410
assert.Equal(t, "ctxval1", member.Value())
@@ -398,6 +419,13 @@ func TestHTTPTraceMiddleware(t *testing.T) {
398419
req := httptest.NewRequest(http.MethodGet, "/test", nil)
399420
req.Header.Add("baggage", "")
400421

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+
401429
rr := httptest.NewRecorder()
402430
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
403431
handler.ServeHTTP(rr, req)
@@ -406,7 +434,7 @@ func TestHTTPTraceMiddleware(t *testing.T) {
406434
assert.Equal(t, "", rr.Header().Get("baggage"))
407435

408436
// Verify no baggage in context
409-
baggage := otelbaggage.FromContext(req.Context())
437+
baggage := otelbaggage.FromContext(handlerCtx)
410438
assert.Empty(t, baggage.Members(), "baggage should be empty")
411439
})
412440

@@ -418,6 +446,13 @@ func TestHTTPTraceMiddleware(t *testing.T) {
418446
ctx := otelbaggage.ContextWithBaggage(req.Context(), bag)
419447
req = req.WithContext(ctx)
420448

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+
421456
rr := httptest.NewRecorder()
422457
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
423458
handler.ServeHTTP(rr, req)
@@ -426,22 +461,29 @@ func TestHTTPTraceMiddleware(t *testing.T) {
426461
assert.Empty(t, rr.Header().Get("baggage"))
427462

428463
// Verify empty baggage in context
429-
baggage := otelbaggage.FromContext(req.Context())
464+
baggage := otelbaggage.FromContext(handlerCtx)
430465
assert.Empty(t, baggage.Members(), "baggage should be empty")
431466
})
432467

433468
t.Run("header baggage with properties", func(t *testing.T) {
434469
req := httptest.NewRequest(http.MethodGet, "/test", nil)
435470
req.Header.Add("baggage", "key1=value1;prop1=propvalue1,key2=value2;prop2=propvalue2")
436471

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+
437479
rr := httptest.NewRecorder()
438480
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
439481
handler.ServeHTTP(rr, req)
440482

441483
assert.Equal(t, "key1=value1;prop1=propvalue1,key2=value2;prop2=propvalue2", rr.Header().Get("baggage"))
442484

443485
// Verify baggage is NOT in ctx
444-
baggage := otelbaggage.FromContext(req.Context())
486+
baggage := otelbaggage.FromContext(handlerCtx)
445487
assert.Empty(t, baggage.Members())
446488
})
447489

@@ -453,14 +495,21 @@ func TestHTTPTraceMiddleware(t *testing.T) {
453495
ctx := otelbaggage.ContextWithBaggage(req.Context(), bag)
454496
req = req.WithContext(ctx)
455497

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+
456505
rr := httptest.NewRecorder()
457506
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
458507
handler.ServeHTTP(rr, req)
459508

460509
assert.Empty(t, rr.Header().Get("baggage"))
461510

462511
// Verify baggage is in ctx w/ both members & properties
463-
baggage := otelbaggage.FromContext(req.Context())
512+
baggage := otelbaggage.FromContext(handlerCtx)
464513
assert.NotNil(t, baggage, "baggage should be in ctx")
465514
assert.Len(t, baggage.Members(), 2, "should have 2 baggage members")
466515

@@ -488,6 +537,13 @@ func TestHTTPTraceMiddleware(t *testing.T) {
488537
req := httptest.NewRequest(http.MethodGet, "/test", nil)
489538
req.Header.Add("baggage", "key1=value1%20with%20spaces,key2=value2%2Fwith%2Fslashes")
490539

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+
491547
rr := httptest.NewRecorder()
492548
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
493549
handler.ServeHTTP(rr, req)
@@ -496,7 +552,7 @@ func TestHTTPTraceMiddleware(t *testing.T) {
496552
assert.Equal(t, "key1=value1%20with%20spaces,key2=value2%2Fwith%2Fslashes", rr.Header().Get("baggage"))
497553

498554
// Verify baggage is NOT in ctx
499-
baggage := otelbaggage.FromContext(req.Context())
555+
baggage := otelbaggage.FromContext(handlerCtx)
500556
assert.Empty(t, baggage.Members())
501557
})
502558

@@ -508,12 +564,19 @@ func TestHTTPTraceMiddleware(t *testing.T) {
508564
ctx := otelbaggage.ContextWithBaggage(req.Context(), bag)
509565
req = req.WithContext(ctx)
510566

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+
511574
rr := httptest.NewRecorder()
512575
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
513576
handler.ServeHTTP(rr, req)
514577

515578
// Verify baggage is in ctx with special chars (URL-decoded by OpenTelemetry)
516-
baggage := otelbaggage.FromContext(req.Context())
579+
baggage := otelbaggage.FromContext(handlerCtx)
517580
assert.NotNil(t, baggage)
518581
member := baggage.Member("key1")
519582
assert.Equal(t, "value2/with/slashes", member.Value())
@@ -561,6 +624,13 @@ func TestHTTPTraceMiddleware(t *testing.T) {
561624
ctx := otelbaggage.ContextWithBaggage(req.Context(), bag)
562625
req = req.WithContext(ctx)
563626

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+
564634
rr := httptest.NewRecorder()
565635
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
566636
handler.ServeHTTP(rr, req)
@@ -569,7 +639,7 @@ func TestHTTPTraceMiddleware(t *testing.T) {
569639
assert.Empty(t, rr.Header().Get("baggage"))
570640

571641
// Verify both members in ctx
572-
baggage := otelbaggage.FromContext(req.Context())
642+
baggage := otelbaggage.FromContext(handlerCtx)
573643
assert.NotNil(t, baggage)
574644
assert.Len(t, baggage.Members(), 2)
575645

@@ -591,12 +661,19 @@ func TestHTTPTraceMiddleware(t *testing.T) {
591661
req := httptest.NewRequest(http.MethodGet, "/test", nil)
592662
req.Header.Set("baggage", "")
593663

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+
594671
rr := httptest.NewRecorder()
595672
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
596673
handler.ServeHTTP(rr, req)
597674

598675
// Verify baggage is empty in ctx
599-
baggage := otelbaggage.FromContext(req.Context())
676+
baggage := otelbaggage.FromContext(handlerCtx)
600677
assert.Empty(t, baggage.Members())
601678

602679
// Verify no baggage in headers
@@ -613,10 +690,7 @@ func TestHTTPTraceMiddleware(t *testing.T) {
613690

614691
assert.Equal(t, http.StatusBadRequest, rr.Code)
615692
assert.Contains(t, rr.Body.String(), "invalid baggage header")
616-
617693
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")
620694
})
621695

622696
t.Run("baggage with same key in context and metadata", func(t *testing.T) {
@@ -628,11 +702,18 @@ func TestHTTPTraceMiddleware(t *testing.T) {
628702
req = req.WithContext(ctx)
629703
req.Header.Set("baggage", "key1=headerval;prop1=headerprop")
630704

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+
631712
rr := httptest.NewRecorder()
632713
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
633714
handler.ServeHTTP(rr, req)
634715

635-
baggage := otelbaggage.FromContext(req.Context())
716+
baggage := otelbaggage.FromContext(handlerCtx)
636717
assert.NotNil(t, baggage)
637718
member := baggage.Member("key1")
638719
assert.Equal(t, "ctxval", member.Value())
@@ -652,14 +733,21 @@ func TestHTTPTraceMiddleware(t *testing.T) {
652733
req := httptest.NewRequest(http.MethodGet, "/test", nil)
653734
req.Header.Add("baggage", "key1=value1,key2="+longValue)
654735

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+
655743
rr := httptest.NewRecorder()
656744
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
657745
handler.ServeHTTP(rr, req)
658746

659747
assert.Equal(t, "key1=value1,key2="+longValue, rr.Header().Get("baggage"))
660748

661749
// Verify baggage is NOT in context
662-
baggage := otelbaggage.FromContext(req.Context())
750+
baggage := otelbaggage.FromContext(handlerCtx)
663751
assert.Empty(t, baggage.Members())
664752
})
665753

@@ -677,11 +765,18 @@ func TestHTTPTraceMiddleware(t *testing.T) {
677765
ctx := otelbaggage.ContextWithBaggage(req.Context(), bag)
678766
req = req.WithContext(ctx)
679767

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+
680775
rr := httptest.NewRecorder()
681776
handler := HTTPTraceMiddleware(fakeHandler, "fakeAppID", config.TracingSpec{SamplingRate: "1"})
682777
handler.ServeHTTP(rr, req)
683778

684-
baggage := otelbaggage.FromContext(req.Context())
779+
baggage := otelbaggage.FromContext(handlerCtx)
685780
assert.NotNil(t, baggage)
686781
assert.Len(t, baggage.Members(), 2)
687782
member := baggage.Member("key2")
@@ -707,10 +802,6 @@ func TestHTTPTraceMiddleware(t *testing.T) {
707802

708803
// OpenTelemetry rejects entire baggage if any item exceeds length limit
709804
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")
714805
})
715806
}
716807

0 commit comments

Comments
 (0)