package org.apache.hadoop.corona;
import junit.framework.TestCase;
import org.apache.hadoop.conf.Configuration;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* Test the pool manager and various names.
*/
public class TestPoolManager extends TestCase {
final static String TEST_DIR = new File(System.getProperty("test.build.data",
"build/contrib/corona/test/data")).getAbsolutePath();
private static final CoronaConf conf = new CoronaConf(new Configuration());
private static final String CONFIG_FILE_PATH = new File(TEST_DIR,
(new CoronaConf(new Configuration())).
getConfigFile()).getAbsolutePath();
final static List<ResourceType> TYPES =
Collections.unmodifiableList(
Arrays.asList(ResourceType.MAP, ResourceType.REDUCE));
@Override
public void setUp() {
// Use the same config file for general config and pools config
conf.set(CoronaConf.CONFIG_FILE_PROPERTY, CONFIG_FILE_PATH);
conf.set(CoronaConf.POOLS_CONFIG_FILE_PROPERTY, CONFIG_FILE_PATH);
}
/**
* Test various usernames without any configured pools.
*/
public void testUsername() {
CoronaConf conf = new CoronaConf(new Configuration());
ConfigManager configManager = new ConfigManager();
conf.setBoolean(CoronaConf.CONFIGURED_POOLS_ONLY, false);
SessionInfo sessionInfo = new SessionInfo();
Session session = new Session(10000, "user", sessionInfo, configManager);
PoolInfo poolInfo =
PoolGroupManager.getPoolInfo(session);
assert(poolInfo.getPoolGroupName().equals(
PoolGroupManager.DEFAULT_POOL_GROUP));
assert(poolInfo.getPoolName().equals("user"));
conf.setBoolean(CoronaConf.CONFIGURED_POOLS_ONLY, true);
poolInfo = PoolGroupManager.getPoolInfo(session);
assert(poolInfo.getPoolGroupName().equals(
PoolGroupManager.DEFAULT_POOL_GROUP));
assert(poolInfo.getPoolName().equals(PoolGroupManager.DEFAULT_POOL));
}
/**
* When using configured pools, the configured poolnames should work.
* @throws IOException
*/
public void testConfiguredPools() throws IOException {
new File(TEST_DIR).mkdir();
FileWriter out = new FileWriter(CONFIG_FILE_PATH);
out.write("<?xml version=\"1.0\"?>\n");
out.write("<configuration>\n");
out.write(" <defaultSchedulingMode>FAIR</defaultSchedulingMode>\n");
out.write(" <group name=\"groupA\">\n");
out.write(" <pool name=\"poolA\">\n");
out.write(" <schedulingMode>FIFO</schedulingMode>\n");
out.write(" </pool>");
out.write(" <pool name=\"poolB\">\n");
out.write(" <schedulingMode>FAIR</schedulingMode>\n");
out.write(" </pool>");
out.write(" </group>");
out.write("</configuration>\n");
out.close();
CoronaConf conf = new CoronaConf(new Configuration());
ConfigManager configManager = new ConfigManager(TYPES, conf);
conf.setBoolean(CoronaConf.CONFIGURED_POOLS_ONLY, false);
SessionInfo sessionInfo = new SessionInfo();
Session session = new Session(10000, "user", sessionInfo, configManager);
PoolInfo poolInfo = PoolGroupManager.getPoolInfo(session);
assert(poolInfo.getPoolGroupName().equals(
PoolGroupManager.DEFAULT_POOL_GROUP));
assert(poolInfo.getPoolName().equals("user"));
session = new Session(10000, "poolA", sessionInfo, configManager);
poolInfo = PoolGroupManager.getPoolInfo(session);
assert(poolInfo.getPoolGroupName().equals(
PoolGroupManager.DEFAULT_POOL_GROUP));
assert(poolInfo.getPoolName().equals("poolA"));
session = new Session(10000, "poolC", sessionInfo, configManager);
poolInfo = PoolGroupManager.getPoolInfo(session);
assert(poolInfo.getPoolGroupName().equals(
PoolGroupManager.DEFAULT_POOL_GROUP));
assert(poolInfo.getPoolName().equals("poolC"));
conf.setBoolean(CoronaConf.CONFIGURED_POOLS_ONLY, true);
session = new Session(10000, "user", sessionInfo, configManager);
assert(poolInfo.getPoolGroupName().equals(
PoolGroupManager.DEFAULT_POOL_GROUP));
assert(poolInfo.getPoolName().equals("user"));
session = new Session(10000, "poolA", sessionInfo, configManager);
poolInfo = PoolGroupManager.getPoolInfo(session);
assert(poolInfo.getPoolGroupName().equals(
PoolGroupManager.DEFAULT_POOL_GROUP));
assert(poolInfo.getPoolName().equals("poolA"));
session = new Session(10000, "poolC", sessionInfo, configManager);
poolInfo = PoolGroupManager.getPoolInfo(session);
assert(poolInfo.getPoolGroupName().equals(
PoolGroupManager.DEFAULT_POOL_GROUP));
assert(poolInfo.getPoolName().equals(PoolGroupManager.DEFAULT_POOL));
}
}