github.com/tetratelabs/wazero@v1.2.1/internal/sysfs/sock_test.go (about) 1 package sysfs 2 3 import ( 4 "net" 5 "syscall" 6 "testing" 7 "time" 8 9 "github.com/tetratelabs/wazero/internal/testing/require" 10 ) 11 12 func TestTcpConnFile_Write(t *testing.T) { 13 listen, err := net.Listen("tcp", "127.0.0.1:0") 14 require.NoError(t, err) 15 defer listen.Close() 16 17 tcpAddr, err := net.ResolveTCPAddr("tcp", listen.Addr().String()) 18 require.NoError(t, err) 19 tcp, err := net.DialTCP("tcp", nil, tcpAddr) 20 require.NoError(t, err) 21 defer tcp.Close() //nolint 22 23 file := newTcpConn(tcp) 24 errno := syscall.Errno(0) 25 // Ensure we don't interrupt until we get a non-zero errno, 26 // and we retry on EAGAIN (i.e. when nonblocking is true). 27 for { 28 _, errno = file.Write([]byte("wazero")) 29 if errno != syscall.EAGAIN { 30 break 31 } 32 time.Sleep(100 * time.Millisecond) 33 } 34 require.Zero(t, errno) 35 36 conn, err := listen.Accept() 37 require.NoError(t, err) 38 defer conn.Close() 39 40 bytes := make([]byte, 4) 41 42 n, err := conn.Read(bytes) 43 require.NoError(t, err) 44 require.NotEqual(t, 0, n) 45 46 require.Equal(t, "waze", string(bytes)) 47 } 48 49 func TestTcpConnFile_Read(t *testing.T) { 50 listen, err := net.Listen("tcp", "127.0.0.1:0") 51 require.NoError(t, err) 52 defer listen.Close() 53 54 tcpAddr, err := net.ResolveTCPAddr("tcp", listen.Addr().String()) 55 require.NoError(t, err) 56 tcp, err := net.DialTCP("tcp", nil, tcpAddr) 57 require.NoError(t, err) 58 defer tcp.Close() //nolint 59 60 n, err := tcp.Write([]byte("wazero")) 61 require.NoError(t, err) 62 require.NotEqual(t, 0, n) 63 64 conn, err := listen.Accept() 65 require.NoError(t, err) 66 defer conn.Close() 67 68 bytes := make([]byte, 4) 69 70 require.NoError(t, err) 71 errno := syscall.Errno(0) 72 file := newTcpConn(conn.(*net.TCPConn)) 73 // Ensure we don't interrupt until we get a non-zero errno, 74 // and we retry on EAGAIN (i.e. when nonblocking is true). 75 for { 76 _, errno = file.Read(bytes) 77 if errno != syscall.EAGAIN { 78 break 79 } 80 time.Sleep(100 * time.Millisecond) 81 } 82 require.Zero(t, errno) 83 require.NoError(t, err) 84 require.Equal(t, "waze", string(bytes)) 85 } 86 87 func TestTcpConnFile_Stat(t *testing.T) { 88 listen, err := net.Listen("tcp", "127.0.0.1:0") 89 require.NoError(t, err) 90 defer listen.Close() 91 92 tcpAddr, err := net.ResolveTCPAddr("tcp", listen.Addr().String()) 93 require.NoError(t, err) 94 tcp, err := net.DialTCP("tcp", nil, tcpAddr) 95 require.NoError(t, err) 96 defer tcp.Close() //nolint 97 98 conn, err := listen.Accept() 99 require.NoError(t, err) 100 defer conn.Close() 101 102 file := newTcpConn(tcp) 103 _, errno := file.Stat() 104 require.Zero(t, errno, "Stat should not fail") 105 }