package com.orbitz.monitoring.test; import com.orbitz.monitoring.api.Monitor; import com.orbitz.monitoring.api.MonitorProcessor; import junit.framework.Assert; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; /** * A mock implementation of MonitorProcessor that can be used to assert expected * monitor behavior. * * * @author Doug Barth */ public class MockMonitorProcessor implements MonitorProcessor { // ** PRIVATE DATA ******************************************************** private String name; private boolean _startupCalled; private boolean _shutdownCalled; private Set _monitorCreatedObjects; private Set _monitorStartedObjects; private Set _processObjects; private int _processDelay = 0; private boolean _throwThrowableDuringProcessing; private String _stringConfig; private int _intConfig; private long _longConfig; private float _floatConfig; private double _doubleConfig; private char _charConfig; // ** CONSTRUCTORS ******************************************************** public MockMonitorProcessor() { _startupCalled = false; _shutdownCalled = false; _throwThrowableDuringProcessing = false; _monitorCreatedObjects = new LinkedHashSet(); _monitorStartedObjects = new LinkedHashSet(); _processObjects = new LinkedHashSet(); } public MockMonitorProcessor(String name) { this(); this.name = name; } // ** PUBLIC METHODS ****************************************************** public void startup() { _startupCalled = true; } public void shutdown() { _shutdownCalled = true; } public void monitorCreated(Monitor monitor) { throwThrowableIfConfigured(); if (_processDelay > 0) { try { Thread.sleep(_processDelay); } catch (InterruptedException e) { // Ignore } } _monitorCreatedObjects.add(monitor); } public void assertExpectedMonitorCreatedObject(Monitor monitor) { Assert.assertTrue("For expected monitorCreated() object: " + monitor, _monitorCreatedObjects.remove(monitor)); } public Monitor[] extractMonitorCreatedObjects() { return extractMonitorsFrom(_monitorCreatedObjects); } public void monitorStarted(Monitor monitor) { _monitorStartedObjects.add(monitor); } public void assertExpectedMonitorStartedObject(Monitor monitor) { Assert.assertTrue("For expected monitorStarted() object: " + monitor, _monitorStartedObjects.remove(monitor)); } public Monitor[] extractMonitorStartedObjects() { return extractMonitorsFrom(_monitorStartedObjects); } public void process(Monitor monitor) { throwThrowableIfConfigured(); if (_processDelay > 0) { try { Thread.sleep(_processDelay); } catch (InterruptedException e) { // Ignore } } _processObjects.add(monitor); } public void assertExpectedProcessObject(Monitor monitor) { Assert.assertTrue("For expected process() object: " + monitor, _processObjects.remove(monitor)); } public Monitor[] extractProcessObjects() { return extractMonitorsFrom(_processObjects); } public void assertStartupCalled() { Assert.assertTrue("For startup called", _startupCalled); } public void assertShutdownCalled() { Assert.assertTrue("For shutdown called", _shutdownCalled); } public void assertNoUnexpectedCalls() { Assert.assertEquals("For monitorCreated() calls", new HashSet(), _monitorCreatedObjects); Assert.assertEquals("For process() calls", new HashSet(), _processObjects); } public void clear() { _monitorCreatedObjects.clear(); _processObjects.clear(); } public String getName() { return name; } public void setName(final String name) { this.name = name; } // ** PRIVATE DATA ******************************************************** private Monitor[] extractMonitorsFrom(Set monitorSet) { int size = monitorSet.size(); Monitor[] monitors = (Monitor[]) monitorSet.toArray(new Monitor[size]); monitorSet.clear(); return monitors; } private void throwThrowableIfConfigured() { if (_throwThrowableDuringProcessing) { throw new Error("Processing throwable"); } } // ** ACCESSORS *********************************************************** public int getProcessDelay() { return _processDelay; } public void setProcessDelay(int processDelay) { _processDelay = processDelay; } public boolean isThrowThrowableDuringProcessing() { return _throwThrowableDuringProcessing; } public void setThrowThrowableDuringProcessing( boolean throwThrowableDuringProcessing) { _throwThrowableDuringProcessing = throwThrowableDuringProcessing; } public String getStringConfig() { return _stringConfig; } public void setStringConfig(String stringConfig) { _stringConfig = stringConfig; } public int getIntConfig() { return _intConfig; } public void setIntConfig(int intConfig) { _intConfig = intConfig; } public long getLongConfig() { return _longConfig; } public void setLongConfig(long longConfig) { _longConfig = longConfig; } public float getFloatConfig() { return _floatConfig; } public void setFloatConfig(float floatConfig) { _floatConfig = floatConfig; } public double getDoubleConfig() { return _doubleConfig; } public void setDoubleConfig(double doubleConfig) { _doubleConfig = doubleConfig; } public char getCharConfig() { return _charConfig; } public void setCharConfig(char charConfig) { _charConfig = charConfig; } }