From 68fde8625669b73a85b8ea54738b1ddf2c882e13 Mon Sep 17 00:00:00 2001 From: allencloud Date: Thu, 1 Sep 2016 01:07:05 +0800 Subject: [PATCH] validate heartbeat in discovery cluster opts Signed-off-by: allencloud --- daemon/discovery.go | 12 ++++++++++++ daemon/discovery_test.go | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/daemon/discovery.go b/daemon/discovery.go index ca3020eb01..ee4ea875b7 100644 --- a/daemon/discovery.go +++ b/daemon/discovery.go @@ -56,6 +56,12 @@ func discoveryOpts(clusterOpts map[string]string) (time.Duration, time.Duration, if err != nil { return time.Duration(0), time.Duration(0), err } + + if h <= 0 { + return time.Duration(0), time.Duration(0), + fmt.Errorf("discovery.heartbeat must be positive") + } + heartbeat = time.Duration(h) * time.Second ttl = defaultDiscoveryTTLFactor * heartbeat } @@ -65,6 +71,12 @@ func discoveryOpts(clusterOpts map[string]string) (time.Duration, time.Duration, if err != nil { return time.Duration(0), time.Duration(0), err } + + if t <= 0 { + return time.Duration(0), time.Duration(0), + fmt.Errorf("discovery.ttl must be positive") + } + ttl = time.Duration(t) * time.Second if _, ok := clusterOpts["discovery.heartbeat"]; !ok { diff --git a/daemon/discovery_test.go b/daemon/discovery_test.go index 65511b90f6..336973c516 100644 --- a/daemon/discovery_test.go +++ b/daemon/discovery_test.go @@ -18,6 +18,18 @@ func TestDiscoveryOpts(t *testing.T) { t.Fatalf("discovery.ttl == discovery.heartbeat must fail") } + clusterOpts = map[string]string{"discovery.heartbeat": "-10", "discovery.ttl": "10"} + heartbeat, ttl, err = discoveryOpts(clusterOpts) + if err == nil { + t.Fatalf("negative discovery.heartbeat must fail") + } + + clusterOpts = map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "-10"} + heartbeat, ttl, err = discoveryOpts(clusterOpts) + if err == nil { + t.Fatalf("negative discovery.ttl must fail") + } + clusterOpts = map[string]string{"discovery.heartbeat": "invalid"} heartbeat, ttl, err = discoveryOpts(clusterOpts) if err == nil {