mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
bump(github.com/coreos/go-etcd): 9de519a68a870466f217c35f476ba658f1694bbe
This commit is contained in:
parent
7da85d66fd
commit
f37d9df118
@ -2,6 +2,7 @@ package etcd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"crypto/x509"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
@ -41,6 +42,7 @@ type Cluster struct {
|
|||||||
type Config struct {
|
type Config struct {
|
||||||
CertFile string `json:"certFile"`
|
CertFile string `json:"certFile"`
|
||||||
KeyFile string `json:"keyFile"`
|
KeyFile string `json:"keyFile"`
|
||||||
|
CaCertFile string `json:"caCertFile"`
|
||||||
Scheme string `json:"scheme"`
|
Scheme string `json:"scheme"`
|
||||||
Timeout time.Duration `json:"timeout"`
|
Timeout time.Duration `json:"timeout"`
|
||||||
Consistency string `json: "consistency"`
|
Consistency string `json: "consistency"`
|
||||||
@ -131,7 +133,7 @@ func NewClientReader(reader io.Reader) (*Client, error) {
|
|||||||
|
|
||||||
func setupHttpClient(client *Client) error {
|
func setupHttpClient(client *Client) error {
|
||||||
if client.config.CertFile != "" && client.config.KeyFile != "" {
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -229,7 +231,7 @@ func (c *Client) saveConfig() error {
|
|||||||
return nil
|
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 != "" {
|
if cert != "" && key != "" {
|
||||||
tlsCert, err := tls.LoadX509KeyPair(cert, key)
|
tlsCert, err := tls.LoadX509KeyPair(cert, key)
|
||||||
|
|
||||||
@ -237,12 +239,30 @@ func (c *Client) SetCertAndKey(cert string, key string) error {
|
|||||||
return err
|
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{
|
tr := &http.Transport{
|
||||||
TLSClientConfig: &tls.Config{
|
TLSClientConfig: tlsConfig,
|
||||||
Certificates: []tls.Certificate{tlsCert},
|
Dial: dialTimeout,
|
||||||
InsecureSkipVerify: true,
|
|
||||||
},
|
|
||||||
Dial: dialTimeout,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c.httpClient = &http.Client{Transport: tr}
|
c.httpClient = &http.Client{Transport: tr}
|
||||||
|
@ -21,6 +21,10 @@ func TestCompareAndSwap(t *testing.T) {
|
|||||||
t.Fatalf("CompareAndSwap 1 failed: %#v", resp)
|
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
|
// This should fail because it gives an incorrect prevValue
|
||||||
resp, err = c.CompareAndSwap("foo", "bar3", 5, "xxx", 0)
|
resp, err = c.CompareAndSwap("foo", "bar3", 5, "xxx", 0)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -38,12 +42,16 @@ func TestCompareAndSwap(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if !(resp.Node.Value == "bar2" && resp.Node.Key == "/foo" && resp.Node.TTL == 5) {
|
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
|
// This should fail because it gives an incorrect prevIndex
|
||||||
resp, err = c.CompareAndSwap("foo", "bar3", 5, "", 29817514)
|
resp, err = c.CompareAndSwap("foo", "bar3", 5, "", 29817514)
|
||||||
if err == nil {
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,10 @@ func TestDelete(t *testing.T) {
|
|||||||
t.Fatalf("Delete failed with %s", resp.Node.Value)
|
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)
|
resp, err = c.Delete("foo", false)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("Delete should have failed because the key foo did not exist. "+
|
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.Delete("fooDir", true)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
c.Set("foo", "bar", 5)
|
c.SetDir("foo", 5)
|
||||||
// test delete an empty dir
|
// test delete an empty dir
|
||||||
resp, err := c.DeleteDir("foo")
|
resp, err := c.DeleteDir("foo")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -45,6 +49,10 @@ func TestDeleteAll(t *testing.T) {
|
|||||||
t.Fatalf("DeleteAll 1 failed: %#v", resp)
|
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.CreateDir("fooDir", 5)
|
||||||
c.Set("fooDir/foo", "bar", 5)
|
c.Set("fooDir/foo", "bar", 5)
|
||||||
_, err = c.DeleteDir("fooDir")
|
_, err = c.DeleteDir("fooDir")
|
||||||
@ -61,6 +69,10 @@ func TestDeleteAll(t *testing.T) {
|
|||||||
t.Fatalf("DeleteAll 2 failed: %#v", resp)
|
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)
|
resp, err = c.Delete("foo", true)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("DeleteAll should have failed because the key foo did not exist. "+
|
t.Fatalf("DeleteAll should have failed because the key foo did not exist. "+
|
||||||
|
@ -55,6 +55,7 @@ func (rr *RawResponse) toResponse() (*Response, error) {
|
|||||||
type Response struct {
|
type Response struct {
|
||||||
Action string `json:"action"`
|
Action string `json:"action"`
|
||||||
Node *Node `json:"node"`
|
Node *Node `json:"node"`
|
||||||
|
PrevNode *Node `json:"prevNode,omitempty"`
|
||||||
EtcdIndex uint64 `json:"etcdIndex"`
|
EtcdIndex uint64 `json:"etcdIndex"`
|
||||||
RaftIndex uint64 `json:"raftIndex"`
|
RaftIndex uint64 `json:"raftIndex"`
|
||||||
RaftTerm uint64 `json:"raftTerm"`
|
RaftTerm uint64 `json:"raftTerm"`
|
||||||
|
@ -17,6 +17,9 @@ func TestSet(t *testing.T) {
|
|||||||
if resp.Node.Key != "/foo" || resp.Node.Value != "bar" || resp.Node.TTL != 5 {
|
if resp.Node.Key != "/foo" || resp.Node.Value != "bar" || resp.Node.TTL != 5 {
|
||||||
t.Fatalf("Set 1 failed: %#v", resp)
|
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)
|
resp, err = c.Set("foo", "bar2", 5)
|
||||||
if err != nil {
|
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) {
|
if !(resp.Node.Key == "/foo" && resp.Node.Value == "bar2" && resp.Node.TTL == 5) {
|
||||||
t.Fatalf("Set 2 failed: %#v", resp)
|
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) {
|
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) {
|
if !(resp.Action == "update" && resp.Node.Key == "/foo" && resp.Node.TTL == 5) {
|
||||||
t.Fatalf("Update 1 failed: %#v", resp)
|
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.
|
// This should fail because the key does not exist.
|
||||||
resp, err = c.Update("nonexistent", "whatever", 5)
|
resp, err = c.Update("nonexistent", "whatever", 5)
|
||||||
@ -77,6 +86,9 @@ func TestCreate(t *testing.T) {
|
|||||||
resp.Node.Value == newValue && resp.Node.TTL == 5) {
|
resp.Node.Value == newValue && resp.Node.TTL == 5) {
|
||||||
t.Fatalf("Create 1 failed: %#v", resp)
|
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
|
// This should fail, because the key is already there
|
||||||
resp, err = c.Create(newKey, newValue, 5)
|
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) {
|
if !(resp.Node.Key == "/fooDir" && resp.Node.Value == "" && resp.Node.TTL == 5) {
|
||||||
t.Fatalf("SetDir 1 failed: %#v", resp)
|
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
|
// This should fail because /fooDir already points to a directory
|
||||||
resp, err = c.CreateDir("/fooDir", 5)
|
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) {
|
if !(resp.Node.Key == "/foo" && resp.Node.Value == "" && resp.Node.TTL == 5) {
|
||||||
t.Fatalf("SetDir 2 failed: %#v", resp)
|
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) {
|
func TestUpdateDir(t *testing.T) {
|
||||||
@ -145,6 +163,9 @@ func TestUpdateDir(t *testing.T) {
|
|||||||
resp.Node.Value == "" && resp.Node.TTL == 5) {
|
resp.Node.Value == "" && resp.Node.TTL == 5) {
|
||||||
t.Fatalf("UpdateDir 1 failed: %#v", resp)
|
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.
|
// This should fail because the key does not exist.
|
||||||
resp, err = c.UpdateDir("nonexistentDir", 5)
|
resp, err = c.UpdateDir("nonexistentDir", 5)
|
||||||
@ -170,6 +191,9 @@ func TestCreateDir(t *testing.T) {
|
|||||||
resp.Node.Value == "" && resp.Node.TTL == 5) {
|
resp.Node.Value == "" && resp.Node.TTL == 5) {
|
||||||
t.Fatalf("CreateDir 1 failed: %#v", resp)
|
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
|
// This should fail, because the key is already there
|
||||||
resp, err = c.CreateDir("fooDir", 5)
|
resp, err = c.CreateDir("fooDir", 5)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user