Skip to content

Commit ba69ae1

Browse files
authored
[DX-252] More Gracefully Handle Unattributable Panics (#1726)
1 parent 30ca5ba commit ba69ae1

File tree

5 files changed

+100
-52
lines changed

5 files changed

+100
-52
lines changed

tools/flakeguard/go.mod

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
module github.com/smartcontractkit/chainlink-testing-framework/tools/flakeguard
22

3-
go 1.24.0
3+
go 1.24.1
44

55
require (
6-
github.com/briandowns/spinner v1.23.1
7-
github.com/go-resty/resty/v2 v2.16.2
6+
github.com/briandowns/spinner v1.23.2
7+
github.com/go-resty/resty/v2 v2.16.5
88
github.com/google/go-github/v67 v67.0.0
99
github.com/google/uuid v1.6.0
1010
github.com/rs/zerolog v1.33.0
11-
github.com/spf13/cobra v1.8.1
12-
github.com/stretchr/testify v1.9.0
13-
golang.org/x/oauth2 v0.24.0
14-
golang.org/x/text v0.20.0
11+
github.com/spf13/cobra v1.9.1
12+
github.com/stretchr/testify v1.10.0
13+
golang.org/x/oauth2 v0.28.0
14+
golang.org/x/text v0.23.0
1515
)
1616

1717
require (
@@ -23,9 +23,9 @@ require (
2323
github.com/mattn/go-isatty v0.0.19 // indirect
2424
github.com/pkg/errors v0.9.1 // indirect
2525
github.com/pmezard/go-difflib v1.0.0 // indirect
26-
github.com/spf13/pflag v1.0.5 // indirect
27-
golang.org/x/net v0.27.0 // indirect
28-
golang.org/x/sys v0.22.0 // indirect
29-
golang.org/x/term v0.22.0 // indirect
26+
github.com/spf13/pflag v1.0.6 // indirect
27+
golang.org/x/net v0.33.0 // indirect
28+
golang.org/x/sys v0.28.0 // indirect
29+
golang.org/x/term v0.27.0 // indirect
3030
gopkg.in/yaml.v3 v3.0.1 // indirect
3131
)

tools/flakeguard/go.sum

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
github.com/briandowns/spinner v1.23.1 h1:t5fDPmScwUjozhDj4FA46p5acZWIPXYE30qW2Ptu650=
2-
github.com/briandowns/spinner v1.23.1/go.mod h1:LaZeM4wm2Ywy6vO571mvhQNRcWfRUnXOs0RcKV0wYKM=
1+
github.com/briandowns/spinner v1.23.2 h1:Zc6ecUnI+YzLmJniCfDNaMbW0Wid1d5+qcTq4L2FW8w=
2+
github.com/briandowns/spinner v1.23.2/go.mod h1:LaZeM4wm2Ywy6vO571mvhQNRcWfRUnXOs0RcKV0wYKM=
33
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
4-
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
4+
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
55
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
66
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
77
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
88
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
9-
github.com/go-resty/resty/v2 v2.16.2 h1:CpRqTjIzq/rweXUt9+GxzzQdlkqMdt8Lm/fuK/CAbAg=
10-
github.com/go-resty/resty/v2 v2.16.2/go.mod h1:0fHAoK7JoBy/Ch36N8VFeMsK7xQOHhvWaC3iOktwmIU=
9+
github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
10+
github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
1111
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
1212
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
1313
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
@@ -33,25 +33,25 @@ github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
3333
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
3434
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
3535
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
36-
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
37-
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
38-
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
39-
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
40-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
41-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
42-
golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys=
43-
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
44-
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
45-
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
36+
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
37+
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
38+
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
39+
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
40+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
41+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
42+
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
43+
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
44+
golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc=
45+
golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
4646
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
4747
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
4848
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
49-
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
50-
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
51-
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
52-
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
53-
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
54-
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
49+
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
50+
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
51+
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
52+
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
53+
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
54+
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
5555
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
5656
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
5757
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

tools/flakeguard/runner/example_test_package/example_tests_test.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,10 @@ func TestSubTestsAllPass(t *testing.T) {
3030
t.Parallel()
3131

3232
t.Run("Pass1", func(t *testing.T) {
33-
t.Parallel()
3433
t.Log("This subtest always passes")
3534
})
3635

3736
t.Run("Pass2", func(t *testing.T) {
38-
t.Parallel()
3937
t.Log("This subtest always passes")
4038
})
4139
}
@@ -44,12 +42,10 @@ func TestSubTestsAllFail(t *testing.T) {
4442
t.Parallel()
4543

4644
t.Run("Fail1", func(t *testing.T) {
47-
t.Parallel()
4845
t.Fatal("This subtest always fails")
4946
})
5047

5148
t.Run("Fail2", func(t *testing.T) {
52-
t.Parallel()
5349
t.Fatal("This subtest always fails")
5450
})
5551
}
@@ -58,12 +54,10 @@ func TestSubTestsSomeFail(t *testing.T) {
5854
t.Parallel()
5955

6056
t.Run("Pass", func(t *testing.T) {
61-
t.Parallel()
6257
t.Log("This subtest always passes")
6358
})
6459

6560
t.Run("Fail", func(t *testing.T) {
66-
t.Parallel()
6761
t.Fatal("This subtest always fails")
6862
})
6963
}
@@ -72,12 +66,10 @@ func TestSubTestsSomePanic(t *testing.T) {
7266
t.Parallel()
7367

7468
t.Run("Pass", func(t *testing.T) {
75-
t.Parallel()
7669
t.Log("This subtest always passes")
7770
})
7871

7972
t.Run("Panic", func(t *testing.T) {
80-
t.Parallel()
8173
panic("This subtest always panics")
8274
})
8375
}
@@ -86,12 +78,10 @@ func TestFailInParentAfterSubTests(t *testing.T) {
8678
t.Parallel()
8779

8880
t.Run("Pass1", func(t *testing.T) {
89-
t.Parallel()
9081
t.Log("This subtest always passes")
9182
})
9283

9384
t.Run("Pass2", func(t *testing.T) {
94-
t.Parallel()
9585
t.Log("This subtest always passes")
9686
})
9787

tools/flakeguard/runner/runner.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"time"
1717

1818
"github.com/rs/zerolog/log"
19+
1920
"github.com/smartcontractkit/chainlink-testing-framework/tools/flakeguard/go-test-transform/pkg/transformer"
2021
"github.com/smartcontractkit/chainlink-testing-framework/tools/flakeguard/reports"
2122
)
@@ -194,7 +195,7 @@ func (r *Runner) runCmd(testCmd []string, runIndex int) (tempFilePath string, pa
194195
}
195196
defer tmpFile.Close()
196197

197-
cmd := exec.Command(testCmd[0], testCmd[1:]...)
198+
cmd := exec.Command(testCmd[0], testCmd[1:]...) //nolint:gosec
198199
cmd.Dir = r.ProjectPath
199200

200201
// If collecting raw output, write to both file & buffer
@@ -387,7 +388,8 @@ func (r *Runner) parseTestResults(jsonOutputPaths []string, runPrefix string, ru
387388
}
388389
panicTest, timeout, err := attributePanicToTest(outputs)
389390
if err != nil {
390-
return nil, err
391+
log.Warn().Err(err).Msg("Unable to attribute panic to a test")
392+
panicTest = "UnableToAttributePanicTestPleaseInvestigate"
391393
}
392394
panicTestKey := fmt.Sprintf("%s/%s", entryLine.Package, panicTest)
393395

@@ -633,7 +635,7 @@ func attributePanicToTest(outputs []string) (test string, timeout bool, err erro
633635
return testName, false, nil
634636
}
635637
}
636-
return "", false, fmt.Errorf("failed to attribute panic to test, using regex %s on these strings:\n%s",
638+
return "", false, fmt.Errorf("failed to attribute panic to test, using regex '%s' on these strings:\n\n%s",
637639
testNameRe.String(), strings.Join(outputs, ""))
638640
}
639641

tools/flakeguard/runner/runner_test.go

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import (
88
"strings"
99
"testing"
1010

11-
"github.com/smartcontractkit/chainlink-testing-framework/tools/flakeguard/reports"
12-
"github.com/smartcontractkit/chainlink-testing-framework/tools/flakeguard/utils"
1311
"github.com/stretchr/testify/assert"
1412
"github.com/stretchr/testify/require"
13+
14+
"github.com/smartcontractkit/chainlink-testing-framework/tools/flakeguard/reports"
15+
"github.com/smartcontractkit/chainlink-testing-framework/tools/flakeguard/utils"
1516
)
1617

1718
var (
@@ -256,6 +257,8 @@ func TestRun(t *testing.T) {
256257

257258
for _, tc := range testCases {
258259
t.Run(tc.name, func(t *testing.T) {
260+
t.Parallel()
261+
259262
testResults, err := tc.runner.RunTestPackages([]string{flakyTestPackagePath})
260263
require.NoError(t, err)
261264

@@ -538,7 +541,7 @@ func TestAttributePanicToTest(t *testing.T) {
538541
"\t/opt/hostedtoolcache/go/1.24.0/x64/src/testing/testing.go:1851 +0x413",
539542
" logger.go:146: 03:14:04.485880684\tINFO\tDeployed KeystoneForwarder 1.0.0 chain selector 909606746561742123 addr 0x72B66019aCEdc35F7F6e58DF94De95f3cBCC5971\t{\"version\": \"(devel)@unset\"}",
540543
" logger.go:146: 03:14:04.486035865\tINFO\tdeploying forwarder\t{\"version\": \"(devel)@unset\", \"chainSelector\": 5548718428018410741}",
541-
" logger.go:146: 2025-03-08T03:14:04.490Z\tINFO\tchangeset/jd_register_nodes.go:91\tregistered node\t{\"version\": \"unset@unset\", \"name\": \"node1\", \"id\": \"node:{id:\\\"895776f5ba0cc11c570a47b5cc3dbb8771da9262cfb545cd5d48251796af7f1d\\\" public_key:\\\"895776f5ba0cc11c570a47b5cc3dbb8771da9262cfb545cd5d48251796af7f1d\\\" is_enabled:true is_connected:true labels:{key:\\\"product\\\" value:\\\"test-product\\\"} labels:{key:\\\"environment\\\" value:\\\"test-env\\\"} labels:{key:\\\"nodeType\\\" value:\\\"bootstrap\\\"} labels:{key:\\\"don-0-don1\\\"}\"}",
544+
" logger.go:146: 2025-03-08T03:14:04.490Z\tINFO\tchangeset/jd_register_nodes.go:91\tregistered node\t{\"version\": \"unset@unset\", \"name\": \"node1\", \"id\": \"node:{id:\\\"895776f5ba0cc11c570a47b5cc3dbb8771da9262cfb545cd5d48251796af7f\\\" public_key:\\\"895776f5ba0cc11c570a47b5cc3dbb8771da9262cfb545cd5d48251796af7f\\\" is_enabled:true is_connected:true labels:{key:\\\"product\\\" value:\\\"test-product\\\"} labels:{key:\\\"environment\\\" value:\\\"test-env\\\"} labels:{key:\\\"nodeType\\\" value:\\\"bootstrap\\\"} labels:{key:\\\"don-0-don1\\\"}\"}",
542545
},
543546
},
544547
{
@@ -550,9 +553,7 @@ func TestAttributePanicToTest(t *testing.T) {
550553
}
551554

552555
for _, tc := range testCases {
553-
tc := tc // capture range variable
554556
t.Run(tc.name, func(t *testing.T) {
555-
t.Parallel()
556557
testName, timeout, err := attributePanicToTest(tc.outputs)
557558
assert.Equal(t, tc.expectedTimeout, timeout, "timeout flag mismatch")
558559
if tc.expectedTestName == "" {
@@ -565,6 +566,63 @@ func TestAttributePanicToTest(t *testing.T) {
565566
}
566567
}
567568

569+
func TestFailToAttributePanicToTest(t *testing.T) {
570+
t.Parallel()
571+
572+
testCases := []struct {
573+
name string
574+
outputs []string
575+
}{
576+
{
577+
name: "no test name in panic",
578+
outputs: []string{
579+
"panic: reflect: Elem of invalid type bool",
580+
"goroutine 104182 [running]:",
581+
"reflect.elem(0xc0569d9998?)",
582+
"\t/opt/hostedtoolcache/go/1.24.0/x64/src/reflect/type.go:733 +0x9a",
583+
"reflect.(*rtype).Elem(0xa4dd940?)",
584+
"\t/opt/hostedtoolcache/go/1.24.0/x64/src/reflect/type.go:737 +0x15",
585+
"github.com/smartcontractkit/chainlink-solana/pkg/solana/chainreader.setPollingFilterOverrides(0x0, {0xc052040510, 0x1, 0xc?})",
586+
"\t/home/runner/go/pkg/mod/github.com/smartcontractkit/[email protected]/pkg/solana/chainreader/chain_reader.go:942 +0x492",
587+
"github.com/smartcontractkit/chainlink-solana/pkg/solana/chainreader.(*ContractReaderService).addEventRead(_, _, {_, _}, {_, _}, {{0xc0544c4270, 0x9}, {0xc0544c4280, 0xc}, ...}, ...)",
588+
"\t/home/runner/go/pkg/mod/github.com/smartcontractkit/[email protected]/pkg/solana/chainreader/chain_reader.go:605 +0x13d",
589+
"github.com/smartcontractkit/chainlink-solana/pkg/solana/chainreader.(*ContractReaderService).initNamespace(0xc054472540, 0xc01c37d440?)",
590+
"\t/home/runner/go/pkg/mod/github.com/smartcontractkit/[email protected]/pkg/solana/chainreader/chain_reader.go:443 +0x28b",
591+
"github.com/smartcontractkit/chainlink-solana/pkg/solana/chainreader.NewContractReaderService({0x7fcf8b532040?, 0xc015b223e0?}, {0xc6ac960, 0xc05464e470}, {0xc0544384e0?, {0xc01c37d440?, 0xc054163b84?, 0xc054163b80?}}, {0x7fcf8071c7a0, 0xc0157928c0})",
592+
"\t/home/runner/go/pkg/mod/github.com/smartcontractkit/[email protected]/pkg/solana/chainreader/chain_reader.go:97 +0x287",
593+
"github.com/smartcontractkit/chainlink-solana/pkg/solana.(*Relayer).NewContractReader(0xc015b2e150, {0x4d0102030cb384f5?, 0xb938300b5ca1aa13?}, {0xc05469c000, 0x1eedf, 0x20000})",
594+
"\t/home/runner/go/pkg/mod/github.com/smartcontractkit/[email protected]/pkg/solana/relay.go:160 +0x205",
595+
"github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/oraclecreator.(*pluginOracleCreator).createReadersAndWriters(_, {_, _}, {_, _}, _, {0x3, {0x0, 0xa, 0x93, ...}, ...}, ...)",
596+
"\t/home/runner/work/chainlink/chainlink/core/capabilities/ccip/oraclecreator/plugin.go:446 +0x338",
597+
"github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/oraclecreator.(*pluginOracleCreator).Create(0xc033a69ad0, {0xc6f5a10, 0xc02e4f9a40}, 0x3, {0x3, {0x0, 0xa, 0x93, 0x8f, 0x67, ...}, ...})",
598+
"\t/home/runner/work/chainlink/chainlink/core/capabilities/ccip/oraclecreator/plugin.go:215 +0xc0c",
599+
"github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/launcher.createDON({0xc6f5a10, 0xc02e4f9a40}, {0x7fcf8b533ad0, 0xc015b97340}, {0xb6, 0x5e, 0x31, 0xd0, 0x35, 0xef, ...}, ...)",
600+
"\t/home/runner/work/chainlink/chainlink/core/capabilities/ccip/launcher/launcher.go:367 +0x451",
601+
"github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/launcher.(*launcher).processAdded(0xc015723080, {0xc6f5a10, 0xc02e4f9a40}, 0xc053de2ff0)",
602+
"\t/home/runner/work/chainlink/chainlink/core/capabilities/ccip/launcher/launcher.go:254 +0x239",
603+
"github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/launcher.(*launcher).processDiff(0xc015723080, {0xc6f5a10, 0xc02e4f9a40}, {0xc053de2ff0?, 0xc053de3020?, 0xc053de3050?})",
604+
"\t/home/runner/work/chainlink/chainlink/core/capabilities/ccip/launcher/launcher.go:192 +0x68",
605+
"github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/launcher.(*launcher).tick(0xc015723080, {0xc6f5a10, 0xc02e4f9a40})",
606+
"\t/home/runner/work/chainlink/chainlink/core/capabilities/ccip/launcher/launcher.go:178 +0x20b",
607+
"github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/launcher.(*launcher).monitor(0xc015723080)",
608+
"\t/home/runner/work/chainlink/chainlink/core/capabilities/ccip/launcher/launcher.go:152 +0x112",
609+
"created by github.com/smartcontractkit/chainlink/v2/core/capabilities/ccip/launcher.(*launcher).Start.func1 in goroutine 1335",
610+
"\t/home/runner/work/chainlink/chainlink/core/capabilities/ccip/launcher/launcher.go:134 +0xa5",
611+
"FAIL\tgithub.com/smartcontractkit/chainlink/deployment/ccip/changeset/solana\t184.801s",
612+
},
613+
},
614+
}
615+
616+
for _, tc := range testCases {
617+
t.Run(tc.name, func(t *testing.T) {
618+
testName, timeout, err := attributePanicToTest(tc.outputs)
619+
require.Error(t, err)
620+
assert.Empty(t, testName, "test name should be empty")
621+
assert.False(t, timeout, "timeout flag should be false")
622+
})
623+
}
624+
}
625+
568626
func TestAttributeRaceToTest(t *testing.T) {
569627
t.Parallel()
570628

@@ -598,8 +656,6 @@ func TestAttributeRaceToTest(t *testing.T) {
598656
for _, testCase := range testCases {
599657
tc := testCase
600658
t.Run(tc.name, func(t *testing.T) {
601-
t.Parallel()
602-
603659
testName, err := attributeRaceToTest(tc.packageName, tc.raceEntries)
604660
if tc.expectedTestName == "" {
605661
require.Error(t, err)

0 commit comments

Comments
 (0)