github.com/opsramp/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  }