mirror of
https://github.com/tailscale/tailscale.git
synced 2026-05-05 12:16:44 +02:00
Add test for udp conn
This commit is contained in:
parent
87fc7aa6b0
commit
c5cb642376
@ -4,16 +4,101 @@ package uring
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
const TestPort = 3636
|
||||
|
||||
var serverAddr = &net.UDPAddr{
|
||||
Port: TestPort,
|
||||
}
|
||||
|
||||
func NewUDPTestServer(t *testing.T) error {
|
||||
conn, err := net.ListenUDP("udp", serverAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
go func() {
|
||||
for {
|
||||
buf := make([]byte, 0, 512)
|
||||
n, _, err := conn.ReadFromUDP(buf)
|
||||
if err != nil {
|
||||
t.Errorf("failed to read on server: %v", err)
|
||||
break
|
||||
}
|
||||
t.Logf("%s, %v, %v", buf, n, err)
|
||||
}
|
||||
}()
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewUDPIOURingConnTestServer(t *testing.T) error {
|
||||
conn, err := net.ListenUDP("udp", serverAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
go func() {
|
||||
for {
|
||||
buf := make([]byte, 0, 512)
|
||||
n, _, err := conn.ReadFromUDP(buf)
|
||||
if err != nil {
|
||||
t.Errorf("failed to read on server: %v", err)
|
||||
break
|
||||
}
|
||||
t.Logf("%s, %v, %v", buf, n, err)
|
||||
}
|
||||
}()
|
||||
return nil
|
||||
}
|
||||
|
||||
func TestUDPConn(t *testing.T) {
|
||||
err := NewUDPTestServer(t)
|
||||
if err != nil {
|
||||
t.Errorf("failed to start UDPServer: %v", err)
|
||||
}
|
||||
udpConn, err := net.DialUDP("udp", nil, serverAddr)
|
||||
if err != nil {
|
||||
t.Errorf("failed to start udp connection to server: %v", err)
|
||||
}
|
||||
defer udpConn.Close()
|
||||
|
||||
conn, err := NewUDPConn(udpConn)
|
||||
if err != nil {
|
||||
t.Errorf("failed to start io_uring udp connection: %v", err)
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
content := []byte("a test string to check udpconn works 😀 with non-unicode input")
|
||||
n, err := conn.WriteTo(content, serverAddr)
|
||||
if err != nil {
|
||||
t.Errorf("conn write failed: %v", err)
|
||||
}
|
||||
if n != len(content) {
|
||||
t.Errorf("written len mismatch: want %v, got %v", len(content), n)
|
||||
}
|
||||
|
||||
// Test many writes at once
|
||||
for i := 0; i < 1000; i++ {
|
||||
n, err := conn.WriteTo(content, serverAddr)
|
||||
if err != nil {
|
||||
t.Errorf("conn write failed: %v", err)
|
||||
}
|
||||
if n != len(content) {
|
||||
t.Errorf("written len mismatch: want %v, got %v", len(content), n)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFile(t *testing.T) {
|
||||
tmpFile, err := ioutil.TempFile(".", "uring-test")
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create temp file: %v", err)
|
||||
}
|
||||
defer os.Remove(tmpFile.Name())
|
||||
t.Cleanup(func() {
|
||||
os.Remove(tmpFile.Name())
|
||||
})
|
||||
f, err := NewFile(tmpFile)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create io_uring file: %v", err)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user