diff options
author | Ian Lance Taylor <iant@golang.org> | 2020-08-26 17:26:05 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-08-27 23:19:15 +0000 |
commit | 4f76fe86756841befb6574ce4bf04113d14389d4 (patch) | |
tree | 7c99448c043961b189d1c05a7b63d4b411b8acf3 /src/internal | |
parent | cdc635547fc436dc49c91ddb172b0e101febd3d7 (diff) | |
download | go-4f76fe86756841befb6574ce4bf04113d14389d4.tar.gz go-4f76fe86756841befb6574ce4bf04113d14389d4.zip |
cmd/go, testing, os: fail test that calls os.Exit(0)
This catches cases where a test calls code that calls os.Exit(0),
thereby skipping all subsequent tests.
Fixes #29062
Change-Id: If9478972f40189e27623557e7141469ca4234d89
Reviewed-on: https://go-review.googlesource.com/c/go/+/250977
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/testlog/exit.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/internal/testlog/exit.go b/src/internal/testlog/exit.go new file mode 100644 index 0000000000..e15defdb5b --- /dev/null +++ b/src/internal/testlog/exit.go @@ -0,0 +1,33 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testlog + +import "sync" + +// PanicOnExit0 reports whether to panic on a call to os.Exit(0). +// This is in the testlog package because, like other definitions in +// package testlog, it is a hook between the testing package and the +// os package. This is used to ensure that an early call to os.Exit(0) +// does not cause a test to pass. +func PanicOnExit0() bool { + panicOnExit0.mu.Lock() + defer panicOnExit0.mu.Unlock() + return panicOnExit0.val +} + +// panicOnExit0 is the flag used for PanicOnExit0. This uses a lock +// because the value can be cleared via a timer call that may race +// with calls to os.Exit +var panicOnExit0 struct { + mu sync.Mutex + val bool +} + +// SetPanicOnExit0 sets panicOnExit0 to v. +func SetPanicOnExit0(v bool) { + panicOnExit0.mu.Lock() + defer panicOnExit0.mu.Unlock() + panicOnExit0.val = v +} |