mirror of
				https://github.com/tailscale/tailscale.git
				synced 2025-10-31 16:22:03 +01:00 
			
		
		
		
	To avoid ephemeral port / TIME_WAIT exhaustion with high --count values, and to eventually detect leaked connections in tests. (Later the memory network will register a Cleanup on the TB to verify that everything's been shut down) Updates tailscale/corp#27636 Change-Id: Id06f1ae750d8719c5a75d871654574a8226d2733 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) Tailscale Inc & AUTHORS
 | |
| // SPDX-License-Identifier: BSD-3-Clause
 | |
| 
 | |
| // Package testenv provides utility functions for tests. It does not depend on
 | |
| // the `testing` package to allow usage in non-test code.
 | |
| package testenv
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"flag"
 | |
| 
 | |
| 	"tailscale.com/types/lazy"
 | |
| )
 | |
| 
 | |
| var lazyInTest lazy.SyncValue[bool]
 | |
| 
 | |
| // InTest reports whether the current binary is a test binary.
 | |
| func InTest() bool {
 | |
| 	return lazyInTest.Get(func() bool {
 | |
| 		return flag.Lookup("test.v") != nil
 | |
| 	})
 | |
| }
 | |
| 
 | |
| // TB is testing.TB, to avoid importing "testing" in non-test code.
 | |
| type TB interface {
 | |
| 	Cleanup(func())
 | |
| 	Error(args ...any)
 | |
| 	Errorf(format string, args ...any)
 | |
| 	Fail()
 | |
| 	FailNow()
 | |
| 	Failed() bool
 | |
| 	Fatal(args ...any)
 | |
| 	Fatalf(format string, args ...any)
 | |
| 	Helper()
 | |
| 	Log(args ...any)
 | |
| 	Logf(format string, args ...any)
 | |
| 	Name() string
 | |
| 	Setenv(key, value string)
 | |
| 	Chdir(dir string)
 | |
| 	Skip(args ...any)
 | |
| 	SkipNow()
 | |
| 	Skipf(format string, args ...any)
 | |
| 	Skipped() bool
 | |
| 	TempDir() string
 | |
| 	Context() context.Context
 | |
| }
 | |
| 
 | |
| // InParallelTest reports whether t is running as a parallel test.
 | |
| //
 | |
| // Use of this function taints t such that its Parallel method (assuming t is an
 | |
| // actual *testing.T) will panic if called after this function.
 | |
| func InParallelTest(t TB) (isParallel bool) {
 | |
| 	defer func() {
 | |
| 		if r := recover(); r != nil {
 | |
| 			isParallel = true
 | |
| 		}
 | |
| 	}()
 | |
| 	t.Chdir(".") // panics in a t.Parallel test
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| // AssertInTest panics if called outside of a test binary.
 | |
| func AssertInTest() {
 | |
| 	if !InTest() {
 | |
| 		panic("func called outside of test binary")
 | |
| 	}
 | |
| }
 |