/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.jstorm.cluster; import backtype.storm.LocalCluster; import backtype.storm.LocalClusterMap; import backtype.storm.LocalUtils; import com.alibaba.jstorm.task.error.ErrorConstants; import com.alibaba.jstorm.task.error.TaskError; import com.alibaba.jstorm.utils.TimeUtils; import com.alibaba.jstorm.zk.Factory; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.List; import java.util.Map; import static org.junit.Assert.*; /** * @author Jark (wuchong.wc@alibaba-inc.com) */ public class StormZkClusterStateTest { LocalClusterMap state; StormZkClusterState stormClusterState; Factory zookeeper; @Before public void setUp() throws Exception { zookeeper = LocalUtils.startLocalZookeeper(LocalUtils.getTmpDir()); Map conf = LocalUtils.getLocalConf(zookeeper.getZooKeeperServer().getClientPort()); stormClusterState = (StormZkClusterState) Cluster.mk_storm_cluster_state(conf); } @After public void tearDown() throws Exception { // state.clean(); zookeeper.closeAll(); } @Test public void testReport_task_error() throws Exception { String topology_id = "topology_id_1"; int task_id = 101; TaskError expected = new TaskError("task is dead", ErrorConstants.ERROR, ErrorConstants.CODE_TASK_DEAD, TimeUtils.current_time_secs()); stormClusterState.report_task_error(topology_id, task_id, "task is dead", ErrorConstants.ERROR, ErrorConstants.CODE_TASK_DEAD); String path = Cluster.taskerror_path(topology_id, task_id); Map report_time = stormClusterState.topo_lastErr_time(topology_id); List<String> err_time = stormClusterState.task_error_time(topology_id, task_id); for (String time : err_time) { String errPath = path + Cluster.ZK_SEPERATOR + time; Object obj = stormClusterState.getObject(errPath, false); assertEquals(expected, obj); } stormClusterState.remove_task_error(topology_id, task_id); err_time = stormClusterState.task_error_time(topology_id, task_id); assertEquals(0, err_time.size()); } }