Jelajahi Sumber

bump(github.com/coreos/go-etcd): 9de519a68a870466f217c35f476ba658f1694bbe

Ben Johnson 12 tahun lalu
induk
melakukan
f37d9df118

+ 27 - 7
third_party/github.com/coreos/go-etcd/etcd/client.go

@@ -2,6 +2,7 @@ package etcd
 
 import (
 	"crypto/tls"
+	"crypto/x509"
 	"encoding/json"
 	"errors"
 	"io"
@@ -41,6 +42,7 @@ type Cluster struct {
 type Config struct {
 	CertFile    string        `json:"certFile"`
 	KeyFile     string        `json:"keyFile"`
+	CaCertFile  string        `json:"caCertFile"`
 	Scheme      string        `json:"scheme"`
 	Timeout     time.Duration `json:"timeout"`
 	Consistency string        `json: "consistency"`
@@ -131,7 +133,7 @@ func NewClientReader(reader io.Reader) (*Client, error) {
 
 func setupHttpClient(client *Client) error {
 	if client.config.CertFile != "" && client.config.KeyFile != "" {
-		err := client.SetCertAndKey(client.config.CertFile, client.config.KeyFile)
+		err := client.SetCertAndKey(client.config.CertFile, client.config.KeyFile, client.config.CaCertFile)
 		if err != nil {
 			return err
 		}
@@ -229,7 +231,7 @@ func (c *Client) saveConfig() error {
 	return nil
 }
 
-func (c *Client) SetCertAndKey(cert string, key string) error {
+func (c *Client) SetCertAndKey(cert string, key string, caCert string) error {
 	if cert != "" && key != "" {
 		tlsCert, err := tls.LoadX509KeyPair(cert, key)
 
@@ -237,12 +239,30 @@ func (c *Client) SetCertAndKey(cert string, key string) error {
 			return err
 		}
 
+		tlsConfig := &tls.Config{
+			Certificates: []tls.Certificate{tlsCert},
+		}
+
+		if caCert != "" {
+			caCertPool := x509.NewCertPool()
+
+			certBytes, err := ioutil.ReadFile(caCert)
+			if err != nil {
+				return err
+			}
+
+			if !caCertPool.AppendCertsFromPEM(certBytes) {
+				return errors.New("Unable to load caCert")
+			}
+
+			tlsConfig.RootCAs = caCertPool
+		} else {
+			tlsConfig.InsecureSkipVerify = true
+		}
+
 		tr := &http.Transport{
-			TLSClientConfig: &tls.Config{
-				Certificates:       []tls.Certificate{tlsCert},
-				InsecureSkipVerify: true,
-			},
-			Dial: dialTimeout,
+			TLSClientConfig: tlsConfig,
+			Dial:            dialTimeout,
 		}
 
 		c.httpClient = &http.Client{Transport: tr}

+ 10 - 2
third_party/github.com/coreos/go-etcd/etcd/compare_and_swap_test.go

@@ -21,6 +21,10 @@ func TestCompareAndSwap(t *testing.T) {
 		t.Fatalf("CompareAndSwap 1 failed: %#v", resp)
 	}
 
+	if !(resp.PrevNode.Value == "bar" && resp.PrevNode.Key == "/foo" && resp.PrevNode.TTL == 5) {
+		t.Fatalf("CompareAndSwap 1 prevNode failed: %#v", resp)
+	}
+
 	// This should fail because it gives an incorrect prevValue
 	resp, err = c.CompareAndSwap("foo", "bar3", 5, "xxx", 0)
 	if err == nil {
@@ -38,12 +42,16 @@ func TestCompareAndSwap(t *testing.T) {
 		t.Fatal(err)
 	}
 	if !(resp.Node.Value == "bar2" && resp.Node.Key == "/foo" && resp.Node.TTL == 5) {
-		t.Fatalf("CompareAndSwap 1 failed: %#v", resp)
+		t.Fatalf("CompareAndSwap 3 failed: %#v", resp)
+	}
+
+	if !(resp.PrevNode.Value == "bar" && resp.PrevNode.Key == "/foo" && resp.PrevNode.TTL == 5) {
+		t.Fatalf("CompareAndSwap 3 prevNode failed: %#v", resp)
 	}
 
 	// This should fail because it gives an incorrect prevIndex
 	resp, err = c.CompareAndSwap("foo", "bar3", 5, "", 29817514)
 	if err == nil {
-		t.Fatalf("CompareAndSwap 2 should have failed.  The response is: %#v", resp)
+		t.Fatalf("CompareAndSwap 4 should have failed.  The response is: %#v", resp)
 	}
 }

+ 13 - 1
third_party/github.com/coreos/go-etcd/etcd/delete_test.go

@@ -20,6 +20,10 @@ func TestDelete(t *testing.T) {
 		t.Fatalf("Delete failed with %s", resp.Node.Value)
 	}
 
+	if !(resp.PrevNode.Value == "bar") {
+		t.Fatalf("Delete PrevNode failed with %s", resp.Node.Value)
+	}
+
 	resp, err = c.Delete("foo", false)
 	if err == nil {
 		t.Fatalf("Delete should have failed because the key foo did not exist.  "+
@@ -34,7 +38,7 @@ func TestDeleteAll(t *testing.T) {
 		c.Delete("fooDir", true)
 	}()
 
-	c.Set("foo", "bar", 5)
+	c.SetDir("foo", 5)
 	// test delete an empty dir
 	resp, err := c.DeleteDir("foo")
 	if err != nil {
@@ -45,6 +49,10 @@ func TestDeleteAll(t *testing.T) {
 		t.Fatalf("DeleteAll 1 failed: %#v", resp)
 	}
 
+	if !(resp.PrevNode.Dir == true && resp.PrevNode.Value == "") {
+		t.Fatalf("DeleteAll 1 PrevNode failed: %#v", resp)
+	}
+
 	c.CreateDir("fooDir", 5)
 	c.Set("fooDir/foo", "bar", 5)
 	_, err = c.DeleteDir("fooDir")
@@ -61,6 +69,10 @@ func TestDeleteAll(t *testing.T) {
 		t.Fatalf("DeleteAll 2 failed: %#v", resp)
 	}
 
+	if !(resp.PrevNode.Dir == true && resp.PrevNode.Value == "") {
+		t.Fatalf("DeleteAll 2 PrevNode failed: %#v", resp)
+	}
+
 	resp, err = c.Delete("foo", true)
 	if err == nil {
 		t.Fatalf("DeleteAll should have failed because the key foo did not exist.  "+

+ 1 - 0
third_party/github.com/coreos/go-etcd/etcd/response.go

@@ -55,6 +55,7 @@ func (rr *RawResponse) toResponse() (*Response, error) {
 type Response struct {
 	Action    string `json:"action"`
 	Node      *Node  `json:"node"`
+	PrevNode  *Node  `json:"prevNode,omitempty"`
 	EtcdIndex uint64 `json:"etcdIndex"`
 	RaftIndex uint64 `json:"raftIndex"`
 	RaftTerm  uint64 `json:"raftTerm"`

+ 24 - 0
third_party/github.com/coreos/go-etcd/etcd/set_update_create_test.go

@@ -17,6 +17,9 @@ func TestSet(t *testing.T) {
 	if resp.Node.Key != "/foo" || resp.Node.Value != "bar" || resp.Node.TTL != 5 {
 		t.Fatalf("Set 1 failed: %#v", resp)
 	}
+	if resp.PrevNode != nil {
+		t.Fatalf("Set 1 PrevNode failed: %#v", resp)
+	}
 
 	resp, err = c.Set("foo", "bar2", 5)
 	if err != nil {
@@ -25,6 +28,9 @@ func TestSet(t *testing.T) {
 	if !(resp.Node.Key == "/foo" && resp.Node.Value == "bar2" && resp.Node.TTL == 5) {
 		t.Fatalf("Set 2 failed: %#v", resp)
 	}
+	if resp.PrevNode.Key != "/foo" || resp.PrevNode.Value != "bar" || resp.Node.TTL != 5 {
+		t.Fatalf("Set 2 PrevNode failed: %#v", resp)
+	}
 }
 
 func TestUpdate(t *testing.T) {
@@ -49,6 +55,9 @@ func TestUpdate(t *testing.T) {
 	if !(resp.Action == "update" && resp.Node.Key == "/foo" && resp.Node.TTL == 5) {
 		t.Fatalf("Update 1 failed: %#v", resp)
 	}
+	if !(resp.PrevNode.Key == "/foo" && resp.PrevNode.Value == "bar" && resp.Node.TTL == 5) {
+		t.Fatalf("Update 1 prevValue failed: %#v", resp)
+	}
 
 	// This should fail because the key does not exist.
 	resp, err = c.Update("nonexistent", "whatever", 5)
@@ -77,6 +86,9 @@ func TestCreate(t *testing.T) {
 		resp.Node.Value == newValue && resp.Node.TTL == 5) {
 		t.Fatalf("Create 1 failed: %#v", resp)
 	}
+	if resp.PrevNode != nil {
+		t.Fatalf("Create 1 PrevNode failed: %#v", resp)
+	}
 
 	// This should fail, because the key is already there
 	resp, err = c.Create(newKey, newValue, 5)
@@ -100,6 +112,9 @@ func TestSetDir(t *testing.T) {
 	if !(resp.Node.Key == "/fooDir" && resp.Node.Value == "" && resp.Node.TTL == 5) {
 		t.Fatalf("SetDir 1 failed: %#v", resp)
 	}
+	if resp.PrevNode != nil {
+		t.Fatalf("SetDir 1 PrevNode failed: %#v", resp)
+	}
 
 	// This should fail because /fooDir already points to a directory
 	resp, err = c.CreateDir("/fooDir", 5)
@@ -122,6 +137,9 @@ func TestSetDir(t *testing.T) {
 	if !(resp.Node.Key == "/foo" && resp.Node.Value == "" && resp.Node.TTL == 5) {
 		t.Fatalf("SetDir 2 failed: %#v", resp)
 	}
+	if !(resp.PrevNode.Key == "/foo" && resp.PrevNode.Value == "bar" && resp.PrevNode.TTL == 5) {
+		t.Fatalf("SetDir 2 failed: %#v", resp)
+	}
 }
 
 func TestUpdateDir(t *testing.T) {
@@ -145,6 +163,9 @@ func TestUpdateDir(t *testing.T) {
 		resp.Node.Value == "" && resp.Node.TTL == 5) {
 		t.Fatalf("UpdateDir 1 failed: %#v", resp)
 	}
+	if !(resp.PrevNode.Key == "/fooDir" && resp.PrevNode.Dir == true && resp.PrevNode.TTL == 5) {
+		t.Fatalf("UpdateDir 1 PrevNode failed: %#v", resp)
+	}
 
 	// This should fail because the key does not exist.
 	resp, err = c.UpdateDir("nonexistentDir", 5)
@@ -170,6 +191,9 @@ func TestCreateDir(t *testing.T) {
 		resp.Node.Value == "" && resp.Node.TTL == 5) {
 		t.Fatalf("CreateDir 1 failed: %#v", resp)
 	}
+	if resp.PrevNode != nil {
+		t.Fatalf("CreateDir 1 PrevNode failed: %#v", resp)
+	}
 
 	// This should fail, because the key is already there
 	resp, err = c.CreateDir("fooDir", 5)