/* * Copyright (c) 2013 Yahoo! Inc. All Rights Reserved. * * Licensed 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. See accompanying LICENSE file. */ package com.yahoo.storm.yarn; import java.io.IOException; import java.util.Map; import junit.framework.Assert; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.util.Records; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.yahoo.storm.yarn.generated.StormMaster; public class TestStormMaster { private static final Log LOG = LogFactory.getLog(TestStormMaster.class); private static EmbeddedZKServer zkServer; private static MasterServer server = null; private static MasterClient client = null; private static TestConfig testConf = new TestConfig(); @SuppressWarnings({ "unchecked", "rawtypes" }) @BeforeClass public static void setup() throws InterruptedException, IOException { //start embedded ZK server zkServer = new EmbeddedZKServer(); zkServer.start(); //simple configuration final Map storm_conf = Config.readStormConfig("src/main/resources/master_defaults.yaml"); storm_conf.put(backtype.storm.Config.STORM_ZOOKEEPER_PORT, zkServer.port()); String storm_home = testConf.stormHomePath(); if (storm_home == null) { throw new RuntimeException("Storm home was not found." + " Make sure to include storm in the PATH."); } LOG.info("Will be using storm found on PATH at "+storm_home); final YarnConfiguration hadoopConf = new YarnConfiguration(); ApplicationAttemptId appAttemptId = Records.newRecord(ApplicationAttemptId.class); StormAMRMClient client = new StormAMRMClient(appAttemptId, storm_conf, hadoopConf); LOG.info("Storm server attaching to port: "+ storm_conf.get(Config.MASTER_THRIFT_PORT)); //launch server server = new MasterServer(storm_conf, client); new Thread(new Runnable() { @Override public void run() { try { server.serve(); } catch (Exception e) { LOG.error(e); } } }).start(); while (!server.isServing()) Thread.sleep(10); LOG.info("Storm server started at port: "+ storm_conf.get(Config.MASTER_THRIFT_PORT)); //launch client TestStormMaster.client = MasterClient.getConfiguredClient(storm_conf); } @AfterClass public static void tearDown() throws IOException { //stop client if (client != null) { client.close(); client = null; } //stop server if (server != null) { server.stop(); server = null; } //remove configuration file testConf.cleanup(); //shutdown Zookeeper server if (zkServer != null) { zkServer.stop(); zkServer = null; } } @Test public void test1() throws Exception { StormMaster.Client master_client = client.getClient(); LOG.info("getStormConf"); Assert.assertNotNull(master_client.getStormConf()); LOG.info("addSupervisors(1)"); master_client.addSupervisors(1); } }