diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..a57ce3f --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,17 @@ +version: 2 + +workflows: + version: 2 + test-build: + jobs: + - test + +jobs: + test: + docker: + - image: circleci/golang:1.17 + steps: + - checkout + - run: + name: Test + command: go test ./... diff --git a/errors.go b/errors.go index 2f202af..4d3fb75 100644 --- a/errors.go +++ b/errors.go @@ -1,6 +1,9 @@ package otgrpc import ( + "context" + "errors" + "github.com/opentracing/opentracing-go" "github.com/opentracing/opentracing-go/ext" "google.golang.org/grpc/codes" @@ -57,6 +60,9 @@ func SetSpanTags(span opentracing.Span, err error, client bool) { code := codes.Unknown if s, ok := status.FromError(err); ok { code = s.Code() + } else if errors.Is(err, context.Canceled) { + code = codes.Canceled + err = nil // Someone else canceled this operation - we should not flag it as an error. } span.SetTag("response_code", code) span.SetTag("response_class", c) diff --git a/test/interceptor_test.go b/test/interceptor_test.go index 4626b68..8299c92 100644 --- a/test/interceptor_test.go +++ b/test/interceptor_test.go @@ -1,6 +1,7 @@ package interceptor_test import ( + "fmt" "io" "net" "testing" @@ -9,8 +10,9 @@ import ( "github.com/stretchr/testify/assert" "context" + testpb "github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc/test/otgrpc_testing" - "github.com/opentracing-contrib/go-grpc" + otgrpc "github.com/opentracing-contrib/go-grpc" "github.com/opentracing/opentracing-go/mocktracer" "google.golang.org/grpc" ) @@ -266,5 +268,6 @@ func TestStreamingContextCancellationOpenTracing(t *testing.T) { parent := spans[0] child := spans[1] assert.Equal(t, child.ParentID, parent.Context().(mocktracer.MockSpanContext).SpanID) - assert.True(t, parent.Tag("error").(bool)) + assert.Equal(t, fmt.Sprint(parent.Tag("response_code")), "Canceled") + assert.Nil(t, parent.Tag("error")) }