@@ -19,12 +19,13 @@ import (
1919// goTestEvent represents a single event from `go test -json` output.
2020// See https://pkg.go.dev/cmd/test2json for the format specification.
2121type goTestEvent struct {
22- Time time.Time `json:"Time"`
23- Action string `json:"Action"`
24- Package string `json:"Package"`
25- Test string `json:"Test"`
26- Output string `json:"Output"`
27- Elapsed float64 `json:"Elapsed"` // seconds
22+ Time time.Time `json:"Time"`
23+ Action string `json:"Action"`
24+ Package string `json:"Package"`
25+ Test string `json:"Test"`
26+ Output string `json:"Output"`
27+ Elapsed float64 `json:"Elapsed"` // seconds
28+ FailedBuild string `json:"FailedBuild"` // package that failed to build (when Action == "fail")
2829}
2930
3031// testSpanData holds the span for an in-progress test
@@ -245,8 +246,16 @@ func (t *GoTestTracer) handleEnd(event *goTestEvent) {
245246 data .span .SetStatus (codes .Ok , "" )
246247 data .span .SetAttributes (attribute .String ("test.status" , "passed" ))
247248 case "fail" :
248- data .span .SetStatus (codes .Error , "test failed" )
249- data .span .SetAttributes (attribute .String ("test.status" , "failed" ))
249+ if event .FailedBuild != "" {
250+ data .span .SetStatus (codes .Error , "build failed" )
251+ data .span .SetAttributes (
252+ attribute .String ("test.status" , "build_failed" ),
253+ attribute .String ("test.failed_build" , event .FailedBuild ),
254+ )
255+ } else {
256+ data .span .SetStatus (codes .Error , "test failed" )
257+ data .span .SetAttributes (attribute .String ("test.status" , "failed" ))
258+ }
250259 case "skip" :
251260 data .span .SetStatus (codes .Ok , "test skipped" )
252261 data .span .SetAttributes (attribute .String ("test.status" , "skipped" ))
@@ -272,8 +281,16 @@ func (t *GoTestTracer) handleEnd(event *goTestEvent) {
272281 data .span .SetStatus (codes .Ok , "" )
273282 data .span .SetAttributes (attribute .String ("test.status" , "passed" ))
274283 case "fail" :
275- data .span .SetStatus (codes .Error , "package tests failed" )
276- data .span .SetAttributes (attribute .String ("test.status" , "failed" ))
284+ if event .FailedBuild != "" {
285+ data .span .SetStatus (codes .Error , "build failed" )
286+ data .span .SetAttributes (
287+ attribute .String ("test.status" , "build_failed" ),
288+ attribute .String ("test.failed_build" , event .FailedBuild ),
289+ )
290+ } else {
291+ data .span .SetStatus (codes .Error , "package tests failed" )
292+ data .span .SetAttributes (attribute .String ("test.status" , "failed" ))
293+ }
277294 case "skip" :
278295 data .span .SetStatus (codes .Ok , "package tests skipped" )
279296 data .span .SetAttributes (attribute .String ("test.status" , "skipped" ))
0 commit comments