package etm.core.configuration;
import etm.core.aggregation.Aggregator;
import etm.core.aggregation.BufferedThresholdAggregator;
import etm.core.aggregation.BufferedTimedAggregator;
import etm.core.aggregation.persistence.PersistentRootAggregator;
import etm.core.jmx.EtmMonitorJmxPlugin;
import etm.core.metadata.AggregatorMetaData;
import etm.core.metadata.PluginMetaData;
import etm.core.monitor.EtmMonitor;
import etm.core.monitor.FlatMonitor;
import etm.core.monitor.NestedMonitor;
import etm.core.plugin.EtmPlugin;
import etm.core.timer.DefaultTimer;
import junit.framework.TestCase;
import etm.core.configuration.mockup.TestAggregator;
import etm.core.configuration.mockup.TestMonitor;
import etm.core.configuration.mockup.TestPlugin;
import etm.core.configuration.mockup.TestTimer;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import java.io.FileNotFoundException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Testing XML based configuration.
*
* @author void.fm
* @version $Revision$
*/
public class Xml12EtmConfiguratorTest extends TestCase {
public void testConfigFromString() {
String config = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE jetm-config PUBLIC \"-// void.fm //DTD JETM Config 1.2//EN\" \"http://jetm.void.fm/dtd/jetm_config_1_2.dtd\">\n" +
"<jetm-config type=\"flat\" />\n";
EtmManager.reset();
XmlEtmConfigurator.configure(config);
EtmMonitor etmMonitor = EtmManager.getEtmMonitor();
assertEquals(FlatMonitor.class, etmMonitor.getClass());
}
public void testMonitorConfig() throws Exception {
Object[][] configurations = new Object[][]{
new Object[]{
"flat-type-config.xml", FlatMonitor.class
},
new Object[]{
"nested-type-config.xml", NestedMonitor.class
},
new Object[]{
"monitor-class-config.xml", TestMonitor.class
}
};
for (int i = 0; i < configurations.length; i++) {
URL url = locateResource((String) configurations[i][0]);
EtmManager.reset();
XmlEtmConfigurator.configure(url);
EtmMonitor etmMonitor = EtmManager.getEtmMonitor();
assertEquals(configurations[i][1], etmMonitor.getClass());
}
}
public void testTimerConfig() throws Exception {
Object[][] configurations = new Object[][]{
new Object[]{
"default-timer-config.xml", DefaultTimer.class
},
new Object[]{
"timer-class-config.xml", TestTimer.class
}
};
for (int i = 0; i < configurations.length; i++) {
URL url = locateResource((String) configurations[i][0]);
EtmManager.reset();
XmlEtmConfigurator.configure(url);
EtmMonitor etmMonitor = EtmManager.getEtmMonitor();
assertEquals(configurations[i][1], ((TestMonitor) etmMonitor).getExecutionTimer().getClass());
}
}
public void testIntervalBuffer() throws Exception {
URL url = locateResource("interval-buffer.xml");
EtmManager.reset();
XmlEtmConfigurator.configure(url);
EtmMonitor etmMonitor = EtmManager.getEtmMonitor();
AggregatorMetaData metaData = etmMonitor.getMetaData().getAggregatorMetaData();
assertEquals(BufferedTimedAggregator.class, metaData.getImplementationClass());
}
public void testAggregatorConfig() throws Exception {
URL url = locateResource("aggregator-config.xml");
EtmManager.reset();
XmlEtmConfigurator.configure(url);
EtmMonitor etmMonitor = EtmManager.getEtmMonitor();
Aggregator aggregator = ((TestMonitor) etmMonitor).getAggregator();
assertEquals(TestAggregator.class, aggregator.getClass());
TestAggregator testAggregator = (TestAggregator) aggregator;
assertEquals(true, testAggregator.isBooleanTrue());
assertEquals(false, testAggregator.isBooleanFalse());
assertEquals(12, testAggregator.getIntValue());
assertEquals(12124234324234L, testAggregator.getLongValue());
assertEquals("testString", testAggregator.getStringValue());
assertEquals(HashMap.class, testAggregator.getClazzValue());
Map map = testAggregator.getMapValue();
assertNotNull(map);
assertEquals(3, map.size());
assertEquals(map.get("key1"), "value1");
assertEquals(map.get("key2"), "value2");
assertEquals(map.get("key3"), "value3");
List list = testAggregator.getListValue();
assertNotNull(list);
assertEquals(2, list.size());
assertEquals(list.get(0), "value1");
assertEquals(list.get(1), "value2");
}
public void testPluginConfig() throws Exception {
URL url = locateResource("plugin-config.xml");
EtmManager.reset();
XmlEtmConfigurator.configure(url);
EtmMonitor etmMonitor = EtmManager.getEtmMonitor();
List plugins = ((TestMonitor) etmMonitor).getPlugins();
assertTrue(!plugins.isEmpty());
EtmPlugin plugin = (EtmPlugin) plugins.get(0);
assertEquals(TestPlugin.class, plugin.getClass());
TestPlugin testPlugin = (TestPlugin) plugin;
assertEquals(true, testPlugin.isBooleanTrue());
assertEquals(false, testPlugin.isBooleanFalse());
assertEquals(12, testPlugin.getIntValue());
assertEquals(12124234324234L, testPlugin.getLongValue());
assertEquals("testString", testPlugin.getStringValue());
assertEquals(HashMap.class, testPlugin.getClazzValue());
Map map = testPlugin.getMapValue();
assertNotNull(map);
assertEquals(3, map.size());
assertEquals(map.get("key1"), "value1");
assertEquals(map.get("key2"), "value2");
assertEquals(map.get("key3"), "value3");
List list = testPlugin.getListValue();
assertNotNull(list);
assertEquals(2, list.size());
assertEquals(list.get(0), "value1");
assertEquals(list.get(1), "value2");
etmMonitor.start();
assertTrue(testPlugin.isStarted());
etmMonitor.stop();
assertFalse(testPlugin.isStarted());
}
public void testAutostartConfig() throws Exception {
URL url = locateResource("autostart-on-config.xml");
EtmManager.reset();
XmlEtmConfigurator.configure(url);
EtmMonitor etmMonitor = EtmManager.getEtmMonitor();
assertTrue(etmMonitor.isStarted());
assertTrue(etmMonitor.isCollecting());
etmMonitor.stop();
url = locateResource("autostart-off-config.xml");
EtmManager.reset();
XmlEtmConfigurator.configure(url);
etmMonitor = EtmManager.getEtmMonitor();
assertFalse(etmMonitor.isStarted());
assertTrue(etmMonitor.isCollecting());
}
public void testFeatures() throws Exception {
MBeanServer server = MBeanServerFactory.createMBeanServer();
try {
URL url = locateResource("features.xml");
EtmManager.reset();
XmlEtmConfigurator.configure(url);
EtmMonitor etmMonitor = EtmManager.getEtmMonitor();
etmMonitor.start();
AggregatorMetaData bufferMetaData = etmMonitor.getMetaData().getAggregatorMetaData();
assertEquals(BufferedThresholdAggregator.class, bufferMetaData.getImplementationClass());
assertNotNull(bufferMetaData.getNestedMetaData());
AggregatorMetaData rootMetaData = bufferMetaData.getNestedMetaData();
assertEquals(PersistentRootAggregator.class, rootMetaData.getImplementationClass());
List list = etmMonitor.getMetaData().getPluginMetaData();
assertEquals(1, list.size());
PluginMetaData pluginMetaData = (PluginMetaData) list.get(0);
assertEquals(EtmMonitorJmxPlugin.class, pluginMetaData.getImplementationClass());
Map properties = pluginMetaData.getProperties();
assertEquals("test:service=Foo", properties.get("monitorObjectName"));
assertEquals("performance", properties.get("measurementDomain"));
assertEquals("true", properties.get("overwrite"));
etmMonitor.stop();
} finally {
MBeanServerFactory.releaseMBeanServer(server);
}
}
public void testCustomBackend() throws Exception {
URL url = locateResource("features-custom-persistence.xml");
EtmManager.reset();
XmlEtmConfigurator.configure(url);
TestMonitor etmMonitor = (TestMonitor) EtmManager.getEtmMonitor();
etmMonitor.start();
assertEquals(PersistentRootAggregator.class, etmMonitor.getAggregator().getMetaData().getNestedMetaData().getImplementationClass());
etmMonitor.stop();
}
private URL locateResource(String subPath) throws Exception {
URL resourcePath = getClass().getClassLoader().getResource("etm/core/configuration/files/valid_1_2");
if (resourcePath != null) {
return new URL(resourcePath.toURI().toURL() + "/" + subPath);
} else {
throw new FileNotFoundException(subPath);
}
}
}