Skip to content

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

@rsc

Description

@rsc

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions