package alma.acs.container;
import java.util.logging.Logger;
import junit.framework.TestCase;
import org.omg.PortableServer.POA;
import alma.JavaContainerError.wrappers.AcsJContainerEx;
import alma.acs.container.corba.AcsCorba;
import alma.acs.logging.AcsLogger;
import alma.acs.logging.ClientLogManager;
/**
* JUnit test for {@link alma.acs.container.ComponentMap}.
* <p>
* Tests this class in isolation using dummy implementations of other classes;
* no ACS runtime environment needed.
*
* @author hsommer
*/
public class ComponentMapTest extends TestCase {
private ComponentMap componentMap;
private AcsLogger logger;
protected void setUp() throws Exception {
logger = ClientLogManager.getAcsLogManager().getLoggerForApplication(getName(), true);
componentMap = new ComponentMap(logger);
DummyComponentAdapter.resetIndex();
DummyComponentAdapter.setDummyAcsCorba(new DummyAcsCorba(logger));
}
public void testInsertionOrderOutput() throws Exception {
final int numCompAdapters = 21;
for (int i = 0; i < numCompAdapters; i++) {
DummyComponentAdapter dummyComponentAdapter = new DummyComponentAdapter(logger);
componentMap.put(dummyComponentAdapter.getHandle(), dummyComponentAdapter);
}
// now check the order as it comes out of the map (handle == index, by design of DummyComponentAdapter)
ComponentAdapter[] outCompAdapters = componentMap.getAllComponentAdapters();
int[] outHandles = componentMap.getAllHandles();
assertEquals(numCompAdapters, outCompAdapters.length);
for (int i = 0; i < outCompAdapters.length; i++) {
assertEquals(i, outCompAdapters[i].getHandle());
assertEquals(i, outHandles[i]);
}
}
public void testSorting() throws Exception {
final int numCompAdapters = 13;
for (int i = 0; i < numCompAdapters; i++) {
DummyComponentAdapter dummyComponentAdapter = new DummyComponentAdapter(logger);
componentMap.put(dummyComponentAdapter.getHandle(), dummyComponentAdapter);
}
// now sort according to a handle sequence that manager may provide
int[] sortedHandles = new int[] {11, 2, 7, 3, 10, 12, 1, 8, 5, 4, 6, 0, 9};
componentMap.sort(sortedHandles);
// now check the order as it comes out of the map (handle == index, by design of DummyComponentAdapter)
ComponentAdapter[] outCompAdapters = componentMap.getAllComponentAdapters();
int[] outHandles = componentMap.getAllHandles();
assertEquals(numCompAdapters, outCompAdapters.length);
assertEquals(numCompAdapters, outHandles.length);
for (int i = 0; i < sortedHandles.length; i++) {
assertEquals(sortedHandles[i], outCompAdapters[i].getHandle());
assertEquals(sortedHandles[i], outHandles[i]);
}
}
private static class DummyComponentAdapter extends ComponentAdapter {
static int index_count = 0;
static DummyAcsCorba dummyAcsCorba;
DummyComponentAdapter(AcsLogger logger) throws Exception {
super("DummyComponent"+index_count, "DummyComponentType"+index_count, "dummycode",
index_count, "dummyContainerName", null, null, null, null, logger, dummyAcsCorba);
index_count++;
}
static void setDummyAcsCorba(DummyAcsCorba dummyAcsCorba) {
DummyComponentAdapter.dummyAcsCorba = dummyAcsCorba;
}
static void resetIndex() {
index_count = 0;
}
}
private static class DummyAcsCorba extends AcsCorba {
public DummyAcsCorba(AcsLogger logger) {
super(logger);
}
public POA createPOAForComponent(String compName) throws AcsJContainerEx {
return null;
}
}
}