新增dnst隧道
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package dns
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"net"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestPacketConnRoundTrip(t *testing.T) {
|
||||
serverPC, err := net.ListenPacket("udp", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer serverPC.Close()
|
||||
|
||||
clientPC, err := net.ListenPacket("udp", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer clientPC.Close()
|
||||
|
||||
server := ServerConn(serverPC, DomainOption("tunnel.example."))
|
||||
client := ClientConn(clientPC, DomainOption("tunnel.example."))
|
||||
_ = server.SetDeadline(time.Now().Add(3 * time.Second))
|
||||
_ = client.SetDeadline(time.Now().Add(3 * time.Second))
|
||||
|
||||
requestPayload := []byte("hello over dns")
|
||||
if n, err := client.WriteTo(requestPayload, server.LocalAddr()); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if n != len(requestPayload) {
|
||||
t.Fatalf("client WriteTo wrote %d bytes, want %d", n, len(requestPayload))
|
||||
}
|
||||
|
||||
buf := make([]byte, 1500)
|
||||
n, clientAddr, err := server.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got := buf[:n]; !bytes.Equal(got, requestPayload) {
|
||||
t.Fatalf("server ReadFrom got %q, want %q", got, requestPayload)
|
||||
}
|
||||
|
||||
responsePayload := []byte("world over dns")
|
||||
if n, err := server.WriteTo(responsePayload, clientAddr); err != nil {
|
||||
t.Fatal(err)
|
||||
} else if n != len(responsePayload) {
|
||||
t.Fatalf("server WriteTo wrote %d bytes, want %d", n, len(responsePayload))
|
||||
}
|
||||
|
||||
n, serverAddr, err := client.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if serverAddr.String() != server.LocalAddr().String() {
|
||||
t.Fatalf("response addr = %v, want %v", serverAddr, server.LocalAddr())
|
||||
}
|
||||
if got := buf[:n]; !bytes.Equal(got, responsePayload) {
|
||||
t.Fatalf("client ReadFrom got %q, want %q", got, responsePayload)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user