5
5
package mage
6
6
7
7
import (
8
+ "errors"
8
9
"fmt"
9
10
"os"
10
11
"path/filepath"
11
12
"strconv"
12
13
13
- "github.com/joeshaw/multierror"
14
14
"github.com/magefile/mage/mg"
15
- "github.com/pkg/errors"
16
15
)
17
16
18
17
const (
@@ -85,7 +84,7 @@ func (steps IntegrationTestSteps) Setup(env map[string]string) error {
85
84
// errors ignored
86
85
_ = steps .teardownFrom (prev , env )
87
86
}
88
- return errors . Wrapf ( err , "%s setup failed" , step .Name ())
87
+ return fmt . Errorf ( "%s setup failed: %w " , step .Name (), err )
89
88
}
90
89
}
91
90
return nil
@@ -101,16 +100,16 @@ func (steps IntegrationTestSteps) Teardown(env map[string]string) error {
101
100
}
102
101
103
102
func (steps IntegrationTestSteps ) teardownFrom (start int , env map [string ]string ) error {
104
- var errs multierror. Errors
103
+ var errs [] error
105
104
for i := start ; i >= 0 ; i -- {
106
105
if mg .Verbose () {
107
106
fmt .Printf ("Teardown %s...\n " , steps [i ].Name ())
108
107
}
109
108
if err := steps [i ].Teardown (env ); err != nil {
110
- errs = append (errs , errors . Wrapf ( err , "%s teardown failed" , steps [i ].Name ()))
109
+ errs = append (errs , fmt . Errorf ( "%s teardown failed: %w " , steps [i ].Name (), err ))
111
110
}
112
111
}
113
- return errs . Err ( )
112
+ return errors . Join ( errs ... )
114
113
}
115
114
116
115
// IntegrationTester is interface used by the actual test runner.
@@ -149,34 +148,19 @@ func NewIntegrationRunners(path string, passInEnv map[string]string) (Integratio
149
148
}
150
149
dir := filepath .Join (cwd , path )
151
150
152
- // Load the overall steps to use (skipped inside of test environment, as they are never ran on the inside).
153
- // These steps are duplicated per scenario.
154
- var steps IntegrationTestSteps
155
- if ! IsInIntegTestEnv () {
156
- for _ , step := range globalIntegrationTestSetupSteps {
157
- use , err := step .Use (dir )
158
- if err != nil {
159
- return nil , errors .Wrapf (err , "%s step failed on Use" , step .Name ())
160
- }
161
- if use {
162
- steps = append (steps , step )
163
- }
164
- }
165
- }
166
-
167
151
// Create the runners (can only be multiple).
168
152
var runners IntegrationRunners
169
153
for _ , t := range globalIntegrationTesters {
170
154
use , err := t .Use (dir )
171
155
if err != nil {
172
- return nil , errors . Wrapf ( err , "%s tester failed on Use" , t .Name ())
156
+ return nil , fmt . Errorf ( "%s tester failed on Use: %w " , t .Name (), err )
173
157
}
174
158
if ! use {
175
159
continue
176
160
}
177
161
runner , err := initRunner (t , dir , passInEnv )
178
162
if err != nil {
179
- return nil , errors . Wrapf ( err , "initializing %s runner" , t .Name ())
163
+ return nil , fmt . Errorf ( "initializing %s runner: %w " , t .Name (), err )
180
164
}
181
165
runners = append (runners , runner )
182
166
}
@@ -192,7 +176,7 @@ func NewIntegrationRunners(path string, passInEnv map[string]string) (Integratio
192
176
}
193
177
runner , err := initRunner (tester , dir , passInEnv )
194
178
if err != nil {
195
- return nil , errors . Wrapf ( err , "initializing docker runner" )
179
+ return nil , fmt . Errorf ( "initializing docker runner: %w" , err )
196
180
}
197
181
runners = append (runners , runner )
198
182
}
@@ -243,38 +227,33 @@ func initRunner(tester IntegrationTester, dir string, passInEnv map[string]strin
243
227
}
244
228
245
229
// Test actually performs the test.
246
- func (r * IntegrationRunner ) Test (mageTarget string , test func () error ) ( err error ) {
230
+ func (r * IntegrationRunner ) Test (mageTarget string , test func () error ) error {
247
231
// Inside the testing environment just run the test.
248
232
if IsInIntegTestEnv () {
249
- err = r .tester .InsideTest (test )
250
- return
233
+ return r .tester .InsideTest (test )
251
234
}
252
235
253
236
// Honor the TEST_ENVIRONMENT value if set.
254
237
if testEnvVar , isSet := os .LookupEnv ("TEST_ENVIRONMENT" ); isSet {
255
- var enabled bool
256
- enabled , err = strconv .ParseBool (testEnvVar )
238
+ enabled , err := strconv .ParseBool (testEnvVar )
257
239
if err != nil {
258
- err = errors .Wrap (err , "failed to parse TEST_ENVIRONMENT value" )
259
- return
240
+ return fmt .Errorf ("failed to parse TEST_ENVIRONMENT value: %w" , err )
260
241
}
261
242
if ! enabled {
262
- err = fmt .Errorf ("TEST_ENVIRONMENT=%s" , testEnvVar )
263
- return
243
+ return fmt .Errorf ("TEST_ENVIRONMENT=%s" , testEnvVar )
264
244
}
265
245
}
266
246
267
247
// log missing requirements and do nothing
268
- err = r .tester .HasRequirements ()
248
+ err : = r .tester .HasRequirements ()
269
249
if err != nil {
270
- // log error; and return (otherwise on machines without requirements it will mark the tests as failed)
271
250
fmt .Printf ("skipping test run with %s due to missing requirements: %s\n " , r .tester .Name (), err )
272
- err = nil
273
- return
251
+ //nolint:nilerr // log error; and return (otherwise on machines without requirements it will mark the tests as failed)
252
+ return nil
274
253
}
275
254
276
- if err = r .steps .Setup (r .env ); err != nil {
277
- return
255
+ if err : = r .steps .Setup (r .env ); err != nil {
256
+ return err
278
257
}
279
258
280
259
// catch any panics to run teardown
@@ -306,18 +285,18 @@ func (r *IntegrationRunner) Test(mageTarget string, test func() error) (err erro
306
285
err = teardownErr
307
286
}
308
287
}
309
- return
288
+ return err
310
289
}
311
290
312
291
// Test runs the test on each runner and collects the errors.
313
292
func (r IntegrationRunners ) Test (mageTarget string , test func () error ) error {
314
- var errs multierror. Errors
293
+ var errs [] error
315
294
for _ , runner := range r {
316
295
if err := runner .Test (mageTarget , test ); err != nil {
317
296
errs = append (errs , err )
318
297
}
319
298
}
320
- return errs . Err ( )
299
+ return errors . Join ( errs ... )
321
300
}
322
301
323
302
func passThroughEnvs (env map [string ]string , passthrough ... string ) {
0 commit comments