ソースを参照

httptypes: use []string for Member URLs

Brian Waldon 11 年 前
コミット
7545152318

+ 2 - 46
etcdserver/etcdhttp/httptypes/member.go

@@ -16,55 +16,11 @@
 
 package httptypes
 
-import (
-	"encoding/json"
-	"net/url"
-)
-
 type Member struct {
 	ID         uint64
 	Name       string
-	PeerURLs   []url.URL
-	ClientURLs []url.URL
-}
-
-func (m *Member) UnmarshalJSON(data []byte) (err error) {
-	rm := struct {
-		ID         uint64
-		Name       string
-		PeerURLs   []string
-		ClientURLs []string
-	}{}
-
-	if err := json.Unmarshal(data, &rm); err != nil {
-		return err
-	}
-
-	parseURLs := func(strs []string) ([]url.URL, error) {
-		urls := make([]url.URL, len(strs))
-		for i, s := range strs {
-			u, err := url.Parse(s)
-			if err != nil {
-				return nil, err
-			}
-			urls[i] = *u
-		}
-
-		return urls, nil
-	}
-
-	if m.PeerURLs, err = parseURLs(rm.PeerURLs); err != nil {
-		return err
-	}
-
-	if m.ClientURLs, err = parseURLs(rm.ClientURLs); err != nil {
-		return err
-	}
-
-	m.ID = rm.ID
-	m.Name = rm.Name
-
-	return nil
+	PeerURLs   []string
+	ClientURLs []string
 }
 
 type MemberCollection struct {

+ 27 - 34
etcdserver/etcdhttp/httptypes/member_test.go

@@ -18,7 +18,6 @@ package httptypes
 
 import (
 	"encoding/json"
-	"net/url"
 	"reflect"
 	"testing"
 )
@@ -32,18 +31,18 @@ func TestMemberUnmarshal(t *testing.T) {
 		// no URLs, just check ID & Name
 		{
 			body:       []byte(`{"id": 1, "name": "dungarees"}`),
-			wantMember: Member{ID: 1, Name: "dungarees", PeerURLs: []url.URL{}, ClientURLs: []url.URL{}},
+			wantMember: Member{ID: 1, Name: "dungarees", PeerURLs: nil, ClientURLs: nil},
 		},
 
 		// both client and peer URLs
 		{
 			body: []byte(`{"peerURLs": ["http://127.0.0.1:4001"], "clientURLs": ["http://127.0.0.1:4001"]}`),
 			wantMember: Member{
-				PeerURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:4001"},
+				PeerURLs: []string{
+					"http://127.0.0.1:4001",
 				},
-				ClientURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:4001"},
+				ClientURLs: []string{
+					"http://127.0.0.1:4001",
 				},
 			},
 		},
@@ -52,11 +51,11 @@ func TestMemberUnmarshal(t *testing.T) {
 		{
 			body: []byte(`{"peerURLs": ["http://127.0.0.1:4001", "https://example.com"]}`),
 			wantMember: Member{
-				PeerURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:4001"},
-					{Scheme: "https", Host: "example.com"},
+				PeerURLs: []string{
+					"http://127.0.0.1:4001",
+					"https://example.com",
 				},
-				ClientURLs: []url.URL{},
+				ClientURLs: nil,
 			},
 		},
 
@@ -64,10 +63,10 @@ func TestMemberUnmarshal(t *testing.T) {
 		{
 			body: []byte(`{"clientURLs": ["http://127.0.0.1:4001", "https://example.com"]}`),
 			wantMember: Member{
-				PeerURLs: []url.URL{},
-				ClientURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:4001"},
-					{Scheme: "https", Host: "example.com"},
+				PeerURLs: nil,
+				ClientURLs: []string{
+					"http://127.0.0.1:4001",
+					"https://example.com",
 				},
 			},
 		},
@@ -77,12 +76,6 @@ func TestMemberUnmarshal(t *testing.T) {
 			body:      []byte(`{"peerU`),
 			wantError: true,
 		},
-
-		// valid JSON, invalid URL
-		{
-			body:      []byte(`{"peerURLs": [":"]}`),
-			wantError: true,
-		},
 	}
 
 	for i, tt := range tests {
@@ -107,33 +100,33 @@ func TestMemberCollectionUnmarshal(t *testing.T) {
 			{
 				ID:   176869799018424574,
 				Name: "node3",
-				PeerURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:7003"},
+				PeerURLs: []string{
+					"http://127.0.0.1:7003",
 				},
-				ClientURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:4003"},
+				ClientURLs: []string{
+					"http://127.0.0.1:4003",
 				},
 			},
 			{
 				ID:   297577273835923749,
 				Name: "node1",
-				PeerURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:2380"},
-					{Scheme: "http", Host: "127.0.0.1:7001"},
+				PeerURLs: []string{
+					"http://127.0.0.1:2380",
+					"http://127.0.0.1:7001",
 				},
-				ClientURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:2379"},
-					{Scheme: "http", Host: "127.0.0.1:4001"},
+				ClientURLs: []string{
+					"http://127.0.0.1:2379",
+					"http://127.0.0.1:4001",
 				},
 			},
 			{
 				ID:   10666918107976480891,
 				Name: "node2",
-				PeerURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:7002"},
+				PeerURLs: []string{
+					"http://127.0.0.1:7002",
 				},
-				ClientURLs: []url.URL{
-					{Scheme: "http", Host: "127.0.0.1:4002"},
+				ClientURLs: []string{
+					"http://127.0.0.1:4002",
 				},
 			},
 		},