1
0
Fork 0

More cluster package testing

master
Philip O Toole 9 years ago
parent d3ec6856c9
commit f50dc9a533

@ -5,6 +5,8 @@ import (
"fmt" "fmt"
"log" "log"
"net" "net"
"os"
"sync"
"time" "time"
) )
@ -51,27 +53,33 @@ type Service struct {
store Store store Store
addr net.Addr addr net.Addr
wg sync.WaitGroup
logger *log.Logger logger *log.Logger
} }
// NewService returns a new instance of the cluster service // NewService returns a new instance of the cluster service
func NewService(ln Listener, store Store) *Service { func NewService(ln Listener, store Store) *Service {
return &Service{ return &Service{
ln: ln, ln: ln,
store: store, store: store,
addr: ln.Addr(), addr: ln.Addr(),
logger: log.New(os.Stderr, "[cluster] ", log.LstdFlags),
} }
} }
// Open opens the Service. // Open opens the Service.
func (s *Service) Open() error { func (s *Service) Open() error {
s.wg.Add(1)
go s.serve() go s.serve()
s.logger.Println("service listening on", s.ln.Addr())
return nil return nil
} }
// Close closes the service. // Close closes the service.
func (s *Service) Close() error { func (s *Service) Close() error {
s.ln.Close() s.ln.Close()
s.wg.Wait()
return nil return nil
} }
@ -124,6 +132,8 @@ func (s *Service) SetPeers(raftAddr, apiAddr string) error {
} }
func (s *Service) serve() error { func (s *Service) serve() error {
defer s.wg.Done()
for { for {
conn, err := s.ln.Accept() conn, err := s.ln.Accept()
if err != nil { if err != nil {

@ -6,14 +6,20 @@ import (
"time" "time"
) )
func Test_NewService(t *testing.T) { func Test_NewServiceOpenClose(t *testing.T) {
ml := &mockListener{} ml := mustNewMockListener()
ms := &mockStore{} ms := &mockStore{}
s := NewService(ml, ms) s := NewService(ml, ms)
if s == nil { if s == nil {
t.Fatalf("failed to create cluster service") t.Fatalf("failed to create cluster service")
} }
return
if err := s.Open(); err != nil {
t.Fatalf("failed to open cluster service")
}
if err := s.Close(); err != nil {
t.Fatalf("failed to close cluster service")
}
} }
type mockListener struct { type mockListener struct {
@ -31,11 +37,11 @@ func mustNewMockListener() *mockListener {
} }
func (ml *mockListener) Accept() (c net.Conn, err error) { func (ml *mockListener) Accept() (c net.Conn, err error) {
return nil, nil return ml.ln.Accept()
} }
func (ml *mockListener) Addr() net.Addr { func (ml *mockListener) Addr() net.Addr {
return nil return ml.ln.Addr()
} }
func (ml *mockListener) Close() (err error) { func (ml *mockListener) Close() (err error) {

Loading…
Cancel
Save