aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-04-13 20:13:55 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2016-04-13 20:13:55 +0100
commit5a8a1253991c4346474bc970679ade63fda0a40d (patch)
tree8cda7919540c7ae0e3ec5d0e8bce0dd7a4d13ae8
parentc3f8bb37354326038a78095b758a7f2bfe70347c (diff)
downloadcoredns-5a8a1253991c4346474bc970679ade63fda0a40d.tar.gz
coredns-5a8a1253991c4346474bc970679ade63fda0a40d.tar.zst
coredns-5a8a1253991c4346474bc970679ade63fda0a40d.zip
Failed startup was not flagged (#118)
The error propagation from srv.ListenAndServe did not work as intended, simplified it a bit and added a test for it.
-rw-r--r--server/server.go4
-rw-r--r--test/fail_start_test.go21
-rw-r--r--test/tests.go2
3 files changed, 23 insertions, 4 deletions
diff --git a/server/server.go b/server/server.go
index e752d4287..c562cb01e 100644
--- a/server/server.go
+++ b/server/server.go
@@ -163,8 +163,8 @@ func (s *Server) Serve(ln ListenerFile) error {
// ListenAndServe starts the server with a new listener. It blocks until the server stops.
func (s *Server) ListenAndServe() error {
err := s.setup()
+ defer close(s.startChan)
if err != nil {
- close(s.startChan)
return err
}
@@ -187,8 +187,6 @@ func (s *Server) ListenAndServe() error {
go func() {
s.server[0].ActivateAndServe()
}()
-
- close(s.startChan) // unblock anyone waiting for this to start listening
return s.server[1].ActivateAndServe()
}
diff --git a/test/fail_start_test.go b/test/fail_start_test.go
new file mode 100644
index 000000000..aa1b137af
--- /dev/null
+++ b/test/fail_start_test.go
@@ -0,0 +1,21 @@
+package test
+
+import (
+ "testing"
+
+ "github.com/miekg/coredns/core"
+)
+
+// Bind to low port should fail.
+func TestFailStartServer(t *testing.T) {
+ corefile := `.:53 {
+ chaos CoreDNS-001 miek@miek.nl
+}
+`
+ srv, _ := core.TestServer(t, corefile)
+ err := srv.ListenAndServe()
+ if err == nil {
+ srv.Stop()
+ t.Fatalf("Low port startup should fail")
+ }
+}
diff --git a/test/tests.go b/test/tests.go
index a97541f8e..d38bf955f 100644
--- a/test/tests.go
+++ b/test/tests.go
@@ -34,7 +34,7 @@ func Server(t *testing.T, corefile string) (*server.Server, string, string, erro
}
go srv.ListenAndServe()
- time.Sleep(1 * time.Second)
+ time.Sleep(1 * time.Second) // yeah... I regret nothing
tcp, udp := srv.LocalAddr()
return srv, tcp.String(), udp.String(), nil
}