| package testutils | |
| import "testing" | |
| // Logger is used to log non-fatal messages during tests. | |
| type Logger interface { | |
| Logf(format string, args ...any) | |
| } | |
| var _ Logger = (*testing.T)(nil) | |
| // SetupTestOSContext joins the current goroutine to a new network namespace, | |
| // and returns its associated teardown function. | |
| // | |
| // Example usage: | |
| // | |
| // defer SetupTestOSContext(t)() | |
| func SetupTestOSContext(t *testing.T) func() { | |
| c := SetupTestOSContextEx(t) | |
| return func() { c.Cleanup(t) } | |
| } | |
| // Go starts running fn in a new goroutine inside the test OS context. | |
| func (c *OSContext) Go(t *testing.T, fn func()) { | |
| t.Helper() | |
| errCh := make(chan error, 1) | |
| go func() { | |
| teardown, err := c.Set() | |
| if err != nil { | |
| errCh <- err | |
| return | |
| } | |
| defer teardown(t) | |
| close(errCh) | |
| fn() | |
| }() | |
| if err := <-errCh; err != nil { | |
| t.Fatalf("%+v", err) | |
| } | |
| } |