1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.hadoop.hbase.master;
21
22
23 import org.apache.hadoop.hbase.MediumTests;
24 import org.apache.hadoop.hbase.ServerName;
25 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
26 import org.apache.hadoop.hbase.util.ManualEnvironmentEdge;
27 import org.apache.hadoop.hbase.util.Pair;
28 import org.junit.Assert;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.junit.experimental.categories.Category;
32
33 import java.util.ArrayList;
34 import java.util.List;
35
36 @Category(MediumTests.class)
37 public class TestClusterStatusPublisher {
38 private ManualEnvironmentEdge mee = new ManualEnvironmentEdge();
39
40 @Before
41 public void before() {
42 mee.setValue(0);
43 EnvironmentEdgeManager.injectEdge(mee);
44 }
45
46 @Test
47 public void testEmpty() {
48 ClusterStatusPublisher csp = new ClusterStatusPublisher() {
49 @Override
50 protected List<Pair<ServerName, Long>> getDeadServers(long since) {
51 return new ArrayList<Pair<ServerName, Long>>();
52 }
53 };
54
55 Assert.assertTrue(csp.generateDeadServersListToSend().isEmpty());
56 }
57
58 @Test
59 public void testMaxSend() {
60 ClusterStatusPublisher csp = new ClusterStatusPublisher() {
61 @Override
62 protected List<Pair<ServerName, Long>> getDeadServers(long since) {
63 List<Pair<ServerName, Long>> res = new ArrayList<Pair<ServerName, Long>>();
64 switch ((int) EnvironmentEdgeManager.currentTimeMillis()) {
65 case 2:
66 res.add(new Pair<ServerName, Long>(ServerName.valueOf("hn", 10, 10), 1L));
67 break;
68 case 1000:
69 break;
70 }
71
72 return res;
73 }
74 };
75
76 mee.setValue(2);
77 for (int i = 0; i < ClusterStatusPublisher.NB_SEND; i++) {
78 Assert.assertEquals("i=" + i, 1, csp.generateDeadServersListToSend().size());
79 }
80 mee.setValue(1000);
81 Assert.assertTrue(csp.generateDeadServersListToSend().isEmpty());
82 }
83
84 @Test
85 public void testOrder() {
86 ClusterStatusPublisher csp = new ClusterStatusPublisher() {
87 @Override
88 protected List<Pair<ServerName, Long>> getDeadServers(long since) {
89 List<Pair<ServerName, Long>> res = new ArrayList<Pair<ServerName, Long>>();
90 for (int i = 0; i < 25; i++) {
91 res.add(new Pair<ServerName, Long>(ServerName.valueOf("hn" + i, 10, 10), 20L));
92 }
93
94 return res;
95 }
96 };
97
98
99 mee.setValue(3);
100 List<ServerName> allSNS = csp.generateDeadServersListToSend();
101
102 Assert.assertEquals(10, ClusterStatusPublisher.MAX_SERVER_PER_MESSAGE);
103 Assert.assertEquals(10, allSNS.size());
104
105 List<ServerName> nextMes = csp.generateDeadServersListToSend();
106 Assert.assertEquals(10, nextMes.size());
107 for (ServerName sn : nextMes) {
108 if (!allSNS.contains(sn)) {
109 allSNS.add(sn);
110 }
111 }
112 Assert.assertEquals(20, allSNS.size());
113
114 nextMes = csp.generateDeadServersListToSend();
115 Assert.assertEquals(10, nextMes.size());
116 for (ServerName sn : nextMes) {
117 if (!allSNS.contains(sn)) {
118 allSNS.add(sn);
119 }
120 }
121 Assert.assertEquals(25, allSNS.size());
122
123 nextMes = csp.generateDeadServersListToSend();
124 Assert.assertEquals(10, nextMes.size());
125 for (ServerName sn : nextMes) {
126 if (!allSNS.contains(sn)) {
127 allSNS.add(sn);
128 }
129 }
130 Assert.assertEquals(25, allSNS.size());
131 }
132 }