otelhandler_test.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package handler
  2. import (
  3. "context"
  4. "net/http"
  5. "net/http/httptest"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/tal-tech/go-zero/core/trace/opentelemetry"
  9. "go.opentelemetry.io/otel"
  10. "go.opentelemetry.io/otel/propagation"
  11. "go.opentelemetry.io/otel/trace"
  12. )
  13. func TestOtelHandler(t *testing.T) {
  14. opentelemetry.StartAgent(opentelemetry.Config{
  15. Name: "go-zero-test",
  16. Endpoint: "http://localhost:14268/api/traces",
  17. Batcher: "jaeger",
  18. Sampler: 1.0,
  19. })
  20. ts := httptest.NewServer(
  21. http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  22. ctx := otel.GetTextMapPropagator().Extract(r.Context(), propagation.HeaderCarrier(r.Header))
  23. spanCtx := trace.SpanContextFromContext(ctx)
  24. assert.Equal(t, true, spanCtx.IsValid())
  25. }),
  26. )
  27. defer ts.Close()
  28. client := ts.Client()
  29. err := func(ctx context.Context) error {
  30. ctx, span := otel.Tracer("httptrace/client").Start(ctx, "test")
  31. defer span.End()
  32. req, _ := http.NewRequest("GET", ts.URL, nil)
  33. otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(req.Header))
  34. res, err := client.Do(req)
  35. assert.Equal(t, err, nil)
  36. _ = res.Body.Close()
  37. return nil
  38. }(context.Background())
  39. assert.Equal(t, err, nil)
  40. }