Merge pull request #10277 from brendandburns/health

Switch to using the official etcd health check.
This commit is contained in:
Maxwell Forbes
2015-06-24 11:45:51 -07:00
5 changed files with 72 additions and 4 deletions

View File

@@ -17,6 +17,7 @@ limitations under the License.
package tools
import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
@@ -723,3 +724,19 @@ func NewEtcdClientStartServerIfNecessary(server string) (EtcdClient, error) {
servers := []string{server}
return etcd.NewClient(servers), nil
}
type etcdHealth struct {
// Note this has to be public so the json library can modify it.
Health string `json:health`
}
func EtcdHealthCheck(data []byte) error {
obj := etcdHealth{}
if err := json.Unmarshal(data, &obj); err != nil {
return err
}
if obj.Health != "true" {
return fmt.Errorf("Unhealthy status: %s", obj.Health)
}
return nil
}

View File

@@ -856,3 +856,32 @@ func TestPrefixEtcdKey(t *testing.T) {
assert.Equal(t, keyBefore, keyAfter, "Prefix incorrectly added by EtcdHelper")
}
func TestEtcdHealthCheck(t *testing.T) {
tests := []struct {
data string
expectErr bool
}{
{
data: "{\"health\": \"true\"}",
expectErr: false,
},
{
data: "{\"health\": \"false\"}",
expectErr: true,
},
{
data: "invalid json",
expectErr: true,
},
}
for _, test := range tests {
err := EtcdHealthCheck([]byte(test.data))
if err != nil && !test.expectErr {
t.Errorf("unexpected error: %v", err)
}
if err == nil && test.expectErr {
t.Error("unexpected non-error")
}
}
}