e2e/main_test.go

a869e55cedfc2d279bbaba2e2a0a02eb1114d9b7
gitbay/e2e/main_test.go history · blame · raw

39 lines · 1333 bytes

 1package e2e
 2
 3import (
 4	"flag"
 5	"fmt"
 6	"os"
 7	"testing"
 8	"time"
 9)
10
11// This suite drives real git, ssh, sshd and gpg, and takes six to fifteen
12// minutes depending on the machine — past `go test`'s ten-minute default.
13// Exceeding it panics with the name of whichever test happened to be
14// running, which is never the one at fault and reads like a hang (#143).
15//
16// make test passes -timeout 30m and .gitbay/ci.yml passes -timeout 20m.
17// A bare `go test ./...` gets the default, so say so up front rather than
18// eleven minutes later.
19const minTimeout = 15 * time.Minute
20
21func TestMain(m *testing.M) {
22	flag.Parse()
23	// Only for a whole-package run: `-run TestOneThing -timeout 2m` is a
24	// reasonable thing to type and none of this applies to it.
25	if run := flag.Lookup("test.run"); run == nil || run.Value.String() == "" {
26		if f := flag.Lookup("test.timeout"); f != nil {
27			d, err := time.ParseDuration(f.Value.String())
28			if err == nil && d > 0 && d < minTimeout {
29				fmt.Fprintf(os.Stderr,
30					"e2e: -timeout is %s; this suite needs about %s.\n"+
31						"Run `make test` (which passes -timeout 30m), or pass -timeout yourself.\n"+
32						"Without this check the run panics part way through and blames whichever\n"+
33						"test was executing at the deadline.\n", d, minTimeout)
34				os.Exit(1)
35			}
36		}
37	}
38	os.Exit(m.Run())
39}