From c93e789b6b32c62db0807164b3eebd57715d6e64 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Fri, 29 May 2015 10:21:41 +0100 Subject: [PATCH] use an automatically assigned port for http tests instead of random port, which can clash Fixes #720. --- nameserver/http.go | 7 +++---- nameserver/http_test.go | 10 +++++++--- weavedns/main.go | 7 ++++++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/nameserver/http.go b/nameserver/http.go index 1f9a1e2b..64c0394a 100644 --- a/nameserver/http.go +++ b/nameserver/http.go @@ -17,7 +17,7 @@ func httpErrorAndLog(level *log.Logger, w http.ResponseWriter, msg string, level.Printf("[http] "+logmsg, logargs...) } -func ListenHTTP(version string, server *DNSServer, domain string, db Zone, port int) { +func ServeHTTP(listener net.Listener, version string, server *DNSServer, domain string, db Zone) { muxRouter := mux.NewRouter() @@ -90,8 +90,7 @@ func ListenHTTP(version string, server *DNSServer, domain string, db Zone, port http.Handle("/", muxRouter) - address := fmt.Sprintf(":%d", port) - if err := http.ListenAndServe(address, nil); err != nil { - Error.Fatal("[http] Unable to create http listener: ", err) + if err := http.Serve(listener, nil); err != nil { + Error.Fatal("[http] Unable to serve http: ", err) } } diff --git a/nameserver/http_test.go b/nameserver/http_test.go index b0175fe7..4a44eb9f 100644 --- a/nameserver/http_test.go +++ b/nameserver/http_test.go @@ -2,7 +2,6 @@ package nameserver import ( "fmt" - "math/rand" "net" "net/http" "net/url" @@ -35,9 +34,14 @@ func TestHttp(t *testing.T) { wt.AssertNoErr(t, err) defer zone.Stop() - port := rand.Intn(10000) + 32768 + httpListener, err := net.Listen("tcp", ":0") + if err != nil { + t.Fatal("Unable to create http listener: ", err) + } + + port := httpListener.Addr().(*net.TCPAddr).Port fmt.Println("Http test on port", port) - go ListenHTTP("", nil, testDomain, zone, port) + go ServeHTTP(httpListener, "", nil, testDomain, zone) time.Sleep(100 * time.Millisecond) // Allow for http server to get going diff --git a/weavedns/main.go b/weavedns/main.go index bf0a89e3..0fc48523 100644 --- a/weavedns/main.go +++ b/weavedns/main.go @@ -127,8 +127,13 @@ func main() { Error.Fatal("[main] Failed to initialize the WeaveDNS server", err) } + httpListener, err := net.Listen("tcp", fmt.Sprintf(":%d", httpPort)) + if err != nil { + Error.Fatal("[main] Unable to create http listener: ", err) + } + go SignalHandlerLoop(srv) - go weavedns.ListenHTTP(version, srv, domain, zone, httpPort) + go weavedns.ServeHTTP(httpListener, version, srv, domain, zone) err = srv.Start() if err != nil {