github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/gossip/node_set_test.go (about)

     1  // Copyright 2015 The Cockroach Authors.
     2  //
     3  // Use of this software is governed by the Business Source License
     4  // included in the file licenses/BSL.txt.
     5  //
     6  // As of the Change Date specified in that file, in accordance with
     7  // the Business Source License, use of this software will be governed
     8  // by the Apache License, Version 2.0, included in the file
     9  // licenses/APL.txt.
    10  
    11  package gossip
    12  
    13  import (
    14  	"testing"
    15  
    16  	"github.com/cockroachdb/cockroach/pkg/roachpb"
    17  	"github.com/cockroachdb/cockroach/pkg/util/leaktest"
    18  	"github.com/cockroachdb/cockroach/pkg/util/metric"
    19  )
    20  
    21  func TestNodeSetMaxSize(t *testing.T) {
    22  	defer leaktest.AfterTest(t)()
    23  	nodes := makeNodeSet(1, metric.NewGauge(metric.Metadata{Name: ""}))
    24  	if !nodes.hasSpace() {
    25  		t.Error("set should have space")
    26  	}
    27  	nodes.addNode(roachpb.NodeID(1))
    28  	if nodes.hasSpace() {
    29  		t.Error("set should have no space")
    30  	}
    31  }
    32  
    33  func TestNodeSetHasNode(t *testing.T) {
    34  	defer leaktest.AfterTest(t)()
    35  	nodes := makeNodeSet(2, metric.NewGauge(metric.Metadata{Name: ""}))
    36  	node := roachpb.NodeID(1)
    37  	if nodes.hasNode(node) {
    38  		t.Error("node wasn't added and should not be valid")
    39  	}
    40  	// Add node and verify it's valid.
    41  	nodes.addNode(node)
    42  	if !nodes.hasNode(node) {
    43  		t.Error("empty node wasn't added and should not be valid")
    44  	}
    45  }
    46  
    47  func TestNodeSetAddAndRemoveNode(t *testing.T) {
    48  	defer leaktest.AfterTest(t)()
    49  	nodes := makeNodeSet(2, metric.NewGauge(metric.Metadata{Name: ""}))
    50  	node0 := roachpb.NodeID(1)
    51  	node1 := roachpb.NodeID(2)
    52  	nodes.addNode(node0)
    53  	nodes.addNode(node1)
    54  	if !nodes.hasNode(node0) || !nodes.hasNode(node1) {
    55  		t.Error("failed to locate added nodes")
    56  	}
    57  	nodes.removeNode(node0)
    58  	if nodes.hasNode(node0) || !nodes.hasNode(node1) {
    59  		t.Error("failed to remove node0", nodes)
    60  	}
    61  	nodes.removeNode(node1)
    62  	if nodes.hasNode(node0) || nodes.hasNode(node1) {
    63  		t.Error("failed to remove node1", nodes)
    64  	}
    65  }
    66  
    67  func TestNodeSetFilter(t *testing.T) {
    68  	defer leaktest.AfterTest(t)()
    69  	nodes1 := makeNodeSet(2, metric.NewGauge(metric.Metadata{Name: ""}))
    70  	node0 := roachpb.NodeID(1)
    71  	node1 := roachpb.NodeID(2)
    72  	nodes1.addNode(node0)
    73  	nodes1.addNode(node1)
    74  
    75  	nodes2 := makeNodeSet(1, metric.NewGauge(metric.Metadata{Name: ""}))
    76  	nodes2.addNode(node1)
    77  
    78  	filtered := nodes1.filter(func(a roachpb.NodeID) bool {
    79  		return !nodes2.hasNode(a)
    80  	})
    81  	if filtered.len() != 1 || filtered.hasNode(node1) || !filtered.hasNode(node0) {
    82  		t.Errorf("expected filter to leave node0: %+v", filtered)
    83  	}
    84  }
    85  
    86  func TestNodeSetAsSlice(t *testing.T) {
    87  	defer leaktest.AfterTest(t)()
    88  	nodes := makeNodeSet(2, metric.NewGauge(metric.Metadata{Name: ""}))
    89  	node0 := roachpb.NodeID(1)
    90  	node1 := roachpb.NodeID(2)
    91  	nodes.addNode(node0)
    92  	nodes.addNode(node1)
    93  
    94  	nodeArr := nodes.asSlice()
    95  	if len(nodeArr) != 2 {
    96  		t.Error("expected slice of length 2:", nodeArr)
    97  	}
    98  	if (nodeArr[0] != node0 && nodeArr[0] != node1) ||
    99  		(nodeArr[1] != node1 && nodeArr[1] != node0) {
   100  		t.Error("expected slice to contain both node0 and node1:", nodeArr)
   101  	}
   102  }