From 7ba25ce936146c91bcc8d6f90dde25713e229019 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 3 Dec 2014 19:57:43 -0600 Subject: [PATCH] A probably unhelpful test that ensures UTP performs --- client_test.go | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/client_test.go b/client_test.go index 4db505df..d5ba379d 100644 --- a/client_test.go +++ b/client_test.go @@ -1,10 +1,15 @@ package torrent import ( + "fmt" + "log" + "net" "os" "testing" "time" + "github.com/h2so5/utp" + "bitbucket.org/anacrolix/go.torrent/testutil" "bitbucket.org/anacrolix/go.torrent/util" "github.com/anacrolix/libtorgo/bencode" @@ -103,3 +108,66 @@ func TestReducedDialTimeout(t *testing.T) { } } } + +func TestUTPRawConn(t *testing.T) { + l, err := utp.Listen("utp", &utp.Addr{&net.UDPAddr{Port: 0}}) + if err != nil { + t.Fatal(err) + } + defer l.Close() + go func() { + for { + _, err := l.Accept() + if err != nil { + break + } + } + }() + // Connect a UTP peer to see if the RawConn will still work. + utpPeer, err := utp.DialUTP("utp", nil, l.Addr().(*utp.Addr)) + if err != nil { + t.Fatalf("error dialing utp listener: %s", err) + } + defer utpPeer.Close() + peer, err := net.ListenPacket("udp", ":0") + if err != nil { + t.Fatal(err) + } + defer peer.Close() + + msgsReceived := 0 + const N = 5000 // How many messages to send. + readerStopped := make(chan struct{}) + // The reader goroutine. + go func() { + defer close(readerStopped) + b := make([]byte, 500) + for i := 0; i < N; i++ { + n, _, err := l.RawConn.ReadFrom(b) + if err != nil { + t.Fatalf("error reading from raw conn: %s", err) + } + msgsReceived++ + var d int + fmt.Sscan(string(b[:n]), &d) + if d != i { + log.Printf("got wrong number: expected %d, got %d", i, d) + } + } + }() + for i := 0; i < N; i++ { + _, err := peer.WriteTo([]byte(fmt.Sprintf("%d", i)), l.Addr().(*utp.Addr).Addr) + if err != nil { + t.Fatal(err) + } + time.Sleep(time.Microsecond) + } + select { + case <-readerStopped: + case <-time.After(time.Second): + t.Fatal("reader timed out") + } + if msgsReceived != N { + t.Fatalf("messages received: %d", msgsReceived) + } +} -- 2.48.1