From 41aa44cd8dfd31d6756c67655cfbba6be73e490f Mon Sep 17 00:00:00 2001 From: Peter Miron Date: Thu, 8 Jun 2017 10:19:56 -0400 Subject: [PATCH 1/5] Added ability to use random ports to limit unit test port contention. --- server/server.go | 23 +++++++++++++++++++++-- server/server_test.go | 23 +++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/server/server.go b/server/server.go index a7fc3f7d..5e5516b9 100644 --- a/server/server.go +++ b/server/server.go @@ -510,17 +510,26 @@ func (s *Server) startMonitoring(secure bool) error { hp string err error httpListener net.Listener + port int ) if secure { - hp = net.JoinHostPort(opts.HTTPHost, strconv.Itoa(opts.HTTPSPort)) + port = opts.HTTPSPort + if port == -1 { + port = 0 + } + hp = net.JoinHostPort(opts.HTTPHost, strconv.Itoa(port)) s.Noticef("Starting https monitor on %s", hp) config := util.CloneTLSConfig(opts.TLSConfig) config.ClientAuth = tls.NoClientCert httpListener, err = tls.Listen("tcp", hp, config) } else { - hp = net.JoinHostPort(opts.HTTPHost, strconv.Itoa(opts.HTTPPort)) + port = opts.HTTPPort + if port == -1 { + port = 0 + } + hp = net.JoinHostPort(opts.HTTPHost, strconv.Itoa(port)) s.Noticef("Starting http monitor on %s", hp) httpListener, err = net.Listen("tcp", hp) } @@ -870,6 +879,16 @@ func (s *Server) Addr() net.Addr { return s.listener.Addr() } +// HttpAddr will return the net.Addr object for the http monitoring listener. +func (s *Server) HttpAddr() net.Addr { + s.mu.Lock() + defer s.mu.Unlock() + if s.http == nil { + return nil + } + return s.http.Addr() +} + // ReadyForConnections returns `true` if the server is ready to accept client // and, if routing is enabled, route connections. If after the duration // `dur` the server is still not ready, returns `false`. diff --git a/server/server_test.go b/server/server_test.go index 4b2f1352..c54d26a0 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -279,6 +279,7 @@ func TestProcessCommandLineArgs(t *testing.T) { func TestWriteDeadline(t *testing.T) { opts := DefaultOptions opts.WriteDeadline = 20 * time.Millisecond + opts.NoLog = false s := RunServer(&opts) defer s.Shutdown() @@ -328,3 +329,25 @@ func TestWriteDeadline(t *testing.T) { } t.Fatal("Connection should have been closed") } + +func TestRandomPorts(t *testing.T) { + opts := DefaultOptions + opts.HTTPPort = -1 + opts.Port = -1 + s := RunServer(&opts) + + defer s.Shutdown() + + if s.Addr() == nil || s.Addr().(*net.TCPAddr).Port <= 0 { + t.Fatal("Should have dynamically assigned server port.") + } + + if s.Addr() == nil || s.Addr().(*net.TCPAddr).Port == 4222 { + t.Fatal("Should not have dynamically assigned default port: 4222.") + } + + if s.HttpAddr() == nil || s.HttpAddr().(*net.TCPAddr).Port <= 0 { + t.Fatal("Should have dynamically assigned monitoring port.") + } + +} \ No newline at end of file From 43a3f1ef1dea3b05894f79f87eb991d7e1177348 Mon Sep 17 00:00:00 2001 From: Peter Miron Date: Thu, 8 Jun 2017 10:46:55 -0400 Subject: [PATCH 2/5] cleaned up naming to MonitorAddr instead of HttpPort (as it could be either Http or Https). added test for nil to improve coverage. --- server/server.go | 4 ++-- server/server_test.go | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/server/server.go b/server/server.go index 5e5516b9..3da954a7 100644 --- a/server/server.go +++ b/server/server.go @@ -879,8 +879,8 @@ func (s *Server) Addr() net.Addr { return s.listener.Addr() } -// HttpAddr will return the net.Addr object for the http monitoring listener. -func (s *Server) HttpAddr() net.Addr { +// MonitorAddr will return the net.Addr object for the monitoring listener. +func (s *Server) MonitorAddr() net.Addr { s.mu.Lock() defer s.mu.Unlock() if s.http == nil { diff --git a/server/server_test.go b/server/server_test.go index c54d26a0..ac83f218 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -346,8 +346,21 @@ func TestRandomPorts(t *testing.T) { t.Fatal("Should not have dynamically assigned default port: 4222.") } - if s.HttpAddr() == nil || s.HttpAddr().(*net.TCPAddr).Port <= 0 { + if s.MonitorAddr() == nil || s.MonitorAddr().(*net.TCPAddr).Port <= 0 { t.Fatal("Should have dynamically assigned monitoring port.") } +} + +func TestNilMonitoringPort(t *testing.T) { + opts := DefaultOptions + opts.HTTPPort = 0 + opts.HTTPSPort = 0 + s := RunServer(&opts) + + defer s.Shutdown() + + if s.MonitorAddr() != nil { + t.Fatal("HttpAddr should be nil.") + } } \ No newline at end of file From 2fff19d39ddc5618d6c0070e33259ee8de696094 Mon Sep 17 00:00:00 2001 From: Peter Miron Date: Thu, 8 Jun 2017 11:34:33 -0400 Subject: [PATCH 3/5] updated .travis.yml to fail if not go fmt'd --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 076a0633..48157477 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ install: before_script: - EXCLUDE_VENDOR=$(go list ./... | grep -v "/vendor/") - go build -- go fmt ./... +- $(exit $(go fmt ./... | wc -l)) - go vet $EXCLUDE_VENDOR - gosimple $EXCLUDE_VENDOR - misspell -error -locale US . From f2a9cc8cb0adf2b4769085e41d77fe1b4d307098 Mon Sep 17 00:00:00 2001 From: Peter Miron Date: Thu, 8 Jun 2017 11:37:23 -0400 Subject: [PATCH 4/5] fixed go fmt'ing --- server/server.go | 2 +- server/server_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/server.go b/server/server.go index 3da954a7..a57cf599 100644 --- a/server/server.go +++ b/server/server.go @@ -510,7 +510,7 @@ func (s *Server) startMonitoring(secure bool) error { hp string err error httpListener net.Listener - port int + port int ) if secure { diff --git a/server/server_test.go b/server/server_test.go index ac83f218..d88c676e 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -363,4 +363,4 @@ func TestNilMonitoringPort(t *testing.T) { if s.MonitorAddr() != nil { t.Fatal("HttpAddr should be nil.") } -} \ No newline at end of file +} From 70778e9ec54aa341880beb61ee64a0af409d6036 Mon Sep 17 00:00:00 2001 From: Peter Miron Date: Thu, 8 Jun 2017 11:41:20 -0400 Subject: [PATCH 5/5] updated to exclude fmt'ing on /vendor/ --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 48157477..65b342d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,7 @@ install: before_script: - EXCLUDE_VENDOR=$(go list ./... | grep -v "/vendor/") - go build -- $(exit $(go fmt ./... | wc -l)) +- $(exit $(go fmt $EXCLUDE_VENDOR | wc -l)) - go vet $EXCLUDE_VENDOR - gosimple $EXCLUDE_VENDOR - misspell -error -locale US .