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  }