/*
*
* Copyright (c) void.fm
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list
* of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice, this
* list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
*
* Neither the name void.fm nor the names of its contributors may be
* used to endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package etm.core.configuration;
import etm.core.aggregation.Aggregator;
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 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 Xml10EtmConfiguratorTest 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.0//EN\" \"http://jetm.void.fm/dtd/jetm_config_1_0.dtd\">\n" +
"<jetm-config>\n" +
" <monitor-type>flat</monitor-type>\n" +
"</jetm-config>";
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 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());
}
private URL locateResource(String subPath) throws Exception {
URL resourcePath = getClass().getClassLoader().getResource("etm/core/configuration/files/valid_1_0");
if (resourcePath != null) {
return new URL(resourcePath.toURI().toURL() + "/" + subPath);
} else {
throw new FileNotFoundException(subPath);
}
}
}