package com.orbitz.monitoring.lib;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import com.orbitz.monitoring.api.MonitoringLevel;
import com.orbitz.monitoring.api.engine.StackBasedInheritableStrategy;
import com.orbitz.monitoring.api.monitor.EventMonitor;
import com.orbitz.monitoring.api.monitor.TransactionMonitor;
import com.orbitz.monitoring.lib.renderer.XmlMonitorRenderer;
/**
* Tests {@link BaseMonitoringEngineManager}
* @author Matt O'Keefe
*/
public class BaseMonitoringEngineManagerTest extends TestCase {
BaseMonitoringEngineManager manager;
@Override
protected void setUp() throws Exception {
manager = new BaseMonitoringEngineManager();
manager.startup();
manager.reload();
}
@Override
protected void tearDown() throws Exception {
manager.shutdown();
}
/**
* @see BaseMonitoringEngineManager#startup()
*/
public void testEPMLevels() {
List<String> attributeList = new ArrayList<String>();
attributeList.add("name");
XmlMonitorRenderer renderer = new XmlMonitorRenderer(attributeList);
renderer.setPrettyPrint(true);
{
TransactionMonitor txn = new TransactionMonitor("foo");
EventMonitor m1 = new EventMonitor("bar");
m1.fire();
EventMonitor m2 = new EventMonitor("baz");
m2.fire();
txn.done();
assertEquals("<TransactionMonitor name=\"foo\">\n" + " <EventMonitor name=\"bar\"/>\n"
+ " <EventMonitor name=\"baz\"/>\n" + "</TransactionMonitor>",
renderer.renderMonitor(txn));
}
StackBasedInheritableStrategy.class.cast(
manager.getInheritableStrategy()).setEventPatternLevel(
MonitoringLevel.ESSENTIAL);
{
TransactionMonitor txn = new TransactionMonitor("foo", MonitoringLevel.ESSENTIAL);
EventMonitor m1 = new EventMonitor("bar");
m1.fire();
EventMonitor m2 = new EventMonitor("baz");
m2.fire();
txn.done();
assertEquals("<TransactionMonitor name=\"foo\"/>", renderer.renderMonitor(txn));
}
}
/**
* @see BaseMonitoringEngineManager#startup()
*/
public void testMaliciousRuntimeControls() {
int i = 0;
try {
while (true) {
// prefixing the name with "zz" so it won't interfere with other level tests
manager.updateLevelForMonitor("zz" + Integer.toHexString(i++), "DEBUG");
}
}
catch (RuntimeException e) {
// expected
}
catch (OutOfMemoryError e) {
fail("RuntimeException should have been thrown");
}
}
}