|
|
|
package cluster
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func Test_NewServiceOpenClose(t *testing.T) {
|
|
|
|
ml := mustNewMockTransport()
|
|
|
|
s := NewService(ml)
|
|
|
|
if s == nil {
|
|
|
|
t.Fatalf("failed to create cluster service")
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := s.Open(); err != nil {
|
|
|
|
t.Fatalf("failed to open cluster service")
|
|
|
|
}
|
|
|
|
if ml.Addr().String() != s.Addr() {
|
|
|
|
t.Fatalf("service returned incorrect address")
|
|
|
|
}
|
|
|
|
if err := s.Close(); err != nil {
|
|
|
|
t.Fatalf("failed to close cluster service")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func Test_NewServiceSetGetAPIAddr(t *testing.T) {
|
|
|
|
ml := mustNewMockTransport()
|
|
|
|
s := NewService(ml)
|
|
|
|
if s == nil {
|
|
|
|
t.Fatalf("failed to create cluster service")
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := s.Open(); err != nil {
|
|
|
|
t.Fatalf("failed to open cluster service")
|
|
|
|
}
|
|
|
|
|
|
|
|
s.SetAPIAddr("foo")
|
|
|
|
if exp, got := "foo", s.GetAPIAddr(); exp != got {
|
|
|
|
t.Fatalf("got incorrect API address, exp %s, got %s", exp, got)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := s.Close(); err != nil {
|
|
|
|
t.Fatalf("failed to close cluster service")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func Test_NewServiceSetGetNodeAPIAddr(t *testing.T) {
|
|
|
|
ml := mustNewMockTransport()
|
|
|
|
s := NewService(ml)
|
|
|
|
if s == nil {
|
|
|
|
t.Fatalf("failed to create cluster service")
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := s.Open(); err != nil {
|
|
|
|
t.Fatalf("failed to open cluster service")
|
|
|
|
}
|
|
|
|
|
|
|
|
s.SetAPIAddr("foo")
|
|
|
|
|
|
|
|
addr, err := s.GetNodeAPIAddr(s.Addr())
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("failed to get node API address: %s", err)
|
|
|
|
}
|
|
|
|
if addr != "http://foo" {
|
|
|
|
t.Fatalf("failed to get correct node API address, exp %s, got %s", "http://foo", addr)
|
|
|
|
}
|
|
|
|
|
|
|
|
s.EnableHTTPS(true)
|
|
|
|
addr, err = s.GetNodeAPIAddr(s.Addr())
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("failed to get node API address: %s", err)
|
|
|
|
}
|
|
|
|
if addr != "https://foo" {
|
|
|
|
t.Fatalf("failed to get correct node API address, exp %s, got %s", "https://foo", addr)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := s.Close(); err != nil {
|
|
|
|
t.Fatalf("failed to close cluster service")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type mockTransport struct {
|
|
|
|
tn net.Listener
|
|
|
|
}
|
|
|
|
|
|
|
|
func mustNewMockTransport() *mockTransport {
|
|
|
|
tn, err := net.Listen("tcp", "localhost:0")
|
|
|
|
if err != nil {
|
|
|
|
panic("failed to create mock listener")
|
|
|
|
}
|
|
|
|
return &mockTransport{
|
|
|
|
tn: tn,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ml *mockTransport) Accept() (c net.Conn, err error) {
|
|
|
|
return ml.tn.Accept()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ml *mockTransport) Addr() net.Addr {
|
|
|
|
return ml.tn.Addr()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ml *mockTransport) Close() (err error) {
|
|
|
|
return ml.tn.Close()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ml *mockTransport) Dial(addr string, t time.Duration) (net.Conn, error) {
|
|
|
|
return net.DialTimeout("tcp", addr, 5*time.Second)
|
|
|
|
}
|