github.com/kubiko/snapd@v0.0.0-20201013125620-d4f3094d9ddf/osutil/udev/netlink/rawsockstop_test.go (about) 1 package netlink 2 3 import ( 4 "os" 5 "syscall" 6 "testing" 7 ) 8 9 func TestRawSockStopperReadable(t *testing.T) { 10 r, w, err := os.Pipe() 11 if err != nil { 12 t.Fatalf("cannot make test pipe: %v", err) 13 } 14 15 oldStopperSelectTimeout := stopperSelectTimeout 16 stopperSelectTimeout = func() *syscall.Timeval { 17 return &syscall.Timeval{ 18 Usec: 50 * 1000, // 50ms 19 } 20 } 21 defer func() { 22 stopperSelectTimeout = oldStopperSelectTimeout 23 }() 24 25 readableOrStop, _, err := RawSockStopper(int(r.Fd())) 26 if err != nil { 27 t.Fatalf("rawSockStopper: %v", err) 28 } 29 30 readable, err := readableOrStop() 31 if err != nil { 32 t.Fatalf("readableOrStop should timeout without error: %v", err) 33 } 34 if readable { 35 t.Fatal("readableOrStop: expected nothing to read yet") 36 } 37 38 w.Write([]byte{1}) 39 readable, err = readableOrStop() 40 if err != nil { 41 t.Fatalf("readableOrStop should succeed without error: %v", err) 42 } 43 if !readable { 44 t.Fatal("readableOrStop: expected something to read") 45 } 46 } 47 48 func TestRawSockStopperStop(t *testing.T) { 49 r, _, err := os.Pipe() 50 if err != nil { 51 t.Fatalf("cannot make test pipe: %v", err) 52 } 53 54 readableOrStop, stop, err := RawSockStopper(int(r.Fd())) 55 if err != nil { 56 t.Fatalf("rawSockStopper: %v", err) 57 } 58 59 stop() 60 readable, err := readableOrStop() 61 if err != nil { 62 t.Fatalf("readableOrStop should return without error: %v", err) 63 } 64 if readable { 65 t.Fatal("readableOrStop: expected nothing to read, just stopped") 66 } 67 68 }