1package netns 2 3import ( 4 "runtime" 5 "sync" 6 "testing" 7) 8 9func TestGetNewSetDelete(t *testing.T) { 10 runtime.LockOSThread() 11 defer runtime.UnlockOSThread() 12 13 origns, err := Get() 14 if err != nil { 15 t.Fatal(err) 16 } 17 newns, err := New() 18 if err != nil { 19 t.Fatal(err) 20 } 21 if origns.Equal(newns) { 22 t.Fatal("New ns failed") 23 } 24 if err := Set(origns); err != nil { 25 t.Fatal(err) 26 } 27 newns.Close() 28 if newns.IsOpen() { 29 t.Fatal("newns still open after close", newns) 30 } 31 ns, err := Get() 32 if err != nil { 33 t.Fatal(err) 34 } 35 if !ns.Equal(origns) { 36 t.Fatal("Reset ns failed", origns, newns, ns) 37 } 38} 39 40func TestNone(t *testing.T) { 41 ns := None() 42 if ns.IsOpen() { 43 t.Fatal("None ns is open", ns) 44 } 45} 46 47func TestThreaded(t *testing.T) { 48 ncpu := runtime.GOMAXPROCS(-1) 49 if ncpu < 2 { 50 t.Skip("-cpu=2 or larger required") 51 } 52 53 // Lock this thread simply to ensure other threads get used. 54 runtime.LockOSThread() 55 defer runtime.UnlockOSThread() 56 57 wg := &sync.WaitGroup{} 58 for i := 0; i < ncpu; i++ { 59 wg.Add(1) 60 go func() { 61 defer wg.Done() 62 TestGetNewSetDelete(t) 63 }() 64 } 65 wg.Wait() 66} 67