github.com/stuarqi/moby@v1.13.1/daemon/discovery_test.go (about) 1 package daemon 2 3 import ( 4 "testing" 5 "time" 6 ) 7 8 func TestDiscoveryOpts(t *testing.T) { 9 clusterOpts := map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "5"} 10 heartbeat, ttl, err := discoveryOpts(clusterOpts) 11 if err == nil { 12 t.Fatalf("discovery.ttl < discovery.heartbeat must fail") 13 } 14 15 clusterOpts = map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "10"} 16 heartbeat, ttl, err = discoveryOpts(clusterOpts) 17 if err == nil { 18 t.Fatalf("discovery.ttl == discovery.heartbeat must fail") 19 } 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 33 clusterOpts = map[string]string{"discovery.heartbeat": "invalid"} 34 heartbeat, ttl, err = discoveryOpts(clusterOpts) 35 if err == nil { 36 t.Fatalf("invalid discovery.heartbeat must fail") 37 } 38 39 clusterOpts = map[string]string{"discovery.ttl": "invalid"} 40 heartbeat, ttl, err = discoveryOpts(clusterOpts) 41 if err == nil { 42 t.Fatalf("invalid discovery.ttl must fail") 43 } 44 45 clusterOpts = map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "20"} 46 heartbeat, ttl, err = discoveryOpts(clusterOpts) 47 if err != nil { 48 t.Fatal(err) 49 } 50 51 if heartbeat != 10*time.Second { 52 t.Fatalf("Heartbeat - Expected : %v, Actual : %v", 10*time.Second, heartbeat) 53 } 54 55 if ttl != 20*time.Second { 56 t.Fatalf("TTL - Expected : %v, Actual : %v", 20*time.Second, ttl) 57 } 58 59 clusterOpts = map[string]string{"discovery.heartbeat": "10"} 60 heartbeat, ttl, err = discoveryOpts(clusterOpts) 61 if err != nil { 62 t.Fatal(err) 63 } 64 65 if heartbeat != 10*time.Second { 66 t.Fatalf("Heartbeat - Expected : %v, Actual : %v", 10*time.Second, heartbeat) 67 } 68 69 expected := 10 * defaultDiscoveryTTLFactor * time.Second 70 if ttl != expected { 71 t.Fatalf("TTL - Expected : %v, Actual : %v", expected, ttl) 72 } 73 74 clusterOpts = map[string]string{"discovery.ttl": "30"} 75 heartbeat, ttl, err = discoveryOpts(clusterOpts) 76 if err != nil { 77 t.Fatal(err) 78 } 79 80 if ttl != 30*time.Second { 81 t.Fatalf("TTL - Expected : %v, Actual : %v", 30*time.Second, ttl) 82 } 83 84 expected = 30 * time.Second / defaultDiscoveryTTLFactor 85 if heartbeat != expected { 86 t.Fatalf("Heartbeat - Expected : %v, Actual : %v", expected, heartbeat) 87 } 88 89 clusterOpts = map[string]string{} 90 heartbeat, ttl, err = discoveryOpts(clusterOpts) 91 if err != nil { 92 t.Fatal(err) 93 } 94 95 if heartbeat != defaultDiscoveryHeartbeat { 96 t.Fatalf("Heartbeat - Expected : %v, Actual : %v", defaultDiscoveryHeartbeat, heartbeat) 97 } 98 99 expected = defaultDiscoveryHeartbeat * defaultDiscoveryTTLFactor 100 if ttl != expected { 101 t.Fatalf("TTL - Expected : %v, Actual : %v", expected, ttl) 102 } 103 } 104 105 func TestModifiedDiscoverySettings(t *testing.T) { 106 cases := []struct { 107 current *Config 108 modified *Config 109 expected bool 110 }{ 111 { 112 current: discoveryConfig("foo", "bar", map[string]string{}), 113 modified: discoveryConfig("foo", "bar", map[string]string{}), 114 expected: false, 115 }, 116 { 117 current: discoveryConfig("foo", "bar", map[string]string{"foo": "bar"}), 118 modified: discoveryConfig("foo", "bar", map[string]string{"foo": "bar"}), 119 expected: false, 120 }, 121 { 122 current: discoveryConfig("foo", "bar", map[string]string{}), 123 modified: discoveryConfig("foo", "bar", nil), 124 expected: false, 125 }, 126 { 127 current: discoveryConfig("foo", "bar", nil), 128 modified: discoveryConfig("foo", "bar", map[string]string{}), 129 expected: false, 130 }, 131 { 132 current: discoveryConfig("foo", "bar", nil), 133 modified: discoveryConfig("baz", "bar", nil), 134 expected: true, 135 }, 136 { 137 current: discoveryConfig("foo", "bar", nil), 138 modified: discoveryConfig("foo", "baz", nil), 139 expected: true, 140 }, 141 { 142 current: discoveryConfig("foo", "bar", nil), 143 modified: discoveryConfig("foo", "bar", map[string]string{"foo": "bar"}), 144 expected: true, 145 }, 146 } 147 148 for _, c := range cases { 149 got := modifiedDiscoverySettings(c.current, c.modified.ClusterStore, c.modified.ClusterAdvertise, c.modified.ClusterOpts) 150 if c.expected != got { 151 t.Fatalf("expected %v, got %v: current config %v, new config %v", c.expected, got, c.current, c.modified) 152 } 153 } 154 } 155 156 func discoveryConfig(backendAddr, advertiseAddr string, opts map[string]string) *Config { 157 return &Config{ 158 CommonConfig: CommonConfig{ 159 ClusterStore: backendAddr, 160 ClusterAdvertise: advertiseAddr, 161 ClusterOpts: opts, 162 }, 163 } 164 }