diff --git a/x/xnet/stack-go.go b/x/xnet/stack-go.go index 45e62fb..0d346e7 100644 --- a/x/xnet/stack-go.go +++ b/x/xnet/stack-go.go @@ -104,9 +104,11 @@ func (s StackGo) SocketNetip(ctx context.Context, network string, family, sotype return nil, err } uc := udpconn{ - Conn: &conn, - localAddr: net.UDPAddrFromAddrPort(laddr), - raddr: net.UDPAddrFromAddrPort(raddr), + Conn: &conn, + // TODO: use udpaddr until UDPAddrFromAddrPort added to tinygo. + // https://github.com/tinygo-org/net/issues/45 + localAddr: udpaddr(laddr), + raddr: udpaddr(raddr), } return uc, nil case "tcp", "tcp4": @@ -244,3 +246,11 @@ var _ net.Conn = udpconn{} func (c udpconn) LocalAddr() net.Addr { return c.localAddr } func (c udpconn) RemoteAddr() net.Addr { return c.raddr } + +func udpaddr(addr netip.AddrPort) net.Addr { + return &net.UDPAddr{ + IP: addr.Addr().AsSlice(), + Zone: addr.Addr().Zone(), + Port: int(addr.Port()), + } +} diff --git a/x/xnet/xnet_tinygo_test.go b/x/xnet/xnet_tinygo_test.go new file mode 100644 index 0000000..219b418 --- /dev/null +++ b/x/xnet/xnet_tinygo_test.go @@ -0,0 +1,22 @@ +//go:build !tinygo + +// Exclude tinygo compiler from build since exec package and t.Skip() are unimplemented. +// Also: wouldn't including tinygo cause a recursive call to tinygo test? +package xnet + +import ( + "os/exec" + "testing" +) + +func TestTinyGoTest(t *testing.T) { + if exec.Command("tinygo", "version").Run() != nil { + t.Skip("tinygo not installed") + } + // This takes a long time. Consider running only important + // tests with -run=TestXxx flag: `go test ./... -run=TestXxx` + out, err := exec.Command("tinygo", "test", ".").CombinedOutput() + if err != nil { + t.Fatal("tinygo failed to test:", err, "\n", string(out)) + } +}