/** 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 org.apache.hadoop.mapred; import java.io.BufferedWriter; import java.io.IOException; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.util.Properties; import junit.framework.TestCase; import org.apache.hadoop.fs.Path; public class TestCapacitySchedulerConf extends TestCase { private static String testDataDir = System.getProperty("test.build.data"); private static String testConfFile; //private Map<String, String> defaultProperties; private CapacitySchedulerConf testConf; private PrintWriter writer; static { if (testDataDir == null) { testDataDir = "."; } else { new File(testDataDir).mkdirs(); } testConfFile = new File(testDataDir, "test-conf.xml").getAbsolutePath(); } public TestCapacitySchedulerConf() { } public void setUp() throws IOException { openFile(); } public void tearDown() throws IOException { File confFile = new File(testConfFile); if (confFile.exists()) { confFile.delete(); } } public void testInitializationPollerProperties() throws Exception { /* * Test case to check properties of poller when no configuration file * is present. */ testConf = new CapacitySchedulerConf(); long pollingInterval = testConf.getSleepInterval(); int maxWorker = testConf.getMaxWorkerThreads(); assertTrue("Invalid polling interval ",pollingInterval > 0); assertTrue("Invalid working thread pool size" , maxWorker > 0); //test case for custom values configured for initialization //poller. openFile(); startConfig(); writeProperty("mapred.capacity-scheduler.init-worker-threads", "1"); writeProperty("mapred.capacity-scheduler.init-poll-interval", "1"); endConfig(); testConf = new CapacitySchedulerConf(new Path(testConfFile)); pollingInterval = testConf.getSleepInterval(); maxWorker = testConf.getMaxWorkerThreads(); assertEquals("Invalid polling interval ",pollingInterval ,1); assertEquals("Invalid working thread pool size" , maxWorker, 1); //Test case for invalid values configured for initialization //poller openFile(); startConfig(); writeProperty("mapred.capacity-scheduler.init-worker-threads", "0"); writeProperty("mapred.capacity-scheduler.init-poll-interval", "0"); endConfig(); testConf = new CapacitySchedulerConf(new Path(testConfFile)); try { pollingInterval = testConf.getSleepInterval(); fail("Polling interval configured is illegal"); } catch (IllegalArgumentException e) {} try { maxWorker = testConf.getMaxWorkerThreads(); fail("Max worker thread configured is illegal"); } catch (IllegalArgumentException e) {} } private void openFile() throws IOException { if (testDataDir != null) { File f = new File(testDataDir); f.mkdirs(); } FileWriter fw = new FileWriter(testConfFile); BufferedWriter bw = new BufferedWriter(fw); writer = new PrintWriter(bw); } private void startConfig() { writer.println("<?xml version=\"1.0\"?>"); writer.println("<configuration>"); } private void writeProperty(String name, String value) { writer.println("<property>"); writer.println("<name> " + name + "</name>"); writer.println("<value>"+ value+"</value>"); writer.println("</property>"); } private void endConfig() { writer.println("</configuration>"); writer.close(); } public void testConfigurationValuesConversion() throws IOException { Properties prp = new Properties(); prp.setProperty("capacity","10"); prp.setProperty("maximum-capacity","20.5"); prp.setProperty("supports-priority","false"); prp.setProperty("minimum-user-limit-percent","23"); CapacitySchedulerConf conf = new CapacitySchedulerConf(); conf.setProperties("default",prp); assertTrue(conf.getCapacity("default") == 10f); assertTrue(conf.getMaxCapacity("default") == 20.5f); assertTrue(conf.isPrioritySupported("default") == false); assertTrue(conf.getMinimumUserLimitPercent("default")==23); //check for inproper stuff prp.setProperty("capacity","h"); prp.setProperty("maximum-capacity","20"); //This is because h is invalid value. assertTrue(conf.getCapacity("default") == -1); assertFalse(conf.getMaxCapacity("default") != 20); } }