|
@@ -0,0 +1,49 @@
|
|
|
+package handler
|
|
|
+
|
|
|
+import (
|
|
|
+ "context"
|
|
|
+ "net/http"
|
|
|
+ "net/http/httptest"
|
|
|
+ "testing"
|
|
|
+
|
|
|
+ "github.com/stretchr/testify/assert"
|
|
|
+ "github.com/tal-tech/go-zero/core/opentelemetry"
|
|
|
+ "go.opentelemetry.io/otel/propagation"
|
|
|
+
|
|
|
+ "go.opentelemetry.io/otel"
|
|
|
+ "go.opentelemetry.io/otel/trace"
|
|
|
+)
|
|
|
+
|
|
|
+func TestOtelHandler(t *testing.T) {
|
|
|
+ opentelemetry.StartAgent(opentelemetry.Config{
|
|
|
+ Name: "go-zero-test",
|
|
|
+ Endpoint: "http://localhost:14268/api/traces",
|
|
|
+ Batcher: "jaeger",
|
|
|
+ Sampler: 1.0,
|
|
|
+ })
|
|
|
+
|
|
|
+ ts := httptest.NewServer(
|
|
|
+ http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
|
+ ctx := otel.GetTextMapPropagator().Extract(r.Context(), propagation.HeaderCarrier(r.Header))
|
|
|
+ spanCtx := trace.SpanContextFromContext(ctx)
|
|
|
+ assert.Equal(t, true, spanCtx.IsValid())
|
|
|
+ }),
|
|
|
+ )
|
|
|
+ defer ts.Close()
|
|
|
+
|
|
|
+ client := ts.Client()
|
|
|
+ err := func(ctx context.Context) error {
|
|
|
+ ctx, span := otel.Tracer("httptrace/client").Start(ctx, "test")
|
|
|
+ defer span.End()
|
|
|
+
|
|
|
+ req, _ := http.NewRequest("GET", ts.URL, nil)
|
|
|
+ otel.GetTextMapPropagator().Inject(ctx, propagation.HeaderCarrier(req.Header))
|
|
|
+
|
|
|
+ res, err := client.Do(req)
|
|
|
+ assert.Equal(t, err, nil)
|
|
|
+ _ = res.Body.Close()
|
|
|
+ return nil
|
|
|
+ }(context.Background())
|
|
|
+
|
|
|
+ assert.Equal(t, err, nil)
|
|
|
+}
|