1 package org.apache.helix;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Date;
23
24 import org.apache.helix.HelixConstants;
25 import org.apache.helix.HelixDataAccessor;
26 import org.apache.helix.NotificationContext;
27 import org.apache.helix.Mocks.MockManager;
28 import org.apache.helix.Mocks.MockStateModel;
29 import org.apache.helix.Mocks.MockStateModelAnnotated;
30 import org.apache.helix.PropertyKey.Builder;
31 import org.apache.helix.messaging.handling.HelixStateTransitionHandler;
32 import org.apache.helix.messaging.handling.HelixTask;
33 import org.apache.helix.messaging.handling.HelixTaskExecutor;
34 import org.apache.helix.model.CurrentState;
35 import org.apache.helix.model.Message;
36 import org.apache.helix.model.StateModelDefinition;
37 import org.apache.helix.model.Message.MessageType;
38 import org.apache.helix.tools.StateModelConfigGenerator;
39 import org.testng.AssertJUnit;
40 import org.testng.annotations.Test;
41
42
43 public class TestHelixTaskHandler
44 {
45 @Test()
46 public void testInvocation() throws Exception
47 {
48 HelixTaskExecutor executor = new HelixTaskExecutor();
49 System.out.println("START TestCMTaskHandler.testInvocation()");
50 Message message = new Message(MessageType.STATE_TRANSITION, "Some unique id");
51
52 message.setSrcName("cm-instance-0");
53 message.setTgtSessionId("1234");
54 message.setFromState("Offline");
55 message.setToState("Slave");
56 message.setPartitionName("TestDB_0");
57 message.setMsgId("Some unique message id");
58 message.setResourceName("TestDB");
59 message.setTgtName("localhost");
60 message.setStateModelDef("MasterSlave");
61 message.setStateModelFactoryName(HelixConstants.DEFAULT_STATE_MODEL_FACTORY);
62 MockStateModel stateModel = new MockStateModel();
63 NotificationContext context;
64 MockManager manager = new MockManager("clusterName");
65
66 HelixDataAccessor accessor = manager.getHelixDataAccessor();
67 StateModelConfigGenerator generator = new StateModelConfigGenerator();
68 StateModelDefinition stateModelDef = new StateModelDefinition(
69 generator.generateConfigForMasterSlave());
70 Builder keyBuilder = accessor.keyBuilder();
71 accessor.setProperty(keyBuilder.stateModelDef("MasterSlave"), stateModelDef);
72
73 context = new NotificationContext(manager);
74 CurrentState currentStateDelta = new CurrentState("TestDB");
75 currentStateDelta.setState("TestDB_0", "OFFLINE");
76
77 HelixStateTransitionHandler stHandler = new HelixStateTransitionHandler(stateModel, message,
78 context, currentStateDelta);
79 HelixTask handler;
80 handler = new HelixTask(message, context, stHandler, executor);
81 handler.call();
82 AssertJUnit.assertTrue(stateModel.stateModelInvoked);
83 System.out.println("END TestCMTaskHandler.testInvocation() at "
84 + new Date(System.currentTimeMillis()));
85 }
86
87 @Test()
88 public void testInvocationAnnotated() throws Exception
89 {
90 System.out.println("START TestCMTaskHandler.testInvocationAnnotated() at "
91 + new Date(System.currentTimeMillis()));
92 HelixTaskExecutor executor = new HelixTaskExecutor();
93 Message message = new Message(MessageType.STATE_TRANSITION, "Some unique id");
94 message.setSrcName("cm-instance-0");
95 message.setTgtSessionId("1234");
96 message.setFromState("Offline");
97 message.setToState("Slave");
98 message.setPartitionName("TestDB_0");
99 message.setMsgId("Some unique message id");
100 message.setResourceName("TestDB");
101 message.setTgtName("localhost");
102 message.setStateModelDef("MasterSlave");
103 message.setStateModelFactoryName(HelixConstants.DEFAULT_STATE_MODEL_FACTORY);
104 MockStateModelAnnotated stateModel = new MockStateModelAnnotated();
105 NotificationContext context;
106
107 MockManager manager = new MockManager("clusterName");
108
109 HelixDataAccessor accessor = manager.getHelixDataAccessor();
110
111 StateModelConfigGenerator generator = new StateModelConfigGenerator();
112 StateModelDefinition stateModelDef = new StateModelDefinition(
113 generator.generateConfigForMasterSlave());
114
115 Builder keyBuilder = accessor.keyBuilder();
116 accessor.setProperty(keyBuilder.stateModelDef("MasterSlave"), stateModelDef);
117
118
119 context = new NotificationContext(manager);
120
121 CurrentState currentStateDelta = new CurrentState("TestDB");
122 currentStateDelta.setState("TestDB_0", "OFFLINE");
123
124 HelixStateTransitionHandler stHandler = new HelixStateTransitionHandler(stateModel, message,
125 context, currentStateDelta);
126
127 HelixTask handler = new HelixTask(message, context, stHandler, executor);
128 handler.call();
129 AssertJUnit.assertTrue(stateModel.stateModelInvoked);
130 System.out.println("END TestCMTaskHandler.testInvocationAnnotated() at "
131 + new Date(System.currentTimeMillis()));
132 }
133
134 }