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 }