From: Matt Joiner Date: Thu, 21 Aug 2014 11:12:50 +0000 (+1000) Subject: Add test for dht.NewServer and change StopServing to Close X-Git-Tag: v1.0.0~1629 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=4a7c94d04d203a6868e0b8fa9b677b569654ed9e;p=btrtrc.git Add test for dht.NewServer and change StopServing to Close --- diff --git a/cmd/dht-get-peers/main.go b/cmd/dht-get-peers/main.go index 779888b6..440e88f2 100644 --- a/cmd/dht-get-peers/main.go +++ b/cmd/dht-get-peers/main.go @@ -123,7 +123,7 @@ func setupSignals() { signal.Notify(ch, os.Interrupt) go func() { <-ch - s.StopServing() + s.Close() }() } diff --git a/cmd/dht-server/main.go b/cmd/dht-server/main.go index d7140ffc..44e9c984 100644 --- a/cmd/dht-server/main.go +++ b/cmd/dht-server/main.go @@ -108,7 +108,7 @@ func setupSignals() { signal.Notify(ch) go func() { <-ch - s.StopServing() + s.Close() }() } diff --git a/dht/dht.go b/dht/dht.go index c30ab942..b77324b0 100644 --- a/dht/dht.go +++ b/dht/dht.go @@ -45,6 +45,9 @@ func makeSocket(addr string) (socket *net.UDPConn, err error) { } func NewServer(c *ServerConfig) (s *Server, err error) { + if c == nil { + c = &ServerConfig{} + } s = &Server{} s.socket, err = makeSocket(c.Addr) if err != nil { @@ -55,7 +58,15 @@ func NewServer(c *ServerConfig) (s *Server, err error) { return } go func() { - panic(s.serve()) + err := s.serve() + select { + case <-s.closed: + return + default: + } + if err != nil { + panic(err) + } }() go func() { err := s.bootstrap() @@ -787,13 +798,13 @@ func (s *Server) Nodes() (nis []NodeInfo) { return } -func (s *Server) StopServing() { - s.socket.Close() +func (s *Server) Close() { s.mu.Lock() select { case <-s.closed: default: close(s.closed) + s.socket.Close() } s.mu.Unlock() } diff --git a/dht/dht_test.go b/dht/dht_test.go index 3db4b37d..18d2488c 100644 --- a/dht/dht_test.go +++ b/dht/dht_test.go @@ -109,3 +109,11 @@ func TestClosestNodes(t *testing.T) { // t.FailNow() // } // } + +func TestDHTDefaultConfig(t *testing.T) { + s, err := NewServer(nil) + if err != nil { + t.Fatal(err) + } + s.Close() +}