From c776a35b68ed4d999fe2fcb4a737f8e387402441 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Thu, 6 Jul 2017 11:11:23 +0200 Subject: [PATCH 1/2] bind proxy to random port in proxy tests --- integrationtests/proxy/proxy_test.go | 33 +++++++++++++--------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/integrationtests/proxy/proxy_test.go b/integrationtests/proxy/proxy_test.go index e77a7947..0bdb4377 100644 --- a/integrationtests/proxy/proxy_test.go +++ b/integrationtests/proxy/proxy_test.go @@ -38,44 +38,42 @@ var _ = Describe("QUIC Proxy", func() { Context("Proxy setup and teardown", func() { It("sets up the UDPProxy", func() { - proxy, err := NewQuicProxy("localhost:13370", Opts{RemoteAddr: serverAddr}) + proxy, err := NewQuicProxy("localhost:0", Opts{RemoteAddr: serverAddr}) Expect(err).ToNot(HaveOccurred()) Expect(proxy.clientDict).To(HaveLen(0)) - // check that port 13370 is in use - addr, err := net.ResolveUDPAddr("udp", "localhost:13370") + // check that the proxy port is in use + addr, err := net.ResolveUDPAddr("udp", "localhost:"+strconv.Itoa(proxy.LocalPort())) Expect(err).ToNot(HaveOccurred()) _, err = net.ListenUDP("udp", addr) - Expect(err).To(MatchError("listen udp 127.0.0.1:13370: bind: address already in use")) + Expect(err).To(MatchError("listen udp 127.0.0.1:" + strconv.Itoa(proxy.LocalPort()) + ": bind: address already in use")) - err = proxy.Close() // stopping is tested in the next test - Expect(err).ToNot(HaveOccurred()) + Expect(proxy.Close()).To(Succeed()) // stopping is tested in the next test }) It("stops the UDPProxy", func() { - proxy, err := NewQuicProxy("localhost:13371", Opts{RemoteAddr: serverAddr}) + proxy, err := NewQuicProxy("localhost:0", Opts{RemoteAddr: serverAddr}) Expect(err).ToNot(HaveOccurred()) + port := proxy.LocalPort() err = proxy.Close() Expect(err).ToNot(HaveOccurred()) - // check that port 13371 is not in use anymore - addr, err := net.ResolveUDPAddr("udp", "localhost:13371") + // check that the proxy port is not in use anymore + addr, err := net.ResolveUDPAddr("udp", "localhost:"+strconv.Itoa(port)) Expect(err).ToNot(HaveOccurred()) ln, err := net.ListenUDP("udp", addr) Expect(err).ToNot(HaveOccurred()) - err = ln.Close() - Expect(err).ToNot(HaveOccurred()) + Expect(ln.Close()).To(Succeed()) }) It("has the correct LocalAddr and LocalPort", func() { - proxy, err := NewQuicProxy("localhost:13372", Opts{RemoteAddr: serverAddr}) + proxy, err := NewQuicProxy("localhost:0", Opts{RemoteAddr: serverAddr}) Expect(err).ToNot(HaveOccurred()) - Expect(proxy.LocalAddr().String()).To(Equal("127.0.0.1:13372")) - Expect(proxy.LocalPort()).To(Equal(13372)) + Expect(proxy.LocalAddr().String()).To(Equal("127.0.0.1:" + strconv.Itoa(proxy.LocalPort()))) + Expect(proxy.LocalPort()).ToNot(BeZero()) - err = proxy.Close() - Expect(err).ToNot(HaveOccurred()) + Expect(proxy.Close()).To(Succeed()) }) }) @@ -88,10 +86,9 @@ var _ = Describe("QUIC Proxy", func() { proxy *QuicProxy ) - // start the proxy on port 10001 startProxy := func(opts Opts) { var err error - proxy, err = NewQuicProxy("localhost:10001", opts) + proxy, err = NewQuicProxy("localhost:0", opts) Expect(err).ToNot(HaveOccurred()) clientConn, err = net.DialUDP("udp", nil, proxy.LocalAddr().(*net.UDPAddr)) Expect(err).ToNot(HaveOccurred()) From 32bc70ba0c7b8a22ab6a64efeba10af4e98f77db Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Thu, 6 Jul 2017 11:14:00 +0200 Subject: [PATCH 2/2] fix flaky proxy test --- integrationtests/proxy/proxy_test.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/integrationtests/proxy/proxy_test.go b/integrationtests/proxy/proxy_test.go index 0bdb4377..a4c1f53d 100644 --- a/integrationtests/proxy/proxy_test.go +++ b/integrationtests/proxy/proxy_test.go @@ -7,6 +7,8 @@ import ( "sync/atomic" "time" + "fmt" + "github.com/lucas-clemente/quic-go" "github.com/lucas-clemente/quic-go/protocol" . "github.com/onsi/ginkgo" @@ -46,8 +48,7 @@ var _ = Describe("QUIC Proxy", func() { addr, err := net.ResolveUDPAddr("udp", "localhost:"+strconv.Itoa(proxy.LocalPort())) Expect(err).ToNot(HaveOccurred()) _, err = net.ListenUDP("udp", addr) - Expect(err).To(MatchError("listen udp 127.0.0.1:" + strconv.Itoa(proxy.LocalPort()) + ": bind: address already in use")) - + Expect(err).To(MatchError(fmt.Sprintf("listen udp 127.0.0.1:%d: bind: address already in use", proxy.LocalPort()))) Expect(proxy.Close()).To(Succeed()) // stopping is tested in the next test }) @@ -61,9 +62,12 @@ var _ = Describe("QUIC Proxy", func() { // check that the proxy port is not in use anymore addr, err := net.ResolveUDPAddr("udp", "localhost:"+strconv.Itoa(port)) Expect(err).ToNot(HaveOccurred()) - ln, err := net.ListenUDP("udp", addr) - Expect(err).ToNot(HaveOccurred()) - Expect(ln.Close()).To(Succeed()) + // sometimes it takes a while for the OS to free the port + Eventually(func() error { + ln, err := net.ListenUDP("udp", addr) + defer ln.Close() + return err + }).ShouldNot(HaveOccurred()) }) It("has the correct LocalAddr and LocalPort", func() {