...
1 package netns
2
3 import (
4 "runtime"
5 "sync"
6 "testing"
7 )
8
9 func 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 if err := newns.Close(); err != nil {
28 t.Error("Failed to close ns", err)
29 }
30 if newns.IsOpen() {
31 t.Fatal("newns still open after close", newns)
32 }
33 ns, err := Get()
34 if err != nil {
35 t.Fatal(err)
36 }
37 if !ns.Equal(origns) {
38 t.Fatal("Reset ns failed", origns, newns, ns)
39 }
40 }
41
42 func TestNone(t *testing.T) {
43 ns := None()
44 if ns.IsOpen() {
45 t.Fatal("None ns is open", ns)
46 }
47 }
48
49 func TestThreaded(t *testing.T) {
50 ncpu := runtime.GOMAXPROCS(-1)
51 if ncpu < 2 {
52 t.Skip("-cpu=2 or larger required")
53 }
54
55
56 runtime.LockOSThread()
57 defer runtime.UnlockOSThread()
58
59 wg := &sync.WaitGroup{}
60 for i := 0; i < ncpu; i++ {
61 wg.Add(1)
62 go func() {
63 defer wg.Done()
64 TestGetNewSetDelete(t)
65 }()
66 }
67 wg.Wait()
68 }
69
View as plain text