...
1[short] skip
2
3# test fail fast
4! go test ./failfast_test.go -run='TestFailingA' -failfast=true
5stdout -count=1 'FAIL - '
6! go test ./failfast_test.go -run='TestFailing[AB]' -failfast=true
7stdout -count=1 'FAIL - '
8! go test ./failfast_test.go -run='TestFailing[AB]' -failfast=false
9stdout -count=2 'FAIL - '
10
11# mix with non-failing tests
12! go test ./failfast_test.go -run='TestA|TestFailing[AB]' -failfast=true
13stdout -count=1 'FAIL - '
14! go test ./failfast_test.go -run='TestA|TestFailing[AB]' -failfast=false
15stdout -count=2 'FAIL - '
16
17# mix with parallel tests
18! go test ./failfast_test.go -run='TestFailingB|TestParallelFailingA' -failfast=true
19stdout -count=2 'FAIL - '
20! go test ./failfast_test.go -run='TestFailingB|TestParallelFailingA' -failfast=false
21stdout -count=2 'FAIL - '
22! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]' -failfast=true
23stdout -count=3 'FAIL - '
24! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]' -failfast=false
25stdout -count=3 'FAIL - '
26
27# mix with parallel sub-tests
28! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]|TestParallelFailingSubtestsA' -failfast=true
29stdout -count=3 'FAIL - '
30! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]|TestParallelFailingSubtestsA' -failfast=false
31stdout -count=5 'FAIL - '
32! go test ./failfast_test.go -run='TestParallelFailingSubtestsA' -failfast=true
33stdout -count=1 'FAIL - '
34
35# a failure in a cleanup of a test with a parallel subtest must stop failfast
36# (go.dev/issue/61034)
37! go test ./failfast_test.go -run='TestCleanupFailingWithParallelSubtestA|TestFailingB' -failfast=true
38stdout -count=1 'FAIL - '
39! go test ./failfast_test.go -run='TestCleanupFailingWithParallelSubtestA|TestFailingB' -failfast=false
40stdout -count=2 'FAIL - '
41
42# only parallels
43! go test ./failfast_test.go -run='TestParallelFailing[AB]' -failfast=false
44stdout -count=2 'FAIL - '
45
46# non-parallel subtests
47! go test ./failfast_test.go -run='TestFailingSubtestsA' -failfast=true
48stdout -count=1 'FAIL - '
49! go test ./failfast_test.go -run='TestFailingSubtestsA' -failfast=false
50stdout -count=2 'FAIL - '
51
52# fatal test
53! go test ./failfast_test.go -run='TestFatal[CD]' -failfast=true
54stdout -count=1 'FAIL - '
55! go test ./failfast_test.go -run='TestFatal[CD]' -failfast=false
56stdout -count=2 'FAIL - '
57
58# cross package failfast
59! go test -p 1 -failfast ./a ./b ./c
60stdout -count=1 'FAIL - '
61stdout -count=1 'FAIL - TestFailingPkgA'
62
63-- go.mod --
64module m
65
66go 1.21.0
67-- failfast_test.go --
68// Copyright 2017 The Go Authors. All rights reserved.
69// Use of this source code is governed by a BSD-style
70// license that can be found in the LICENSE file.
71
72package failfast
73
74import "testing"
75
76func TestA(t *testing.T) {
77 // Edge-case testing, mixing unparallel tests too
78 t.Logf("LOG: %s", t.Name())
79}
80
81func TestFailingA(t *testing.T) {
82 t.Errorf("FAIL - %s", t.Name())
83}
84
85func TestB(t *testing.T) {
86 // Edge-case testing, mixing unparallel tests too
87 t.Logf("LOG: %s", t.Name())
88}
89
90func TestParallelFailingA(t *testing.T) {
91 t.Parallel()
92 t.Errorf("FAIL - %s", t.Name())
93}
94
95func TestParallelFailingB(t *testing.T) {
96 t.Parallel()
97 t.Errorf("FAIL - %s", t.Name())
98}
99
100func TestParallelFailingSubtestsA(t *testing.T) {
101 t.Parallel()
102 t.Run("TestFailingSubtestsA1", func(t *testing.T) {
103 t.Errorf("FAIL - %s", t.Name())
104 })
105 t.Run("TestFailingSubtestsA2", func(t *testing.T) {
106 t.Errorf("FAIL - %s", t.Name())
107 })
108}
109
110func TestFailingSubtestsA(t *testing.T) {
111 t.Run("TestFailingSubtestsA1", func(t *testing.T) {
112 t.Errorf("FAIL - %s", t.Name())
113 })
114 t.Run("TestFailingSubtestsA2", func(t *testing.T) {
115 t.Errorf("FAIL - %s", t.Name())
116 })
117}
118
119func TestCleanupFailingWithParallelSubtestA(t *testing.T) {
120 // Regression test for go.dev/issue/61034: a failure in a Cleanup
121 // function must be counted for -failfast even when the test has a
122 // parallel subtest.
123 t.Cleanup(func() {
124 t.Errorf("FAIL - %s", t.Name())
125 })
126 t.Run("sub", func(t *testing.T) {
127 t.Parallel()
128 })
129}
130
131func TestFailingB(t *testing.T) {
132 t.Errorf("FAIL - %s", t.Name())
133}
134
135func TestFatalC(t *testing.T) {
136 t.Fatalf("FAIL - %s", t.Name())
137}
138
139func TestFatalD(t *testing.T) {
140 t.Fatalf("FAIL - %s", t.Name())
141}
142-- a/a_test.go --
143package a
144
145import "testing"
146
147func TestFailingPkgA(t *testing.T) {
148 t.Errorf("FAIL - %s", t.Name())
149}
150-- b/b_test.go --
151package b
152
153import "testing"
154
155func TestFailingPkgB(t *testing.T) {
156 t.Errorf("FAIL - %s", t.Name())
157}
158-- c/c_test.go --
159package c
160
161import "testing"
162
163func TestFailingPkgC(t *testing.T) {
164 t.Errorf("FAIL - %s", t.Name())
165}
View as plain text