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
Milestone

Comments

@rsc
Copy link
Contributor

@rsc 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
@rsc rsc added the release-blocker label Dec 14, 2017
@bradfitz
Copy link
Contributor

@bradfitz bradfitz commented Dec 14, 2017

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

@gopherbot
Copy link

@gopherbot gopherbot commented Dec 14, 2017

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

@gopherbot gopherbot closed this in 94d7c88 Dec 14, 2017
@golang golang locked and limited conversation to collaborators Dec 14, 2018
@bcmills bcmills removed the FrozenDueToAge label Aug 28, 2020
@golang golang unlocked this conversation Aug 28, 2020
@gopherbot
Copy link

@gopherbot gopherbot commented Aug 28, 2020

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
4 participants
You can’t perform that action at this time.