91 lines
2.1 KiB
Go
91 lines
2.1 KiB
Go
//golangcitest:args -Espancheck
|
|
package spancheck
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
|
|
"go.opentelemetry.io/otel"
|
|
"go.opentelemetry.io/otel/codes"
|
|
)
|
|
|
|
type testDefaultError struct{}
|
|
|
|
func (e *testDefaultError) Error() string {
|
|
return "foo"
|
|
}
|
|
|
|
// incorrect
|
|
|
|
func _() {
|
|
otel.Tracer("foo").Start(context.Background(), "bar") // want "span is unassigned, probable memory leak"
|
|
ctx, _ := otel.Tracer("foo").Start(context.Background(), "bar") // want "span is unassigned, probable memory leak"
|
|
fmt.Print(ctx)
|
|
}
|
|
|
|
func _() {
|
|
ctx, span := otel.Tracer("foo").Start(context.Background(), "bar") // want "span.End is not called on all paths, possible memory leak"
|
|
print(ctx.Done(), span.IsRecording())
|
|
} // want "return can be reached without calling span.End"
|
|
|
|
func _() {
|
|
var ctx, span = otel.Tracer("foo").Start(context.Background(), "bar") // want "span.End is not called on all paths, possible memory leak"
|
|
print(ctx.Done(), span.IsRecording())
|
|
} // want "return can be reached without calling span.End"
|
|
|
|
func _() {
|
|
_, span := otel.Tracer("foo").Start(context.Background(), "bar") // want "span.End is not called on all paths, possible memory leak"
|
|
_, span = otel.Tracer("foo").Start(context.Background(), "bar")
|
|
fmt.Print(span)
|
|
defer span.End()
|
|
} // want "return can be reached without calling span.End"
|
|
|
|
// correct
|
|
|
|
func _() error {
|
|
_, span := otel.Tracer("foo").Start(context.Background(), "bar")
|
|
defer span.End()
|
|
|
|
return nil
|
|
}
|
|
|
|
func _() error {
|
|
_, span := otel.Tracer("foo").Start(context.Background(), "bar")
|
|
defer span.End()
|
|
|
|
if true {
|
|
return nil
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func _() error {
|
|
_, span := otel.Tracer("foo").Start(context.Background(), "bar")
|
|
defer span.End()
|
|
|
|
if false {
|
|
err := errors.New("foo")
|
|
span.SetStatus(codes.Error, err.Error())
|
|
span.RecordError(err)
|
|
return err
|
|
}
|
|
|
|
if true {
|
|
span.SetStatus(codes.Error, "foo")
|
|
span.RecordError(errors.New("foo"))
|
|
return errors.New("bar")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func _() {
|
|
_, span := otel.Tracer("foo").Start(context.Background(), "bar")
|
|
defer span.End()
|
|
|
|
_, span = otel.Tracer("foo").Start(context.Background(), "bar")
|
|
defer span.End()
|
|
}
|