| package discovery // import "github.com/docker/docker/daemon/discovery" |
| |
| import ( |
| "fmt" |
| "testing" |
| "time" |
| |
| "gotest.tools/assert" |
| is "gotest.tools/assert/cmp" |
| ) |
| |
| func TestDiscoveryOptsErrors(t *testing.T) { |
| var testcases = []struct { |
| doc string |
| opts map[string]string |
| }{ |
| { |
| doc: "discovery.ttl < discovery.heartbeat", |
| opts: map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "5"}, |
| }, |
| { |
| doc: "discovery.ttl == discovery.heartbeat", |
| opts: map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "10"}, |
| }, |
| { |
| doc: "negative discovery.heartbeat", |
| opts: map[string]string{"discovery.heartbeat": "-10", "discovery.ttl": "10"}, |
| }, |
| { |
| doc: "negative discovery.ttl", |
| opts: map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "-10"}, |
| }, |
| { |
| doc: "invalid discovery.heartbeat", |
| opts: map[string]string{"discovery.heartbeat": "invalid"}, |
| }, |
| { |
| doc: "invalid discovery.ttl", |
| opts: map[string]string{"discovery.ttl": "invalid"}, |
| }, |
| } |
| |
| for _, testcase := range testcases { |
| _, _, err := discoveryOpts(testcase.opts) |
| assert.Check(t, is.ErrorContains(err, ""), testcase.doc) |
| } |
| } |
| |
| func TestDiscoveryOpts(t *testing.T) { |
| clusterOpts := map[string]string{"discovery.heartbeat": "10", "discovery.ttl": "20"} |
| heartbeat, ttl, err := discoveryOpts(clusterOpts) |
| assert.NilError(t, err) |
| assert.Check(t, is.Equal(10*time.Second, heartbeat)) |
| assert.Check(t, is.Equal(20*time.Second, ttl)) |
| |
| clusterOpts = map[string]string{"discovery.heartbeat": "10"} |
| heartbeat, ttl, err = discoveryOpts(clusterOpts) |
| assert.NilError(t, err) |
| assert.Check(t, is.Equal(10*time.Second, heartbeat)) |
| assert.Check(t, is.Equal(10*defaultDiscoveryTTLFactor*time.Second, ttl)) |
| |
| clusterOpts = map[string]string{"discovery.ttl": "30"} |
| heartbeat, ttl, err = discoveryOpts(clusterOpts) |
| assert.NilError(t, err) |
| |
| if ttl != 30*time.Second { |
| t.Fatalf("TTL - Expected : %v, Actual : %v", 30*time.Second, ttl) |
| } |
| |
| expected := 30 * time.Second / defaultDiscoveryTTLFactor |
| if heartbeat != expected { |
| t.Fatalf("Heartbeat - Expected : %v, Actual : %v", expected, heartbeat) |
| } |
| |
| discoveryTTL := fmt.Sprintf("%d", defaultDiscoveryTTLFactor-1) |
| clusterOpts = map[string]string{"discovery.ttl": discoveryTTL} |
| heartbeat, _, err = discoveryOpts(clusterOpts) |
| if err == nil && heartbeat == 0 { |
| t.Fatal("discovery.heartbeat must be positive") |
| } |
| |
| clusterOpts = map[string]string{} |
| heartbeat, ttl, err = discoveryOpts(clusterOpts) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| if heartbeat != defaultDiscoveryHeartbeat { |
| t.Fatalf("Heartbeat - Expected : %v, Actual : %v", defaultDiscoveryHeartbeat, heartbeat) |
| } |
| |
| expected = defaultDiscoveryHeartbeat * defaultDiscoveryTTLFactor |
| if ttl != expected { |
| t.Fatalf("TTL - Expected : %v, Actual : %v", expected, ttl) |
| } |
| } |