mirror of
https://github.com/kubernetes/kubernetes.git
synced 2026-04-21 14:18:21 -04:00
The recent change to support importing ktesting into an E2E suite without progress reporting was flawed: - If a Go unit test had a deadline (the default when invoked by `go test`!), the early return skipped initializing progress reporting. - When it didn't, for example when invoking a test binary directly under stress, a test created goroutines which were kept running, which broke leak checking in e.g. an integration tests TestMain. The revised approach uses reference counting: as long as some unit test is running, the progress reporting with the required goroutines are active. When the last one ends, they get cleaned up, which keeps the goleak checker happy.
45 lines
1 KiB
Go
45 lines
1 KiB
Go
/*
|
|
Copyright 2024 The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package ktesting
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
|
|
"go.uber.org/goleak"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
// Bail out early when -help was given as parameter.
|
|
flag.Parse()
|
|
|
|
// Must be called *before* creating new goroutines.
|
|
goleakOpts := []goleak.Option{
|
|
goleak.IgnoreCurrent(),
|
|
}
|
|
|
|
result := m.Run()
|
|
|
|
if err := goleak.Find(goleakOpts...); err != nil {
|
|
fmt.Fprintf(os.Stderr, "leaked Goroutines: %v", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
os.Exit(result)
|
|
}
|