View Javadoc

1   package org.apache.helix;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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  //    DataAccessor accessor = manager.getDataAccessor();
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 //    DataAccessor accessor = manager.getDataAccessor();
109     HelixDataAccessor accessor = manager.getHelixDataAccessor();
110 
111     StateModelConfigGenerator generator = new StateModelConfigGenerator();
112     StateModelDefinition stateModelDef = new StateModelDefinition(
113         generator.generateConfigForMasterSlave());
114 //    accessor.setProperty(PropertyType.STATEMODELDEFS, stateModelDef, "MasterSlave");
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 }