52 lines
1.6 KiB
Go
52 lines
1.6 KiB
Go
package telemetry_test
|
|
|
|
import (
|
|
"context"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
omni "git.yuntuo.hk/k2safe/go-omni"
|
|
apierrors "git.yuntuo.hk/k2safe/go-omni/errors"
|
|
"git.yuntuo.hk/k2safe/go-omni/response"
|
|
"git.yuntuo.hk/k2safe/go-omni/telemetry"
|
|
"go.opentelemetry.io/otel/codes"
|
|
"go.opentelemetry.io/otel/sdk/trace/tracetest"
|
|
)
|
|
|
|
func TestCatalogFailureTraceWithHTTP200(t *testing.T) {
|
|
exporter := tracetest.NewInMemoryExporter()
|
|
runtime, err := telemetry.New(telemetry.Config{Service: "fixture", SampleRatio: 1, Exporter: exporter})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer runtime.Close()
|
|
app := omni.New(omni.WithErrors(apierrors.Catalog{DefaultStatus: 200, Definitions: map[string]apierrors.Definition{"INVALID": {Code: 123, Message: "invalid"}}}), omni.WithResponse(response.Config{CodeType: "int32", SuccessCode: 0, ErrorCode: 9999}))
|
|
defer app.Close()
|
|
app.Use(runtime.Middleware())
|
|
app.GET("/", func(c *omni.Context) error { c.WriteError(apierrors.ByCode("INVALID")); return nil })
|
|
w := httptest.NewRecorder()
|
|
app.ServeHTTP(w, httptest.NewRequest("GET", "/", nil))
|
|
if w.Code != 200 {
|
|
t.Fatal(w.Code)
|
|
}
|
|
if err := runtime.Flush(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
spans := exporter.GetSpans()
|
|
if len(spans) != 1 || spans[0].Status.Code != codes.Error {
|
|
t.Fatal(spans)
|
|
}
|
|
seenStatus, seenFailure := false, false
|
|
for _, attr := range spans[0].Attributes {
|
|
if attr.Key == "http.response.status_code" && attr.Value.AsInt64() == 200 {
|
|
seenStatus = true
|
|
}
|
|
if attr.Key == "omni.request.failed" && attr.Value.AsBool() {
|
|
seenFailure = true
|
|
}
|
|
}
|
|
if !seenStatus || !seenFailure {
|
|
t.Fatal(spans[0].Attributes)
|
|
}
|
|
}
|