Files
wazero/internal/sysfs/sock_test.go
Crypt Keeper f3778cae08 wasi: fix nonblocking sockets on *NIX (gotip net/http) (#1503)
Signed-off-by: Adrian Cole <adrian@tetrate.io>
Co-authored-by: Edoardo Vacchi <evacchi@users.noreply.github.com>
2023-06-13 06:51:32 +10:00

106 lines
2.4 KiB
Go

package sysfs
import (
"net"
"syscall"
"testing"
"time"
"github.com/tetratelabs/wazero/internal/testing/require"
)
func TestTcpConnFile_Write(t *testing.T) {
listen, err := net.Listen("tcp", "127.0.0.1:0")
require.NoError(t, err)
defer listen.Close()
tcpAddr, err := net.ResolveTCPAddr("tcp", listen.Addr().String())
require.NoError(t, err)
tcp, err := net.DialTCP("tcp", nil, tcpAddr)
require.NoError(t, err)
defer tcp.Close() //nolint
file := newTcpConn(tcp)
errno := syscall.Errno(0)
// Ensure we don't interrupt until we get a non-zero errno,
// and we retry on EAGAIN (i.e. when nonblocking is true).
for {
_, errno = file.Write([]byte("wazero"))
if errno != syscall.EAGAIN {
break
}
time.Sleep(100 * time.Millisecond)
}
require.Zero(t, errno)
conn, err := listen.Accept()
require.NoError(t, err)
defer conn.Close()
bytes := make([]byte, 4)
n, err := conn.Read(bytes)
require.NoError(t, err)
require.NotEqual(t, 0, n)
require.Equal(t, "waze", string(bytes))
}
func TestTcpConnFile_Read(t *testing.T) {
listen, err := net.Listen("tcp", "127.0.0.1:0")
require.NoError(t, err)
defer listen.Close()
tcpAddr, err := net.ResolveTCPAddr("tcp", listen.Addr().String())
require.NoError(t, err)
tcp, err := net.DialTCP("tcp", nil, tcpAddr)
require.NoError(t, err)
defer tcp.Close() //nolint
n, err := tcp.Write([]byte("wazero"))
require.NoError(t, err)
require.NotEqual(t, 0, n)
conn, err := listen.Accept()
require.NoError(t, err)
defer conn.Close()
bytes := make([]byte, 4)
require.NoError(t, err)
errno := syscall.Errno(0)
file := newTcpConn(conn.(*net.TCPConn))
// Ensure we don't interrupt until we get a non-zero errno,
// and we retry on EAGAIN (i.e. when nonblocking is true).
for {
_, errno = file.Read(bytes)
if errno != syscall.EAGAIN {
break
}
time.Sleep(100 * time.Millisecond)
}
require.Zero(t, errno)
require.NoError(t, err)
require.Equal(t, "waze", string(bytes))
}
func TestTcpConnFile_Stat(t *testing.T) {
listen, err := net.Listen("tcp", "127.0.0.1:0")
require.NoError(t, err)
defer listen.Close()
tcpAddr, err := net.ResolveTCPAddr("tcp", listen.Addr().String())
require.NoError(t, err)
tcp, err := net.DialTCP("tcp", nil, tcpAddr)
require.NoError(t, err)
defer tcp.Close() //nolint
conn, err := listen.Accept()
require.NoError(t, err)
defer conn.Close()
file := newTcpConn(tcp)
_, errno := file.Stat()
require.Zero(t, errno, "Stat should not fail")
}