Browse Source

client: use httptypes.MemberCreateRequest in member add

Brian Waldon 11 years ago
parent
commit
4e759b46ce
2 changed files with 37 additions and 3 deletions
  1. 9 3
      client/members.go
  2. 28 0
      client/members_test.go

+ 9 - 3
client/members.go

@@ -26,6 +26,7 @@ import (
 	"time"
 	"time"
 
 
 	"github.com/coreos/etcd/etcdserver/etcdhttp/httptypes"
 	"github.com/coreos/etcd/etcdserver/etcdhttp/httptypes"
+	"github.com/coreos/etcd/pkg/types"
 )
 )
 
 
 var (
 var (
@@ -82,7 +83,12 @@ func (m *httpMembersAPI) List() ([]httptypes.Member, error) {
 }
 }
 
 
 func (m *httpMembersAPI) Add(peerURL string) (*httptypes.Member, error) {
 func (m *httpMembersAPI) Add(peerURL string) (*httptypes.Member, error) {
-	req := &membersAPIActionAdd{peerURL: peerURL}
+	urls, err := types.NewURLs([]string{peerURL})
+	if err != nil {
+		return nil, err
+	}
+
+	req := &membersAPIActionAdd{peerURLs: urls}
 	code, body, err := m.client.doWithTimeout(req)
 	code, body, err := m.client.doWithTimeout(req)
 	if err != nil {
 	if err != nil {
 		return nil, err
 		return nil, err
@@ -128,11 +134,11 @@ func (d *membersAPIActionRemove) httpRequest(ep url.URL) *http.Request {
 }
 }
 
 
 type membersAPIActionAdd struct {
 type membersAPIActionAdd struct {
-	peerURL string
+	peerURLs types.URLs
 }
 }
 
 
 func (a *membersAPIActionAdd) httpRequest(ep url.URL) *http.Request {
 func (a *membersAPIActionAdd) httpRequest(ep url.URL) *http.Request {
-	m := httptypes.Member{PeerURLs: []string{a.peerURL}}
+	m := httptypes.MemberCreateRequest{PeerURLs: a.peerURLs}
 	b, _ := json.Marshal(&m)
 	b, _ := json.Marshal(&m)
 	req, _ := http.NewRequest("POST", ep.String(), bytes.NewReader(b))
 	req, _ := http.NewRequest("POST", ep.String(), bytes.NewReader(b))
 	req.Header.Set("Content-Type", "application/json")
 	req.Header.Set("Content-Type", "application/json")

+ 28 - 0
client/members_test.go

@@ -20,6 +20,8 @@ import (
 	"net/http"
 	"net/http"
 	"net/url"
 	"net/url"
 	"testing"
 	"testing"
+
+	"github.com/coreos/etcd/pkg/types"
 )
 )
 
 
 func TestMembersAPIListAction(t *testing.T) {
 func TestMembersAPIListAction(t *testing.T) {
@@ -37,3 +39,29 @@ func TestMembersAPIListAction(t *testing.T) {
 		t.Errorf(err.Error())
 		t.Errorf(err.Error())
 	}
 	}
 }
 }
+
+func TestMembersAPIActionAdd(t *testing.T) {
+	ep := url.URL{Scheme: "http", Host: "example.com/v2/admin/members"}
+	act := &membersAPIActionAdd{
+		peerURLs: types.URLs([]url.URL{
+			url.URL{Scheme: "https", Host: "127.0.0.1:8081"},
+			url.URL{Scheme: "http", Host: "127.0.0.1:8080"},
+		}),
+	}
+
+	wantURL := &url.URL{
+		Scheme: "http",
+		Host:   "example.com",
+		Path:   "/v2/admin/members",
+	}
+	wantHeader := http.Header{
+		"Content-Type": []string{"application/json"},
+	}
+	wantBody := []byte(`{"peerURLs":["https://127.0.0.1:8081","http://127.0.0.1:8080"]}`)
+
+	got := *act.httpRequest(ep)
+	err := assertResponse(got, wantURL, wantHeader, wantBody)
+	if err != nil {
+		t.Error(err.Error())
+	}
+}