package com.orbitz.monitoring.test;
import com.orbitz.monitoring.api.CompositeMonitor;
import com.orbitz.monitoring.api.Monitor;
import com.orbitz.monitoring.api.monitor.TransactionMonitor;
import com.orbitz.monitoring.api.monitor.serializable.SerializableCompositeMonitor;
import com.orbitz.monitoring.api.monitor.serializable.SerializableMonitor;
import java.util.Iterator;
import java.util.Map;
/**
* Used to test implementations of {@link CompositeMonitor}
* @author Doug Barth
*/
public abstract class CompositeMonitorTestBase extends MonitorTestBase {
private static final String INHERITABLE = "inheritable";
private static final String NOT_INHERITABLE = "notInheritable";
/**
* @see CompositeMonitor#getInheritableAttributes()
*/
public void testInheritableObjectAttributes() {
CompositeMonitor monitor = createCompositeMonitor("test");
monitor.setInheritable(INHERITABLE, new Object());
monitor.set(NOT_INHERITABLE, new Object());
assertInheritableBehavior(monitor);
}
/**
* @see CompositeMonitor#getInheritableAttributes()
*/
public void testInheritableShortAttributes() {
CompositeMonitor monitor = createCompositeMonitor("test");
monitor.setInheritable(INHERITABLE, (short)3);
monitor.set(NOT_INHERITABLE, (short)4);
assertInheritableBehavior(monitor);
}
/**
* @see CompositeMonitor#getInheritableAttributes()
*/
public void testInheritableByteAttributes() {
CompositeMonitor monitor = createCompositeMonitor("test");
monitor.setInheritable(INHERITABLE, (byte)3);
monitor.set(NOT_INHERITABLE, (byte)4);
assertInheritableBehavior(monitor);
}
/**
* @see CompositeMonitor#getInheritableAttributes()
*/
public void testInheritableIntAttributes() {
CompositeMonitor monitor = createCompositeMonitor("test");
monitor.setInheritable(INHERITABLE, 3);
monitor.set(NOT_INHERITABLE, 4);
assertInheritableBehavior(monitor);
}
/**
* @see CompositeMonitor#getInheritableAttributes()
*/
public void testInheritableLongAttributes() {
CompositeMonitor monitor = createCompositeMonitor("test");
monitor.setInheritable(INHERITABLE, (long)3);
monitor.set(NOT_INHERITABLE, (long)4);
assertInheritableBehavior(monitor);
}
/**
* @see CompositeMonitor#getInheritableAttributes()
*/
public void testInheritableFloatAttributes() {
CompositeMonitor monitor = createCompositeMonitor("test");
monitor.setInheritable(INHERITABLE, (float)3.0);
monitor.set(NOT_INHERITABLE, (float)4.0);
assertInheritableBehavior(monitor);
}
/**
* @see CompositeMonitor#getInheritableAttributes()
*/
public void testInheritableDoubleAttributes() {
CompositeMonitor monitor = createCompositeMonitor("test");
monitor.setInheritable(INHERITABLE, 3.0);
monitor.set(NOT_INHERITABLE, 4.0);
assertInheritableBehavior(monitor);
}
/**
* @see CompositeMonitor#getInheritableAttributes()
*/
public void testInheritableBooleanAttributes() {
CompositeMonitor monitor = createCompositeMonitor("test");
monitor.setInheritable(INHERITABLE, false);
monitor.set(NOT_INHERITABLE, true);
assertInheritableBehavior(monitor);
}
/**
* @see CompositeMonitor#getInheritableAttributes()
*/
public void testInheritableCharAttributes() {
CompositeMonitor monitor = createCompositeMonitor("test");
monitor.setInheritable(INHERITABLE, 'c');
monitor.set(NOT_INHERITABLE, 'd');
assertInheritableBehavior(monitor);
}
/**
* @see CompositeMonitor#getSerializableMomento()
* @see com.orbitz.monitoring.test.MonitorTestBase#testGetSerializableMomento()
*/
@Override
public void testGetSerializableMomento() {
CompositeMonitor parent = createCompositeMonitor("parent");
parent.set("parent", "foo");
CompositeMonitor child = createCompositeMonitor("child");
parent.set("child", "foo");
CompositeMonitor grandchild = createCompositeMonitor("grandchild");
parent.set("grandchild", "foo");
completeMonitorUse(grandchild);
completeMonitorUse(child);
completeMonitorUse(parent);
assertEquals(1, parent.getChildMonitors().size());
assertEquals(1, child.getChildMonitors().size());
assertEquals(0, grandchild.getChildMonitors().size());
SerializableCompositeMonitor momento = (SerializableCompositeMonitor)parent
.getSerializableMomento();
assertSerializableEquivalent(parent, momento);
}
/**
* Creates a {@link CompositeMonitor} that will be used in tests
* @param name the monitor name
* @return a new monitor
*/
protected CompositeMonitor createCompositeMonitor(final String name) {
return (CompositeMonitor)createMonitor(name);
}
@Override
protected void additionalChecks(final Monitor monitor, final SerializableMonitor momento) {
super.additionalChecks(monitor, momento);
if (monitor instanceof CompositeMonitor) {
CompositeMonitor tMon = (TransactionMonitor)monitor;
SerializableCompositeMonitor cMomento = (SerializableCompositeMonitor)momento;
assertEquals(tMon.getChildMonitors().size(), cMomento.getChildMonitors().size());
Iterator<Monitor> i = tMon.getChildMonitors().iterator();
Iterator<SerializableMonitor> j = cMomento.getSerializableChildMonitors().iterator();
while (i.hasNext()) {
Monitor childMon = i.next();
SerializableMonitor childMomento = j.next();
assertSerializableEquivalent(childMon, childMomento);
}
}
}
private void assertInheritableBehavior(final CompositeMonitor monitor) {
assertTrue(monitor.hasAttribute(INHERITABLE));
assertTrue(monitor.hasAttribute(NOT_INHERITABLE));
Map<String, Object> inheritableAttributes = monitor.getInheritableAttributes();
assertEquals(monitor.get(INHERITABLE), inheritableAttributes.get(INHERITABLE));
}
}