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 org.apache.helix.Mocks.MockHelixTaskExecutor;
23 import org.apache.helix.Mocks.MockManager;
24 import org.apache.helix.Mocks.MockStateModel;
25 import org.apache.helix.PropertyKey.Builder;
26 import org.apache.helix.messaging.handling.AsyncCallbackService;
27 import org.apache.helix.messaging.handling.HelixStateTransitionHandler;
28 import org.apache.helix.messaging.handling.HelixTask;
29 import org.apache.helix.model.CurrentState;
30 import org.apache.helix.model.Message;
31 import org.apache.helix.model.Message.MessageType;
32 import org.apache.helix.model.StateModelDefinition;
33 import org.apache.helix.tools.StateModelConfigGenerator;
34 import org.testng.AssertJUnit;
35 import org.testng.annotations.Test;
36
37
38 public class TestHelixTaskExecutor
39 {
40
41 @Test()
42 public void testCMTaskExecutor() throws Exception
43 {
44 System.out.println("START TestCMTaskExecutor");
45 String msgId = "TestMessageId";
46 Message message = new Message(MessageType.TASK_REPLY, msgId);
47
48 message.setMsgId(msgId);
49 message.setSrcName("cm-instance-0");
50 message.setTgtName("cm-instance-1");
51 message.setTgtSessionId("1234");
52 message.setFromState("Offline");
53 message.setToState("Slave");
54 message.setPartitionName("TestDB_0");
55 message.setResourceName("TestDB");
56 message.setStateModelDef("MasterSlave");
57
58 MockManager manager = new MockManager("clusterName");
59
60 HelixDataAccessor accessor = manager.getHelixDataAccessor();
61 StateModelConfigGenerator generator = new StateModelConfigGenerator();
62 StateModelDefinition stateModelDef =
63 new StateModelDefinition(generator.generateConfigForMasterSlave());
64 Builder keyBuilder = accessor.keyBuilder();
65 accessor.setProperty(keyBuilder.stateModelDef("MasterSlave"), stateModelDef);
66
67 MockHelixTaskExecutor executor = new MockHelixTaskExecutor();
68 MockStateModel stateModel = new MockStateModel();
69 NotificationContext context;
70 executor.registerMessageHandlerFactory(MessageType.TASK_REPLY.toString(),
71 new AsyncCallbackService());
72
73 context = new NotificationContext(manager);
74 CurrentState currentStateDelta = new CurrentState("TestDB");
75 currentStateDelta.setState("TestDB_0", "OFFLINE");
76 HelixStateTransitionHandler handler =
77 new HelixStateTransitionHandler(stateModel,
78 message,
79 context,
80 currentStateDelta);
81
82 HelixTask task = new HelixTask(message, context, handler, executor);
83 executor.scheduleTask(task);
84 for (int i = 0; i < 10; i++) {
85 if (!executor.isDone(task.getTaskId())) {
86 Thread.sleep(500);
87 }
88 }
89 AssertJUnit.assertTrue(stateModel.stateModelInvoked);
90 System.out.println("END TestCMTaskExecutor");
91 }
92
93 }