1 package org.apache.helix.manager.zk;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.helix.TestHelper.StartCMResult;
23 import org.apache.helix.integration.ZkStandAloneCMTestBaseWithPropertyServerCheck;
24 import org.testng.Assert;
25 import org.testng.annotations.Test;
26 import org.apache.zookeeper.Watcher.Event.KeeperState;
27
28 public class TestZkStateChangeListener extends ZkStandAloneCMTestBaseWithPropertyServerCheck
29 {
30 @Test
31 public void testDisconnectHistory() throws Exception
32 {
33 String controllerName = CONTROLLER_PREFIX + "_0";
34 StartCMResult controllerResult = _startCMResultMap.get(controllerName);
35 ZKHelixManager controller = (ZKHelixManager) controllerResult._manager;
36 ZkStateChangeListener listener1 = new ZkStateChangeListener(controller, 5000, 10);
37
38 for(int i = 0;i < 11; i++)
39 {
40 Thread.sleep(200);
41 listener1.handleStateChanged(KeeperState.Disconnected);
42 if(i<10)
43 {
44 Assert.assertTrue(controller.isConnected());
45 }
46 else
47 {
48 Assert.assertFalse(controller.isConnected());
49 }
50 }
51
52
53 String instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + 0);
54 ZKHelixManager manager = (ZKHelixManager) _startCMResultMap.get(instanceName)._manager;
55
56 ZkStateChangeListener listener2 = new ZkStateChangeListener(manager, 5000, 0);
57 for(int i = 0;i < 2; i++)
58 {
59 Thread.sleep(200);
60 listener2.handleStateChanged(KeeperState.Disconnected);
61 if(i < 1)
62 {
63 Assert.assertTrue(manager.isConnected());
64 }
65 else
66 {
67 Assert.assertFalse(manager.isConnected());
68 }
69 }
70
71
72 instanceName = PARTICIPANT_PREFIX + "_" + (START_PORT + 1);
73 manager = (ZKHelixManager) _startCMResultMap.get(instanceName)._manager;
74
75 ZkStateChangeListener listener3 = new ZkStateChangeListener(manager, 5000, 5);
76 for(int i = 0;i < 3; i++)
77 {
78 Thread.sleep(200);
79 listener3.handleStateChanged(KeeperState.Disconnected);
80 Assert.assertTrue(manager.isConnected());
81 }
82 Thread.sleep(5000);
83
84 for(int i = 0;i < 3; i++)
85 {
86 Thread.sleep(200);
87 listener3.handleStateChanged(KeeperState.Disconnected);
88 Assert.assertTrue(manager.isConnected());
89 }
90 for(int i = 0;i < 2; i++)
91 {
92 Thread.sleep(200);
93 listener3.handleStateChanged(KeeperState.Disconnected);
94 Assert.assertTrue(manager.isConnected());
95 }
96 listener3.handleStateChanged(KeeperState.Disconnected);
97 Assert.assertFalse(manager.isConnected());
98 }
99 }