Fix kube2sky flakes. Fix tools.GetEtcdVersion to work with etcd > 2.0.7
This commit is contained in:
@@ -17,7 +17,6 @@ limitations under the License.
|
||||
package tools
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
@@ -475,35 +474,22 @@ func (h *EtcdHelper) PrefixEtcdKey(key string) string {
|
||||
return path.Join("/", h.PathPrefix, key)
|
||||
}
|
||||
|
||||
// GetEtcdVersion performs a version check against the provided Etcd server, returning a triplet
|
||||
// of the release version, internal version, and error (if any).
|
||||
func GetEtcdVersion(host string) (releaseVersion, internalVersion string, err error) {
|
||||
// GetEtcdVersion performs a version check against the provided Etcd server,
|
||||
// returning the string response, and error (if any).
|
||||
func GetEtcdVersion(host string) (string, error) {
|
||||
response, err := http.Get(host + "/version")
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
return "", err
|
||||
}
|
||||
defer response.Body.Close()
|
||||
|
||||
body, err := ioutil.ReadAll(response.Body)
|
||||
if response.StatusCode != http.StatusOK {
|
||||
return "", fmt.Errorf("Unsuccessful response from server: %v", err)
|
||||
}
|
||||
versionBytes, err := ioutil.ReadAll(response.Body)
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
return "", err
|
||||
}
|
||||
|
||||
var dat map[string]interface{}
|
||||
if err := json.Unmarshal(body, &dat); err != nil {
|
||||
return "", "", fmt.Errorf("unknown server: %s", string(body))
|
||||
}
|
||||
if obj := dat["releaseVersion"]; obj != nil {
|
||||
if s, ok := obj.(string); ok {
|
||||
releaseVersion = s
|
||||
}
|
||||
}
|
||||
if obj := dat["internalVersion"]; obj != nil {
|
||||
if s, ok := obj.(string); ok {
|
||||
internalVersion = s
|
||||
}
|
||||
}
|
||||
return
|
||||
return string(versionBytes), nil
|
||||
}
|
||||
|
||||
func startEtcd() (*exec.Cmd, error) {
|
||||
@@ -516,7 +502,7 @@ func startEtcd() (*exec.Cmd, error) {
|
||||
}
|
||||
|
||||
func NewEtcdClientStartServerIfNecessary(server string) (EtcdClient, error) {
|
||||
_, _, err := GetEtcdVersion(server)
|
||||
_, err := GetEtcdVersion(server)
|
||||
if err != nil {
|
||||
glog.Infof("Failed to find etcd, attempting to start.")
|
||||
_, err := startEtcd()
|
||||
|
@@ -685,35 +685,16 @@ func TestGuaranteedUpdate_CreateCollision(t *testing.T) {
|
||||
|
||||
func TestGetEtcdVersion_ValidVersion(t *testing.T) {
|
||||
testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprintln(w, "{\"releaseVersion\":\"2.0.3\",\"internalVersion\":\"2\"}")
|
||||
fmt.Fprint(w, "etcd 2.0.9")
|
||||
}))
|
||||
defer testServer.Close()
|
||||
|
||||
var relVersion string
|
||||
var intVersion string
|
||||
var version string
|
||||
var err error
|
||||
if relVersion, intVersion, err = GetEtcdVersion(testServer.URL); err != nil {
|
||||
if version, err = GetEtcdVersion(testServer.URL); err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
assert.Equal(t, "2.0.3", relVersion, "Unexpected external version")
|
||||
assert.Equal(t, "2", intVersion, "Unexpected internal version")
|
||||
assert.Nil(t, err)
|
||||
}
|
||||
|
||||
func TestGetEtcdVersion_UnknownVersion(t *testing.T) {
|
||||
testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
fmt.Fprintln(w, "{\"unknownAttribute\":\"foobar\",\"internalVersion\":\"2\"}")
|
||||
}))
|
||||
defer testServer.Close()
|
||||
|
||||
var relVersion string
|
||||
var intVersion string
|
||||
var err error
|
||||
if relVersion, intVersion, err = GetEtcdVersion(testServer.URL); err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
assert.Equal(t, "", relVersion, "Unexpected external version")
|
||||
assert.Equal(t, "2", intVersion, "Unexpected internal version")
|
||||
assert.Equal(t, "etcd 2.0.9", version, "Unexpected version")
|
||||
assert.Nil(t, err)
|
||||
}
|
||||
|
||||
@@ -723,8 +704,12 @@ func TestGetEtcdVersion_ErrorStatus(t *testing.T) {
|
||||
}))
|
||||
defer testServer.Close()
|
||||
|
||||
var err error
|
||||
_, _, err = GetEtcdVersion(testServer.URL)
|
||||
_, err := GetEtcdVersion(testServer.URL)
|
||||
assert.NotNil(t, err)
|
||||
}
|
||||
|
||||
func TestGetEtcdVersion_NotListening(t *testing.T) {
|
||||
_, err := GetEtcdVersion("http://127.0.0.1:4001")
|
||||
assert.NotNil(t, err)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user