Browse code

validate heartbeat in discovery cluster opts

Signed-off-by: allencloud <allen.sun@daocloud.io>

allencloud authored on 2016/09/01 02:07:05
Showing 2 changed files
... ...
@@ -56,6 +56,12 @@ func discoveryOpts(clusterOpts map[string]string) (time.Duration, time.Duration,
56 56
 		if err != nil {
57 57
 			return time.Duration(0), time.Duration(0), err
58 58
 		}
59
+
60
+		if h <= 0 {
61
+			return time.Duration(0), time.Duration(0),
62
+				fmt.Errorf("discovery.heartbeat must be positive")
63
+		}
64
+
59 65
 		heartbeat = time.Duration(h) * time.Second
60 66
 		ttl = defaultDiscoveryTTLFactor * heartbeat
61 67
 	}
... ...
@@ -65,6 +71,12 @@ func discoveryOpts(clusterOpts map[string]string) (time.Duration, time.Duration,
65 65
 		if err != nil {
66 66
 			return time.Duration(0), time.Duration(0), err
67 67
 		}
68
+
69
+		if t <= 0 {
70
+			return time.Duration(0), time.Duration(0),
71
+				fmt.Errorf("discovery.ttl must be positive")
72
+		}
73
+
68 74
 		ttl = time.Duration(t) * time.Second
69 75
 
70 76
 		if _, ok := clusterOpts["discovery.heartbeat"]; !ok {
... ...
@@ -18,6 +18,18 @@ func TestDiscoveryOpts(t *testing.T) {
18 18
 		t.Fatalf("discovery.ttl == discovery.heartbeat must fail")
19 19
 	}
20 20
 
21
+	clusterOpts = map[string]string{"discovery.heartbeat": "-10", "discovery.ttl": "10"}
22
+	heartbeat, ttl, err = discoveryOpts(clusterOpts)
23
+	if err == nil {
24
+		t.Fatalf("negative discovery.heartbeat must fail")
25
+	}
26
+
27
+	clusterOpts = map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "-10"}
28
+	heartbeat, ttl, err = discoveryOpts(clusterOpts)
29
+	if err == nil {
30
+		t.Fatalf("negative discovery.ttl must fail")
31
+	}
32
+
21 33
 	clusterOpts = map[string]string{"discovery.heartbeat": "invalid"}
22 34
 	heartbeat, ttl, err = discoveryOpts(clusterOpts)
23 35
 	if err == nil {