1
0
Fork 0

Listener is actually a Transport

master
Philip O Toole 9 years ago
parent 57880acc58
commit aef17f6a52

@ -29,8 +29,8 @@ type response struct {
Message string `json:"message,omitempty"`
}
// Listener is the interface the network service must provide.
type Listener interface {
// Transport is the interface the network service must provide.
type Transport interface {
net.Listener
// Dial is used to create a new outgoing connection
@ -49,7 +49,7 @@ type Store interface {
// Service allows access to the cluster and associated meta data,
// via consensus.
type Service struct {
ln Listener
tn Transport
store Store
addr net.Addr
@ -59,11 +59,11 @@ type Service struct {
}
// NewService returns a new instance of the cluster service
func NewService(ln Listener, store Store) *Service {
func NewService(tn Transport, store Store) *Service {
return &Service{
ln: ln,
tn: tn,
store: store,
addr: ln.Addr(),
addr: tn.Addr(),
logger: log.New(os.Stderr, "[cluster] ", log.LstdFlags),
}
}
@ -72,13 +72,13 @@ func NewService(ln Listener, store Store) *Service {
func (s *Service) Open() error {
s.wg.Add(1)
go s.serve()
s.logger.Println("service listening on", s.ln.Addr())
s.logger.Println("service listening on", s.tn.Addr())
return nil
}
// Close closes the service.
func (s *Service) Close() error {
s.ln.Close()
s.tn.Close()
s.wg.Wait()
return nil
}
@ -105,7 +105,7 @@ func (s *Service) SetPeer(raftAddr, apiAddr string) error {
if leader := s.store.Leader(); leader == "" {
return fmt.Errorf("no leader available")
}
conn, err := s.ln.Dial(s.store.Leader(), ConnectionTimeout)
conn, err := s.tn.Dial(s.store.Leader(), ConnectionTimeout)
if err != nil {
return err
}
@ -138,7 +138,7 @@ func (s *Service) serve() error {
defer s.wg.Done()
for {
conn, err := s.ln.Accept()
conn, err := s.tn.Accept()
if err != nil {
return err
}

@ -9,7 +9,7 @@ import (
)
func Test_NewServiceOpenClose(t *testing.T) {
ml := mustNewMockListener()
ml := mustNewMockTransport()
ms := &mockStore{}
s := NewService(ml, ms)
if s == nil {
@ -86,15 +86,15 @@ func Test_SetAPIPeerFailUpdate(t *testing.T) {
}
// Start a network server.
ln, err := net.Listen("tcp", "localhost:0")
tn, err := net.Listen("tcp", "localhost:0")
if err != nil {
t.Fatalf("failed to open test server: %s", err.Error())
}
ms.leader = ln.Addr().String()
ms.leader = tn.Addr().String()
c := make(chan map[string]string, 1)
go func() {
conn, err := ln.Accept()
conn, err := tn.Accept()
if err != nil {
t.Fatalf("failed to accept connection from cluster: %s", err.Error())
}
@ -126,8 +126,8 @@ func Test_SetAPIPeerFailUpdate(t *testing.T) {
}
}
func mustNewOpenService() (*Service, *mockListener, *mockStore) {
ml := mustNewMockListener()
func mustNewOpenService() (*Service, *mockTransport, *mockStore) {
ml := mustNewMockTransport()
ms := newMockStore()
s := NewService(ml, ms)
if err := s.Open(); err != nil {
@ -136,33 +136,33 @@ func mustNewOpenService() (*Service, *mockListener, *mockStore) {
return s, ml, ms
}
type mockListener struct {
ln net.Listener
type mockTransport struct {
tn net.Listener
}
func mustNewMockListener() *mockListener {
ln, err := net.Listen("tcp", "localhost:0")
func mustNewMockTransport() *mockTransport {
tn, err := net.Listen("tcp", "localhost:0")
if err != nil {
panic("failed to create mock listener")
}
return &mockListener{
ln: ln,
return &mockTransport{
tn: tn,
}
}
func (ml *mockListener) Accept() (c net.Conn, err error) {
return ml.ln.Accept()
func (ml *mockTransport) Accept() (c net.Conn, err error) {
return ml.tn.Accept()
}
func (ml *mockListener) Addr() net.Addr {
return ml.ln.Addr()
func (ml *mockTransport) Addr() net.Addr {
return ml.tn.Addr()
}
func (ml *mockListener) Close() (err error) {
return ml.ln.Close()
func (ml *mockTransport) Close() (err error) {
return ml.tn.Close()
}
func (ml *mockListener) Dial(addr string, t time.Duration) (net.Conn, error) {
func (ml *mockTransport) Dial(addr string, t time.Duration) (net.Conn, error) {
return net.DialTimeout("tcp", addr, 5*time.Second)
}
Loading…
Cancel
Save