Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

testing: testlog kills tests that call m.Run multiple times #23129

Closed
rsc opened this issue Dec 14, 2017 · 3 comments
Closed

testing: testlog kills tests that call m.Run multiple times #23129

rsc opened this issue Dec 14, 2017 · 3 comments

Comments

@rsc
Copy link
Contributor

rsc commented Dec 14, 2017

After fixing #23047, running the influxdb tests turned up a failure caused by github.com/influxdata/influxdb/tests/server_test.go, which (surprise!) runs m.Run in a loop during TestMain:

func TestMain(m *testing.M) {
	var r int
	for _, indexType = range tsdb.RegisteredIndexes() {
		... setup ...

		// Run test suite.
		if testing.Verbose() {
			fmt.Printf("============= Running all tests for %q index =============\n", indexType)
		}
		if thisr := m.Run(); r == 0 {
			r = thisr // We'll always remember the first time r is non-zero
		}

		... cleanup ...
	}
	os.Exit(r)
}

This only barely works today. Flags like -test.cpuprofile overwrite the output on each iteration, so that the profile applies only to the last iteration. But it doesn't crash in Go 1.9. Now it crashes, because the second m.Run calls testlog.SetLogger, and testlog.SetLogger must only be called once.

I guess now we have to support running m.Run multiple times. Sigh.

@rsc rsc added this to the Go1.10 milestone Dec 14, 2017
@bradfitz
Copy link
Contributor

There's no sad face emoji reaction, so ... 😢

@gopherbot
Copy link

Change https://golang.org/cl/83956 mentions this issue: testing: do not crash when m.Run is called twice and -test.testlogfile is used

@golang golang locked and limited conversation to collaborators Dec 14, 2018
@golang golang unlocked this conversation Aug 28, 2020
@gopherbot
Copy link

Change https://golang.org/cl/251262 mentions this issue: testing: restore os.Exit(0) after every call to (*M).Run

gopherbot pushed a commit that referenced this issue Aug 28, 2020
cmd/go.TestScript/test_main_twice demonstrates a program that invokes
(*M).Run twice in a row. If we only restore os.Exit(0) in m.afterOnce,
we will fail to restore it after the second run and fail the test
process despite both runs passing.

Updates #29062
Updates #23129

Change-Id: Id22ec68f1708e4583c8dda14a8ba0efae7178b85
Reviewed-on: https://go-review.googlesource.com/c/go/+/251262
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
@golang golang locked and limited conversation to collaborators Aug 28, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants