github.com/Iqoqo/consul@v1.4.5/agent/metadata/server_test.go (about)

     1  package metadata_test
     2  
     3  import (
     4  	"net"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/consul/agent/metadata"
     8  	"github.com/hashicorp/serf/serf"
     9  )
    10  
    11  func TestServer_Key_params(t *testing.T) {
    12  	ipv4a := net.ParseIP("127.0.0.1")
    13  	ipv4b := net.ParseIP("1.2.3.4")
    14  
    15  	tests := []struct {
    16  		name  string
    17  		sd1   *metadata.Server
    18  		sd2   *metadata.Server
    19  		equal bool
    20  	}{
    21  		{
    22  			name: "Addr inequality",
    23  			sd1: &metadata.Server{
    24  				Name:       "s1",
    25  				Datacenter: "dc1",
    26  				Port:       8300,
    27  				Addr:       &net.IPAddr{IP: ipv4a},
    28  			},
    29  			sd2: &metadata.Server{
    30  				Name:       "s1",
    31  				Datacenter: "dc1",
    32  				Port:       8300,
    33  				Addr:       &net.IPAddr{IP: ipv4b},
    34  			},
    35  			equal: true,
    36  		},
    37  	}
    38  
    39  	for _, test := range tests {
    40  		if test.sd1.Key().Equal(test.sd2.Key()) != test.equal {
    41  			t.Errorf("Expected a %v result from test %s", test.equal, test.name)
    42  		}
    43  
    44  		// Test Key to make sure it actually works as a key
    45  		m := make(map[metadata.Key]bool)
    46  		m[*test.sd1.Key()] = true
    47  		if _, found := m[*test.sd2.Key()]; found != test.equal {
    48  			t.Errorf("Expected a %v result from map test %s", test.equal, test.name)
    49  		}
    50  	}
    51  }
    52  
    53  func TestIsConsulServer(t *testing.T) {
    54  	m := serf.Member{
    55  		Name: "foo",
    56  		Addr: net.IP([]byte{127, 0, 0, 1}),
    57  		Tags: map[string]string{
    58  			"role":          "consul",
    59  			"id":            "asdf",
    60  			"dc":            "east-aws",
    61  			"port":          "10000",
    62  			"build":         "0.8.0",
    63  			"wan_join_port": "1234",
    64  			"vsn":           "1",
    65  			"expect":        "3",
    66  			"raft_vsn":      "3",
    67  			"use_tls":       "1",
    68  			"nonvoter":      "1",
    69  		},
    70  		Status: serf.StatusLeft,
    71  	}
    72  	ok, parts := metadata.IsConsulServer(m)
    73  	if !ok || parts.Datacenter != "east-aws" || parts.Port != 10000 {
    74  		t.Fatalf("bad: %v %v", ok, parts)
    75  	}
    76  	if parts.Name != "foo" {
    77  		t.Fatalf("bad: %v", parts)
    78  	}
    79  	if parts.ID != "asdf" {
    80  		t.Fatalf("bad: %v", parts.ID)
    81  	}
    82  	if parts.Bootstrap {
    83  		t.Fatalf("unexpected bootstrap")
    84  	}
    85  	if parts.Expect != 3 {
    86  		t.Fatalf("bad: %v", parts.Expect)
    87  	}
    88  	if parts.Port != 10000 {
    89  		t.Fatalf("bad: %v", parts.Port)
    90  	}
    91  	if parts.WanJoinPort != 1234 {
    92  		t.Fatalf("bad: %v", parts.WanJoinPort)
    93  	}
    94  	if parts.RaftVersion != 3 {
    95  		t.Fatalf("bad: %v", parts.RaftVersion)
    96  	}
    97  	if parts.Status != serf.StatusLeft {
    98  		t.Fatalf("bad: %v", parts.Status)
    99  	}
   100  	if !parts.UseTLS {
   101  		t.Fatalf("bad: %v", parts.UseTLS)
   102  	}
   103  	if !parts.NonVoter {
   104  		t.Fatalf("unexpected voter")
   105  	}
   106  	m.Tags["bootstrap"] = "1"
   107  	m.Tags["disabled"] = "1"
   108  	ok, parts = metadata.IsConsulServer(m)
   109  	if !ok {
   110  		t.Fatalf("expected a valid consul server")
   111  	}
   112  	if !parts.Bootstrap {
   113  		t.Fatalf("expected bootstrap")
   114  	}
   115  	if parts.Addr.String() != "127.0.0.1:10000" {
   116  		t.Fatalf("bad addr: %v", parts.Addr)
   117  	}
   118  	if parts.Version != 1 {
   119  		t.Fatalf("bad: %v", parts)
   120  	}
   121  	m.Tags["expect"] = "3"
   122  	delete(m.Tags, "bootstrap")
   123  	delete(m.Tags, "disabled")
   124  	ok, parts = metadata.IsConsulServer(m)
   125  	if !ok || parts.Expect != 3 {
   126  		t.Fatalf("bad: %v", parts.Expect)
   127  	}
   128  	if parts.Bootstrap {
   129  		t.Fatalf("unexpected bootstrap")
   130  	}
   131  
   132  	delete(m.Tags, "nonvoter")
   133  	ok, parts = metadata.IsConsulServer(m)
   134  	if !ok || parts.NonVoter {
   135  		t.Fatalf("unexpected nonvoter")
   136  	}
   137  
   138  	delete(m.Tags, "role")
   139  	ok, parts = metadata.IsConsulServer(m)
   140  	if ok {
   141  		t.Fatalf("unexpected ok server")
   142  	}
   143  }
   144  
   145  func TestIsConsulServer_Optional(t *testing.T) {
   146  	m := serf.Member{
   147  		Name: "foo",
   148  		Addr: net.IP([]byte{127, 0, 0, 1}),
   149  		Tags: map[string]string{
   150  			"role":  "consul",
   151  			"id":    "asdf",
   152  			"dc":    "east-aws",
   153  			"port":  "10000",
   154  			"vsn":   "1",
   155  			"build": "0.8.0",
   156  			// wan_join_port, raft_vsn, and expect are optional and
   157  			// should default to zero.
   158  		},
   159  	}
   160  	ok, parts := metadata.IsConsulServer(m)
   161  	if !ok || parts.Datacenter != "east-aws" || parts.Port != 10000 {
   162  		t.Fatalf("bad: %v %v", ok, parts)
   163  	}
   164  	if parts.Name != "foo" {
   165  		t.Fatalf("bad: %v", parts)
   166  	}
   167  	if parts.ID != "asdf" {
   168  		t.Fatalf("bad: %v", parts.ID)
   169  	}
   170  	if parts.Bootstrap {
   171  		t.Fatalf("unexpected bootstrap")
   172  	}
   173  	if parts.Expect != 0 {
   174  		t.Fatalf("bad: %v", parts.Expect)
   175  	}
   176  	if parts.Port != 10000 {
   177  		t.Fatalf("bad: %v", parts.Port)
   178  	}
   179  	if parts.WanJoinPort != 0 {
   180  		t.Fatalf("bad: %v", parts.WanJoinPort)
   181  	}
   182  	if parts.RaftVersion != 0 {
   183  		t.Fatalf("bad: %v", parts.RaftVersion)
   184  	}
   185  	m.Tags["bootstrap"] = "1"
   186  	m.Tags["disabled"] = "1"
   187  	ok, parts = metadata.IsConsulServer(m)
   188  	if !ok {
   189  		t.Fatalf("expected a valid consul server")
   190  	}
   191  	if !parts.Bootstrap {
   192  		t.Fatalf("expected bootstrap")
   193  	}
   194  	if parts.Addr.String() != "127.0.0.1:10000" {
   195  		t.Fatalf("bad addr: %v", parts.Addr)
   196  	}
   197  	if parts.Version != 1 {
   198  		t.Fatalf("bad: %v", parts)
   199  	}
   200  	m.Tags["expect"] = "3"
   201  	delete(m.Tags, "bootstrap")
   202  	delete(m.Tags, "disabled")
   203  	ok, parts = metadata.IsConsulServer(m)
   204  	if !ok || parts.Expect != 3 {
   205  		t.Fatalf("bad: %v", parts.Expect)
   206  	}
   207  	if parts.Bootstrap {
   208  		t.Fatalf("unexpected bootstrap")
   209  	}
   210  
   211  	delete(m.Tags, "role")
   212  	ok, parts = metadata.IsConsulServer(m)
   213  	if ok {
   214  		t.Fatalf("unexpected ok server")
   215  	}
   216  }