From d9166dfa6e46321e654f13fac59e8d10362ad169 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Mon, 6 Oct 2014 16:05:54 -0400 Subject: [PATCH] 3828: Wait for listener to start before connecting to it. Fix test panic in listener.Close() when listener does not exist. --- services/keepproxy/keepproxy.go | 1 + services/keepproxy/keepproxy_test.go | 31 ++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/services/keepproxy/keepproxy.go b/services/keepproxy/keepproxy.go index cd0a872b9b..de4ccafc28 100644 --- a/services/keepproxy/keepproxy.go +++ b/services/keepproxy/keepproxy.go @@ -104,6 +104,7 @@ func main() { s := <-sig log.Println("caught signal:", s) listener.Close() + listener = nil }(term) signal.Notify(term, syscall.SIGTERM) signal.Notify(term, syscall.SIGINT) diff --git a/services/keepproxy/keepproxy_test.go b/services/keepproxy/keepproxy_test.go index 5944b2c21d..f6d163c1f1 100644 --- a/services/keepproxy/keepproxy_test.go +++ b/services/keepproxy/keepproxy_test.go @@ -34,6 +34,25 @@ func pythonDir() string { return fmt.Sprintf("%s/../../sdk/python/tests", cwd) } +// Wait (up to 1 second) for keepproxy to listen on a port. This +// avoids a race condition where we hit a "connection refused" error +// because we start testing the proxy too soon. +func waitForListener() { + const (ms = 5) + for i := 0; listener == nil && i < 1000; i += ms { + time.Sleep(ms * time.Millisecond) + } + if listener == nil { + log.Fatalf("Timed out waiting for listener to start") + } +} + +func closeListener() { + if listener != nil { + listener.Close() + } +} + func (s *ServerRequiredSuite) SetUpSuite(c *C) { cwd, _ := os.Getwd() defer os.Chdir(cwd) @@ -155,7 +174,8 @@ func (s *ServerRequiredSuite) TestPutAskGet(c *C) { os.Setenv("ARVADOS_EXTERNAL_CLIENT", "") log.Print("keepclient created") - defer listener.Close() + waitForListener() + defer closeListener() hash := fmt.Sprintf("%x", md5.Sum([]byte("foo"))) var hash2 string @@ -199,7 +219,8 @@ func (s *ServerRequiredSuite) TestPutAskGetForbidden(c *C) { log.Print("TestPutAndGet start") kc := runProxy(c, []string{"keepproxy"}, "123abc", 29951) - defer listener.Close() + waitForListener() + defer closeListener() log.Print("keepclient created") @@ -240,7 +261,8 @@ func (s *ServerRequiredSuite) TestGetDisabled(c *C) { log.Print("TestGetDisabled start") kc := runProxy(c, []string{"keepproxy", "-no-get"}, "4axaw8zxe0qm22wa6urpp5nskcne8z88cvbupv653y1njyi05h", 29952) - defer listener.Close() + waitForListener() + defer closeListener() hash := fmt.Sprintf("%x", md5.Sum([]byte("baz"))) @@ -279,7 +301,8 @@ func (s *ServerRequiredSuite) TestPutDisabled(c *C) { log.Print("TestPutDisabled start") kc := runProxy(c, []string{"keepproxy", "-no-put"}, "4axaw8zxe0qm22wa6urpp5nskcne8z88cvbupv653y1njyi05h", 29953) - defer listener.Close() + waitForListener() + defer closeListener() { hash2, rep, err := kc.PutB([]byte("quux")) -- 2.30.2