|
@@ -589,7 +589,7 @@ func TestV2MachinesEndpoint(t *testing.T) {
|
|
|
{"POST", http.StatusMethodNotAllowed},
|
|
{"POST", http.StatusMethodNotAllowed},
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- m := NewClientHandler(nil, Peers{}, time.Hour)
|
|
|
|
|
|
|
+ m := NewClientHandler(nil, &fakeCluster{}, time.Hour)
|
|
|
s := httptest.NewServer(m)
|
|
s := httptest.NewServer(m)
|
|
|
defer s.Close()
|
|
defer s.Close()
|
|
|
|
|
|
|
@@ -610,15 +610,20 @@ func TestV2MachinesEndpoint(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func TestServeMachines(t *testing.T) {
|
|
func TestServeMachines(t *testing.T) {
|
|
|
- peers := Peers{}
|
|
|
|
|
- peers.Set("0xBEEF0=localhost:8080&0xBEEF1=localhost:8081&0xBEEF2=localhost:8082")
|
|
|
|
|
|
|
+ cluster := &fakeCluster{
|
|
|
|
|
+ members: []etcdserver.Member{
|
|
|
|
|
+ {ID: 0xBEEF0, PeerURLs: []string{"localhost:8080"}},
|
|
|
|
|
+ {ID: 0xBEEF1, PeerURLs: []string{"localhost:8081"}},
|
|
|
|
|
+ {ID: 0xBEEF2, PeerURLs: []string{"localhost:8082"}},
|
|
|
|
|
+ },
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
writer := httptest.NewRecorder()
|
|
writer := httptest.NewRecorder()
|
|
|
req, err := http.NewRequest("GET", "", nil)
|
|
req, err := http.NewRequest("GET", "", nil)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
t.Fatal(err)
|
|
t.Fatal(err)
|
|
|
}
|
|
}
|
|
|
- h := &serverHandler{peers: peers}
|
|
|
|
|
|
|
+ h := &serverHandler{clusterStore: cluster}
|
|
|
h.serveMachines(writer, req)
|
|
h.serveMachines(writer, req)
|
|
|
w := "http://localhost:8080, http://localhost:8081, http://localhost:8082"
|
|
w := "http://localhost:8080, http://localhost:8081, http://localhost:8082"
|
|
|
if g := writer.Body.String(); g != w {
|
|
if g := writer.Body.String(); g != w {
|
|
@@ -629,56 +634,64 @@ func TestServeMachines(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func TestPeersEndpoints(t *testing.T) {
|
|
|
|
|
|
|
+func TestClusterGetEndpoints(t *testing.T) {
|
|
|
tests := []struct {
|
|
tests := []struct {
|
|
|
- peers Peers
|
|
|
|
|
- endpoints []string
|
|
|
|
|
|
|
+ clusterStore etcdserver.ClusterStore
|
|
|
|
|
+ endpoints []string
|
|
|
}{
|
|
}{
|
|
|
// single peer with a single address
|
|
// single peer with a single address
|
|
|
{
|
|
{
|
|
|
- peers: Peers(map[int64][]string{
|
|
|
|
|
- 1: []string{"192.0.2.1"},
|
|
|
|
|
- }),
|
|
|
|
|
|
|
+ clusterStore: &fakeCluster{
|
|
|
|
|
+ members: []etcdserver.Member{
|
|
|
|
|
+ {ID: 1, PeerURLs: []string{"192.0.2.1"}},
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
endpoints: []string{"http://192.0.2.1"},
|
|
endpoints: []string{"http://192.0.2.1"},
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
// single peer with a single address with a port
|
|
// single peer with a single address with a port
|
|
|
{
|
|
{
|
|
|
- peers: Peers(map[int64][]string{
|
|
|
|
|
- 1: []string{"192.0.2.1:8001"},
|
|
|
|
|
- }),
|
|
|
|
|
|
|
+ clusterStore: &fakeCluster{
|
|
|
|
|
+ members: []etcdserver.Member{
|
|
|
|
|
+ {ID: 1, PeerURLs: []string{"192.0.2.1:8001"}},
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
endpoints: []string{"http://192.0.2.1:8001"},
|
|
endpoints: []string{"http://192.0.2.1:8001"},
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- // several peers explicitly unsorted
|
|
|
|
|
|
|
+ // several members explicitly unsorted
|
|
|
{
|
|
{
|
|
|
- peers: Peers(map[int64][]string{
|
|
|
|
|
- 2: []string{"192.0.2.3", "192.0.2.4"},
|
|
|
|
|
- 3: []string{"192.0.2.5", "192.0.2.6"},
|
|
|
|
|
- 1: []string{"192.0.2.1", "192.0.2.2"},
|
|
|
|
|
- }),
|
|
|
|
|
|
|
+ clusterStore: &fakeCluster{
|
|
|
|
|
+ members: []etcdserver.Member{
|
|
|
|
|
+ {ID: 2, PeerURLs: []string{"192.0.2.3", "192.0.2.4"}},
|
|
|
|
|
+ {ID: 3, PeerURLs: []string{"192.0.2.5", "192.0.2.6"}},
|
|
|
|
|
+ {ID: 1, PeerURLs: []string{"192.0.2.1", "192.0.2.2"}},
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
endpoints: []string{"http://192.0.2.1", "http://192.0.2.2", "http://192.0.2.3", "http://192.0.2.4", "http://192.0.2.5", "http://192.0.2.6"},
|
|
endpoints: []string{"http://192.0.2.1", "http://192.0.2.2", "http://192.0.2.3", "http://192.0.2.4", "http://192.0.2.5", "http://192.0.2.6"},
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
- // no peers
|
|
|
|
|
|
|
+ // no members
|
|
|
{
|
|
{
|
|
|
- peers: Peers(map[int64][]string{}),
|
|
|
|
|
- endpoints: []string{},
|
|
|
|
|
|
|
+ clusterStore: &fakeCluster{members: []etcdserver.Member{}},
|
|
|
|
|
+ endpoints: []string{},
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
// peer with no endpoints
|
|
// peer with no endpoints
|
|
|
{
|
|
{
|
|
|
- peers: Peers(map[int64][]string{
|
|
|
|
|
- 3: []string{},
|
|
|
|
|
- }),
|
|
|
|
|
|
|
+ clusterStore: &fakeCluster{
|
|
|
|
|
+ members: []etcdserver.Member{
|
|
|
|
|
+ {ID: 3, PeerURLs: []string{}},
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
endpoints: []string{},
|
|
endpoints: []string{},
|
|
|
},
|
|
},
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for i, tt := range tests {
|
|
for i, tt := range tests {
|
|
|
- endpoints := tt.peers.Endpoints()
|
|
|
|
|
|
|
+ endpoints := tt.clusterStore.Get().Endpoints()
|
|
|
if !reflect.DeepEqual(tt.endpoints, endpoints) {
|
|
if !reflect.DeepEqual(tt.endpoints, endpoints) {
|
|
|
- t.Errorf("#%d: peers.Endpoints() incorrect: want=%#v got=%#v", i, tt.endpoints, endpoints)
|
|
|
|
|
|
|
+ t.Errorf("#%d: members.Endpoints() incorrect: want=%#v got=%#v", i, tt.endpoints, endpoints)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -868,7 +881,6 @@ func TestServeRaft(t *testing.T) {
|
|
|
h := &serverHandler{
|
|
h := &serverHandler{
|
|
|
timeout: time.Hour,
|
|
timeout: time.Hour,
|
|
|
server: &errServer{tt.serverErr},
|
|
server: &errServer{tt.serverErr},
|
|
|
- peers: nil,
|
|
|
|
|
}
|
|
}
|
|
|
rw := httptest.NewRecorder()
|
|
rw := httptest.NewRecorder()
|
|
|
h.serveRaft(rw, req)
|
|
h.serveRaft(rw, req)
|
|
@@ -957,7 +969,6 @@ func TestBadServeKeys(t *testing.T) {
|
|
|
h := &serverHandler{
|
|
h := &serverHandler{
|
|
|
timeout: 0, // context times out immediately
|
|
timeout: 0, // context times out immediately
|
|
|
server: tt.server,
|
|
server: tt.server,
|
|
|
- peers: nil,
|
|
|
|
|
}
|
|
}
|
|
|
rw := httptest.NewRecorder()
|
|
rw := httptest.NewRecorder()
|
|
|
h.serveKeys(rw, tt.req)
|
|
h.serveKeys(rw, tt.req)
|
|
@@ -980,7 +991,6 @@ func TestServeKeysEvent(t *testing.T) {
|
|
|
h := &serverHandler{
|
|
h := &serverHandler{
|
|
|
timeout: time.Hour,
|
|
timeout: time.Hour,
|
|
|
server: server,
|
|
server: server,
|
|
|
- peers: nil,
|
|
|
|
|
timer: &dummyRaftTimer{},
|
|
timer: &dummyRaftTimer{},
|
|
|
}
|
|
}
|
|
|
rw := httptest.NewRecorder()
|
|
rw := httptest.NewRecorder()
|
|
@@ -1019,7 +1029,6 @@ func TestServeKeysWatch(t *testing.T) {
|
|
|
h := &serverHandler{
|
|
h := &serverHandler{
|
|
|
timeout: time.Hour,
|
|
timeout: time.Hour,
|
|
|
server: server,
|
|
server: server,
|
|
|
- peers: nil,
|
|
|
|
|
timer: &dummyRaftTimer{},
|
|
timer: &dummyRaftTimer{},
|
|
|
}
|
|
}
|
|
|
go func() {
|
|
go func() {
|
|
@@ -1295,3 +1304,15 @@ func TestHandleWatchStreaming(t *testing.T) {
|
|
|
t.Fatalf("timed out waiting for done")
|
|
t.Fatalf("timed out waiting for done")
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+type fakeCluster struct {
|
|
|
|
|
+ members []etcdserver.Member
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (c *fakeCluster) Get() etcdserver.Cluster {
|
|
|
|
|
+ cl := &etcdserver.Cluster{}
|
|
|
|
|
+ cl.AddSlice(c.members)
|
|
|
|
|
+ return *cl
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (c *fakeCluster) Delete(id int64) { return }
|