User: ejort Date: 02/03/29 02:44:32 Modified: src/main/test/compliance/monitor Tag: BranchMX_1_0 MonitorTestCase.java Log: More monitor testing Revision Changes Path No revision No revision 1.1.2.2 +1316 -178 jmx/src/main/test/compliance/monitor/MonitorTestCase.java Index: MonitorTestCase.java =================================================================== RCS file: /cvsroot/jboss/jmx/src/main/test/compliance/monitor/MonitorTestCase.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -r1.1.2.1 -r1.1.2.2 --- MonitorTestCase.java 24 Mar 2002 11:50:27 -0000 1.1.2.1 +++ MonitorTestCase.java 29 Mar 2002 10:44:32 -0000 1.1.2.2 @@ -23,9 +23,11 @@ import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import javax.management.Attribute; +import javax.management.MBeanNotificationInfo; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectName; @@ -37,9 +39,9 @@ import javax.management.monitor.MonitorNotification; import javax.management.monitor.StringMonitor; +import junit.framework.AssertionFailedError; import junit.framework.TestCase; - /** * Monitor Notification Tests * @@ -64,64 +66,998 @@ ObjectName monitorName; /** - * The monitor + * The monitor + */ + Monitor monitor; + + /** + * The object name of the mbean monitored + */ + ObjectName monitoredName; + + /** + * The monitored mbean + */ + MonitorSupport monitored; + + /** + * The notifications + */ + ArrayList notifications = new ArrayList(); + + // Constructor ------------------------------------------------------------- + + /** + * Construct the test + */ + public MonitorTestCase(String s) + { + super(s); + } + + // Tests ------------------------------------------------------------------- + + /** + * Test notification types differ + */ + public void testNotificationTypes() + { + assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_ERROR, + "jmx.monitor.error.attribute"); + assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR, + "jmx.monitor.error.type"); + assertEquals(MonitorNotification.OBSERVED_OBJECT_ERROR, + "jmx.monitor.error.mbean"); + assertEquals(MonitorNotification.RUNTIME_ERROR, + "jmx.monitor.error.runtime"); + assertEquals(MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED, + "jmx.monitor.string.differs"); + assertEquals(MonitorNotification.STRING_TO_COMPARE_VALUE_MATCHED, + "jmx.monitor.string.matches"); + assertEquals(MonitorNotification.THRESHOLD_ERROR, + "jmx.monitor.error.threshold"); + assertEquals(MonitorNotification.THRESHOLD_HIGH_VALUE_EXCEEDED, + "jmx.monitor.gauge.high"); + assertEquals(MonitorNotification.THRESHOLD_LOW_VALUE_EXCEEDED, + "jmx.monitor.gauge.low"); + assertEquals(MonitorNotification.THRESHOLD_VALUE_EXCEEDED, + "jmx.monitor.counter.threshold"); + } + + // Counter monitor notification info --------------------------------------- + + /** + * Test the notification info of the counter + */ + public void testCounterNotificationInfo() + throws Exception + { + HashSet expected = new HashSet(); + expected.add(MonitorNotification.OBSERVED_ATTRIBUTE_ERROR); + expected.add(MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR); + expected.add(MonitorNotification.OBSERVED_OBJECT_ERROR); + expected.add(MonitorNotification.RUNTIME_ERROR); + expected.add(MonitorNotification.THRESHOLD_ERROR); + expected.add(MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + + MBeanNotificationInfo[] mbni = new CounterMonitor().getNotificationInfo(); + checkNotificationInfo("Counter", mbni, expected); + } + + // Counter normal no offset no modulus tests ------------------------------- + + /** + * Test normal counter threshold no offset no modulus + */ + public void testNormalCounterThresholdExceededEarlyNoOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(0), new Integer(0)); + expectStartMonitor(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold no offset no modulus + */ + public void testNormalCounterThresholdExceededLateNoOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(0), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold no offset no modulus + */ + public void testNormalCounterThresholdExceededManyNoOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(0), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(0)); + expect(new Integer(11), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold no offset no modulus + */ + public void testNormalCounterThresholdNotExceededNoOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(0), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + dontExpect(new Integer(1)); + dontExpect(new Integer(-1)); + dontExpect(new Integer(9)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(10)); + dontExpect(new Integer(11)); + dontExpect(new Integer(9)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(9)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold no offset no modulus + */ + public void testNormalCounterThresholdExceededNoneNoOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(false, new Integer(10), + false, new Integer(0), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + dontExpect(new Integer(10)); + dontExpect(new Integer(0)); + dontExpect(new Integer(10)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + // Counter normal offset no modulus tests ---------------------------------- + + /** + * Test normal counter threshold offset no modulus + */ + public void testNormalCounterThresholdExceededEarlyOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(10), new Integer(0)); + expectStartMonitor(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold offset no modulus + */ + public void testNormalCounterThresholdExceededLateOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(10), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold offset no modulus + */ + public void testNormalCounterThresholdExceededManyOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(10), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(0)); + dontExpect(new Integer(11)); + expect(new Integer(20), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(29)); + expect(new Integer(30), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expect(new Integer(40), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold offset no modulus + */ + public void testNormalCounterThresholdNotExceededOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(10), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + dontExpect(new Integer(1)); + dontExpect(new Integer(-1)); + dontExpect(new Integer(9)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(10)); + dontExpect(new Integer(11)); + dontExpect(new Integer(9)); + expect(new Integer(20), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(19)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold offset no modulus + */ + public void testNormalCounterThresholdExceededNoneOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(false, new Integer(10), + false, new Integer(10), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + dontExpect(new Integer(10)); + dontExpect(new Integer(0)); + dontExpect(new Integer(20)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + // Counter normal no offset modulus tests --------------------------------- + + /** + * Test normal counter threshold no offset modulus + */ + public void testNormalCounterThresholdExceededEarlyNoOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(0), new Integer(10)); + expectStartMonitor(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold no offset modulus + */ + public void testNormalCounterThresholdExceededLateNoOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(0), new Integer(10)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold no offset modulus + */ + public void testNormalCounterThresholdExceededManyNoOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(0), new Integer(10)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(0)); + expect(new Integer(11), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expect(new Integer(12), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + catch (AssertionFailedError e) + { + fail("FAILS IN RI: Modulus ignored with no offset???"); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold no offset modulus + */ + public void testNormalCounterThresholdNotExceededNoOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(0), new Integer(10)); + dontExpectStartMonitor(new Integer(0)); + dontExpect(new Integer(1)); + dontExpect(new Integer(-1)); + dontExpect(new Integer(9)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(9)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(9)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold no offset modulus + */ + public void testNormalCounterThresholdExceededNoneNoOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(false, new Integer(10), + false, new Integer(0), new Integer(10)); + dontExpectStartMonitor(new Integer(0)); + dontExpect(new Integer(10)); + dontExpect(new Integer(0)); + dontExpect(new Integer(10)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + // Counter normal offset modulus tests ------------------------------------- + + /** + * Test normal counter threshold offset modulus + */ + public void testNormalCounterThresholdExceededEarlyOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(10), new Integer(10)); + expectStartMonitor(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold offset modulus + */ + public void testNormalCounterThresholdExceededLateOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(10), new Integer(10)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold offset modulus + */ + public void testNormalCounterThresholdExceededManyOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(10), new Integer(20)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(0)); + dontExpect(new Integer(12)); + expect(new Integer(20), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + if (((CounterMonitor)monitor).getThreshold().equals(new Integer(30))) + fail("FAILS IN RI: Threshold 10, Offset 10, Modulus 20 should " + + " never get a threshold of 30"); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(10)); + expect(new Integer(20), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expect(new Integer(20), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expect(new Integer(30), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold offset modulus + */ + public void testNormalCounterThresholdNotExceededOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + false, new Integer(10), new Integer(20)); + dontExpectStartMonitor(new Integer(0)); + dontExpect(new Integer(1)); + dontExpect(new Integer(-1)); + dontExpect(new Integer(9)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpect(new Integer(10)); + dontExpect(new Integer(11)); + dontExpect(new Integer(9)); + expect(new Integer(20), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + if (((CounterMonitor)monitor).getThreshold().equals(new Integer(30))) + fail("FAILS IN RI: Threshold 10, Offset 10, Modulus 20 should " + + " never get a threshold of 30"); + expect(new Integer(19), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test normal counter threshold offset modulus + */ + public void testNormalCounterThresholdExceededNoneOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(false, new Integer(10), + false, new Integer(10), new Integer(10)); + dontExpectStartMonitor(new Integer(0)); + dontExpect(new Integer(10)); + dontExpect(new Integer(0)); + dontExpect(new Integer(20)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + // Counter difference no offset no modulus tests --------------------------- + + /** + * Test difference counter threshold no offset no modulus + */ + public void testDiffCounterThresholdExceededNoOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(0), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test difference counter threshold no offset no modulus + */ + public void testDiffCounterThresholdExceededManyNoOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(0), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(0), new Integer(11), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test difference counter threshold no offset no modulus + */ + public void testDiffCounterThresholdNotExceededNoOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(0), new Integer(0)); + dontExpectStartMonitorDiff(new Integer(0), new Integer(1)); + dontExpectDiff(new Integer(0), new Integer(9)); + dontExpectDiff(new Integer(1), new Integer(10)); + dontExpectDiff(new Integer(9), new Integer(11)); + dontExpectDiff(new Integer(9), new Integer(0)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test difference counter threshold no offset no modulus + */ + public void testDiffCounterThresholdExceededNoneNoOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(false, new Integer(10), + true, new Integer(0), new Integer(0)); + dontExpectStartMonitorDiff(new Integer(0), new Integer(10)); + dontExpectDiff(new Integer(0), new Integer(-10)); + dontExpectDiff(new Integer(0), new Integer(100)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + // Counter difference offset no modulus tests ------------------------------ + + /** + * Test difference counter threshold offset no modulus + */ + public void testDiffCounterThresholdExceededOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(10), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test difference counter threshold offset no modulus + */ + public void testDiffCounterThresholdExceededManyOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(10), new Integer(0)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(0), new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(10), new Integer(30), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(30), new Integer(60), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(60), new Integer(100), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(0), new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test difference counter threshold offset no modulus + */ + public void testDiffCounterThresholdNotExceededOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(10), new Integer(0)); + dontExpectStartMonitorDiff(new Integer(0), new Integer(1)); + expectDiff(new Integer(0), new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpectDiff(new Integer(10), new Integer(20)); + expectDiff(new Integer(20), new Integer(40), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + dontExpectDiff(new Integer(40), new Integer(69)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test difference counter threshold offset no modulus + */ + public void testDiffCounterThresholdExceededNoneOffsetNoModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(false, new Integer(10), + true, new Integer(10), new Integer(0)); + dontExpectStartMonitorDiff(new Integer(0), new Integer(1)); + dontExpectDiff(new Integer(0), new Integer(10)); + dontExpectDiff(new Integer(10), new Integer(20)); + dontExpectDiff(new Integer(20), new Integer(40)); + dontExpectDiff(new Integer(40), new Integer(69)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + // Counter difference no offset modulus tests ------------------------------ + + /** + * Test difference counter threshold no offset modulus + */ + public void testDiffCounterThresholdExceededNoOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(0), new Integer(10)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test difference counter threshold no offset modulus + */ + public void testDiffCounterThresholdExceededManyNoOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(0), new Integer(10)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(0), new Integer(11), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(12), new Integer(22), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(0), new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test difference counter threshold no offset modulus + */ + public void testDiffCounterThresholdNotExceededNoOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(0), new Integer(10)); + dontExpectStartMonitorDiff(new Integer(0), new Integer(1)); + dontExpectDiff(new Integer(0), new Integer(9)); + dontExpectDiff(new Integer(11), new Integer(20)); + dontExpectDiffModulus(new Integer(10), new Integer(-3), new Integer(10)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } + + /** + * Test difference counter threshold no offset modulus */ - Monitor monitor; + public void testDiffCounterThresholdExceededNoneNoOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(false, new Integer(10), + true, new Integer(0), new Integer(10)); + dontExpectStartMonitorDiff(new Integer(0), new Integer(10)); + dontExpectDiffModulus(new Integer(0), new Integer(-10), new Integer(10)); + dontExpectDiff(new Integer(0), new Integer(100)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } - /** - * The object name of the mbean monitored - */ - ObjectName monitoredName; + // Counter difference offset modulus tests --------------------------------- /** - * The monitored mbean + * Test difference counter threshold offset modulus */ - MonitorSupport monitored; + public void testDiffCounterThresholdExceededOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(10), new Integer(10)); + dontExpectStartMonitor(new Integer(0)); + expect(new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } /** - * The notifications + * Test difference counter threshold offset modulus */ - ArrayList notifications = new ArrayList(); - - // Constructor ------------------------------------------------------------- + public void testDiffCounterThresholdExceededManyOffsetModulus() + throws Exception + { + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(10), new Integer(20)); + dontExpectStartMonitor(new Integer(0)); + expectDiff(new Integer(0), new Integer(11), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(11), new Integer(31), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + expectDiff(new Integer(0), new Integer(10), + MonitorNotification.THRESHOLD_VALUE_EXCEEDED); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } + } /** - * Construct the test + * Test difference counter threshold offset modulus */ - public MonitorTestCase(String s) + public void testDiffCounterThresholdNotExceededOffsetModulus() + throws Exception { - super(s); + initTest(); + try + { + initCounterMonitor(true, new Integer(10), + true, new Integer(10), new Integer(20)); + dontExpectStartMonitorDiff(new Integer(0), new Integer(1)); + dontExpectDiff(new Integer(1), new Integer(10)); + dontExpectDiffModulus(new Integer(10), new Integer(-13), new Integer(20)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); + } } - // Tests ------------------------------------------------------------------- - /** - * Test notification types differ + * Test difference counter threshold offset modulus */ - public void testNotificationTypesDiffer() + public void testDiffCounterThresholdExceededNoneOffsetModulus() + throws Exception { - String[] types = new String[] + initTest(); + try { - MonitorNotification.OBSERVED_ATTRIBUTE_ERROR, - MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR, - MonitorNotification.OBSERVED_OBJECT_ERROR, - MonitorNotification.RUNTIME_ERROR, - MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED, - MonitorNotification.STRING_TO_COMPARE_VALUE_MATCHED, - MonitorNotification.THRESHOLD_ERROR, - MonitorNotification.THRESHOLD_HIGH_VALUE_EXCEEDED, - MonitorNotification.THRESHOLD_LOW_VALUE_EXCEEDED, - MonitorNotification.THRESHOLD_VALUE_EXCEEDED - }; - for (int i = 0; i < types.length; i++) - { - if (types[i] == null) - fail("Null notification type"); - for (int j = i + 1 ; j < types.length; j++) - { - if (types[i].equals(types[j])) - fail("Equal notification types: " + types[i]); - } + initCounterMonitor(false, new Integer(10), + true, new Integer(10), new Integer(20)); + dontExpectStartMonitorDiff(new Integer(0), new Integer(10)); + dontExpectDiffModulus(new Integer(0), new Integer(-10), new Integer(20)); + dontExpectDiff(new Integer(0), new Integer(100)); + } + finally + { + stopMonitor(); + MBeanServerFactory.releaseMBeanServer(server); } } @@ -136,9 +1072,9 @@ initTest(); try { - initCounterMonitor(true, new Integer(10), new Integer(0), + initCounterMonitor(true, new Integer(10), false, new Integer(10), new Integer(10)); - attributeErrorStartMonitor(); + attributeErrorStartMonitor(new Integer(0)); } finally { @@ -156,9 +1092,9 @@ initTest(); try { - initCounterMonitor(true, new Integer(10), new Integer(0), + initCounterMonitor(true, new Integer(10), false, new Integer(10), new Integer(10)); - attributeNullStartMonitor(); + attributeNullStartMonitor(new Integer(0)); } finally { @@ -176,9 +1112,9 @@ initTest(); try { - initCounterMonitor(true, new Integer(10), new Integer(0), + initCounterMonitor(true, new Integer(10), false, new Integer(10), new Integer(10)); - attributeTypeStartMonitor(); + attributeTypeStartMonitor(new Integer(0)); } finally { @@ -196,9 +1132,9 @@ initTest(); try { - initCounterMonitor(true, new Integer(10), new Integer(0), + initCounterMonitor(true, new Integer(10), false, new Integer(10), new Integer(10)); - attributeWriteStartMonitor(); + attributeWriteStartMonitor(new Integer(0)); } finally { @@ -216,9 +1152,9 @@ initTest(); try { - initCounterMonitor(true, new Integer(10), new Integer(0), + initCounterMonitor(true, new Integer(10), false, new Integer(10), new Integer(10)); - objectNameStartMonitor(); + objectNameStartMonitor(new Integer(0)); } finally { @@ -236,9 +1172,9 @@ initTest(); try { - initCounterMonitor(true, new Long(10), new Integer(0), + initCounterMonitor(true, new Long(10), false, new Integer(10), new Integer(10)); - objectNameStartMonitor(); + objectNameStartMonitor(new Integer(0)); } finally { @@ -256,9 +1192,9 @@ initTest(); try { - initCounterMonitor(true, new Integer(10), new Integer(0), + initCounterMonitor(true, new Integer(10), false, new Long(10), new Integer(10)); - objectNameStartMonitor(); + objectNameStartMonitor(new Integer(0)); } finally { @@ -276,9 +1212,9 @@ initTest(); try { - initCounterMonitor(true, new Integer(10), new Integer(0), + initCounterMonitor(true, new Integer(10), false, new Integer(10), new Long(10)); - objectNameStartMonitor(); + objectNameStartMonitor(new Integer(0)); } finally { @@ -296,9 +1232,9 @@ initTest(); try { - initCounterMonitor(true, new Integer(10), new Integer(0), + initCounterMonitor(true, new Integer(10), false, new Integer(10), new Integer(10)); - runtimeErrorStartMonitor(); + runtimeErrorStartMonitor(new Integer(0)); } finally { @@ -307,6 +1243,27 @@ } } + // Gauge notification tests ------------------------------------------------ + + /** + * Test the notification info of the gauge + */ + public void testGaugeNotificationInfo() + throws Exception + { + HashSet expected = new HashSet(); + expected.add(MonitorNotification.OBSERVED_ATTRIBUTE_ERROR); + expected.add(MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR); + expected.add(MonitorNotification.OBSERVED_OBJECT_ERROR); + expected.add(MonitorNotification.RUNTIME_ERROR); + expected.add(MonitorNotification.THRESHOLD_ERROR); + expected.add(MonitorNotification.THRESHOLD_HIGH_VALUE_EXCEEDED); + expected.add(MonitorNotification.THRESHOLD_LOW_VALUE_EXCEEDED); + + MBeanNotificationInfo[] mbni = new GaugeMonitor().getNotificationInfo(); + checkNotificationInfo("Gauge", mbni, expected); + } + // Gauge error tests ------------------------------------------------------- /** @@ -318,9 +1275,8 @@ initTest(); try { - initGaugeMonitor(true, true, new Integer(10), new Integer(0), - false, new Integer(10)); - attributeErrorStartMonitor(); + initGaugeMonitor(true, true, new Integer(10), new Integer(0), false); + attributeErrorStartMonitor(new Integer(0)); } finally { @@ -338,9 +1294,8 @@ initTest(); try { - initGaugeMonitor(true, true, new Integer(10), new Integer(0), - false, new Integer(10)); - attributeNullStartMonitor(); + initGaugeMonitor(true, true, new Integer(10), new Integer(0), false); + attributeNullStartMonitor(new Integer(0)); } finally { @@ -358,9 +1313,8 @@ initTest(); try { - initGaugeMonitor(true, true, new Integer(10), new Integer(0), - false, new Integer(10)); - attributeTypeStartMonitor(); + initGaugeMonitor(true, true, new Integer(10), new Integer(0), false); + attributeTypeStartMonitor(new Integer(0)); } finally { @@ -378,9 +1332,8 @@ initTest(); try { - initGaugeMonitor(true, true, new Integer(10), new Integer(0), - false, new Integer(10)); - attributeWriteStartMonitor(); + initGaugeMonitor(true, true, new Integer(10), new Integer(0), false); + attributeWriteStartMonitor(new Integer(0)); } finally { @@ -398,9 +1351,8 @@ initTest(); try { - initGaugeMonitor(true, true, new Integer(10), new Integer(0), - false, new Integer(10)); - objectNameStartMonitor(); + initGaugeMonitor(true, true, new Integer(10), new Integer(0), false); + objectNameStartMonitor(new Integer(0)); } finally { @@ -418,9 +1370,8 @@ initTest(); try { - initGaugeMonitor(true, true, new Long(10), new Long(0), - false, new Integer(10)); - objectNameStartMonitor(); + initGaugeMonitor(true, true, new Long(10), new Long(0), false); + objectNameStartMonitor(new Integer(0)); } finally { @@ -438,9 +1389,8 @@ initTest(); try { - initGaugeMonitor(true, true, new Integer(10), new Integer(0), - false, new Integer(10)); - runtimeErrorStartMonitor(); + initGaugeMonitor(true, true, new Integer(10), new Integer(0), false); + runtimeErrorStartMonitor(new Integer(0)); } finally { @@ -449,6 +1399,26 @@ } } + // String notification tests ----------------------------------------------- + + /** + * Test the notification info of the string + */ + public void testStringNotificationInfo() + throws Exception + { + HashSet expected = new HashSet(); + expected.add(MonitorNotification.OBSERVED_ATTRIBUTE_ERROR); + expected.add(MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR); + expected.add(MonitorNotification.OBSERVED_OBJECT_ERROR); + expected.add(MonitorNotification.RUNTIME_ERROR); + expected.add(MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED); + expected.add(MonitorNotification.STRING_TO_COMPARE_VALUE_MATCHED); + + MBeanNotificationInfo[] mbni = new StringMonitor().getNotificationInfo(); + checkNotificationInfo("String", mbni, expected); + } + // String test ------------------------------------------------------------- /** @@ -460,7 +1430,7 @@ initTest(); try { - initStringMonitor(true, false, "Hello", "Goodbye"); + initStringMonitor(true, false, "Hello"); expectStartMonitor("Goodbye", MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED); } @@ -480,7 +1450,7 @@ initTest(); try { - initStringMonitor(true, false, "Hello", "Hello"); + initStringMonitor(true, false, "Hello"); dontExpectStartMonitor("Hello"); expect("Goodbye", MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED); @@ -501,7 +1471,7 @@ initTest(); try { - initStringMonitor(true, false, "Hello", "Goodbye"); + initStringMonitor(true, false, "Hello"); expectStartMonitor("Goodbye", MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED); dontExpect("Hello"); @@ -528,7 +1498,7 @@ initTest(); try { - initStringMonitor(true, false, "Hello", "Hello"); + initStringMonitor(true, false, "Hello"); dontExpectStartMonitor("Hello"); expect("Goodbye", MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED); @@ -556,7 +1526,7 @@ initTest(); try { - initStringMonitor(false, true, "Hello", "Hello"); + initStringMonitor(false, true, "Hello"); expectStartMonitor("Hello", MonitorNotification.STRING_TO_COMPARE_VALUE_MATCHED); } @@ -576,7 +1546,7 @@ initTest(); try { - initStringMonitor(false, true, "Hello", "Goodbye"); + initStringMonitor(false, true, "Hello"); dontExpectStartMonitor("Goodbye"); expect("Hello", MonitorNotification.STRING_TO_COMPARE_VALUE_MATCHED); @@ -597,7 +1567,7 @@ initTest(); try { - initStringMonitor(false, true, "Hello", "Hello"); + initStringMonitor(false, true, "Hello"); expectStartMonitor("Hello", MonitorNotification.STRING_TO_COMPARE_VALUE_MATCHED); dontExpect("Goodbye"); @@ -623,7 +1593,7 @@ initTest(); try { - initStringMonitor(false, true, "Hello", "Goodbye"); + initStringMonitor(false, true, "Hello"); dontExpectStartMonitor("Goodbye"); expect("Hello", MonitorNotification.STRING_TO_COMPARE_VALUE_MATCHED); @@ -650,7 +1620,7 @@ initTest(); try { - initStringMonitor(true, true, "Hello", "Goodbye"); + initStringMonitor(true, true, "Hello"); expectStartMonitor("Goodbye", MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED); expect("Hello", @@ -672,7 +1642,7 @@ initTest(); try { - initStringMonitor(true, true, "Hello", "Goodbye"); + initStringMonitor(true, true, "Hello"); expectStartMonitor("Goodbye", MonitorNotification.STRING_TO_COMPARE_VALUE_DIFFERED); expect("Hello", @@ -700,7 +1670,7 @@ initTest(); try { - initStringMonitor(false, false, "Hello", "Goodbye"); + initStringMonitor(false, false, "Hello"); dontExpectStartMonitor("Goodbye"); dontExpect("Hello"); dontExpect("Goodbye"); @@ -723,8 +1693,8 @@ initTest(); try { - initStringMonitor(true, true, "Hello", "Goodbye"); - attributeErrorStartMonitor(); + initStringMonitor(true, true, "Hello"); + attributeErrorStartMonitor("Goodbye"); } finally { @@ -742,8 +1712,8 @@ initTest(); try { - initStringMonitor(true, true, "Hello", "Goodbye"); - attributeNullStartMonitor(); + initStringMonitor(true, true, "Hello"); + attributeNullStartMonitor("Goodbye"); } finally { @@ -761,8 +1731,8 @@ initTest(); try { - initStringMonitor(true, true, "Hello", "Goodbye"); - attributeTypeStartMonitor(); + initStringMonitor(true, true, "Hello"); + attributeTypeStartMonitor("Goodbye"); } finally { @@ -780,8 +1750,8 @@ initTest(); try { - initStringMonitor(true, true, "Hello", "Goodbye"); - attributeWriteStartMonitor(); + initStringMonitor(true, true, "Hello"); + attributeWriteStartMonitor("Goodbye"); } finally { @@ -799,8 +1769,8 @@ initTest(); try { - initStringMonitor(true, true, "Hello", "Goodbye"); - objectNameStartMonitor(); + initStringMonitor(true, true, "Hello"); + objectNameStartMonitor("Goodbye"); } finally { @@ -818,8 +1788,8 @@ initTest(); try { - initStringMonitor(true, true, "Hello", "Goodbye"); - runtimeErrorStartMonitor(); + initStringMonitor(true, true, "Hello"); + runtimeErrorStartMonitor("Goodbye"); } finally { @@ -834,7 +1804,7 @@ * Create a counter monitor */ private void initCounterMonitor(boolean notify, Number threshold, - Number initial, boolean differenceMode, Number offset, Number modulus) + boolean differenceMode, Number offset, Number modulus) { try { @@ -845,7 +1815,6 @@ counterMonitor.setOffset(offset); counterMonitor.setModulus(modulus); CounterSupport support = new CounterSupport(); - support.setValue(initial); monitor = counterMonitor; monitored = support; initMonitor(); @@ -868,8 +1837,7 @@ * Create a gauge monitor */ private void initGaugeMonitor(boolean notifyHigh, boolean notifyLow, - Number thresholdHigh, Number thresholdLow, boolean differenceMode, - Number initial) + Number thresholdHigh, Number thresholdLow, boolean differenceMode) { try { @@ -879,7 +1847,6 @@ gaugeMonitor.setThresholds(thresholdHigh, thresholdLow); gaugeMonitor.setDifferenceMode(differenceMode); GaugeSupport support = new GaugeSupport(); - support.setValue(initial); monitor = gaugeMonitor; monitored = support; initMonitor(); @@ -893,8 +1860,7 @@ /** * Create a string monitor */ - private void initStringMonitor(boolean differ, boolean match, - String compare, String initial) + private void initStringMonitor(boolean differ, boolean match, String compare) { try { @@ -903,7 +1869,6 @@ stringMonitor.setNotifyMatch(match); stringMonitor.setStringToCompare(compare); StringSupport support = new StringSupport(); - support.setValue(initial); monitor = stringMonitor; monitored = support; initMonitor(); @@ -945,6 +1910,7 @@ { if (monitor != null) { + monitored.end(); monitor.stop(); } } @@ -954,19 +1920,35 @@ */ public void handleNotification(Notification n, Object ignored) { - // Make sure the test is ready to receive the notification - monitored.lock("get"); - - notifications.add(n); + synchronized(notifications) + { + notifications.add(n); + notifications.notifyAll(); + } + } - // Let the test continue - monitored.unlock("get"); + /** + * Sync with the notification handler + */ + private void sync(boolean getWorks) + throws Exception + { + // Make sure the monitor has got the attribute + if (getWorks) + waitCycle(); + else + { + synchronized(notifications) + { + notifications.wait(MonitorSUITE.MAX_WAIT); + } + } } /** * Invalid attribute start monitor */ - private void attributeErrorStartMonitor() + private void attributeErrorStartMonitor(Object initial) throws Exception { assertEquals(0, notifications.size()); @@ -980,12 +1962,17 @@ assertEquals(monitoredName, n.getObservedObject()); assertEquals("rubbish", n.getObservedAttribute()); assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_ERROR, n.getType()); + n = serializeDeserialize(n); + assertEquals(monitorName, n.getSource()); + assertEquals(monitoredName, n.getObservedObject()); + assertEquals("rubbish", n.getObservedAttribute()); + assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_ERROR, n.getType()); } /** * Invalid attribute null start monitor */ - private void attributeNullStartMonitor() + private void attributeNullStartMonitor(Object initial) throws Exception { assertEquals(0, notifications.size()); @@ -1000,12 +1987,18 @@ assertEquals("WrongNull", n.getObservedAttribute()); assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR, n.getType()); + n = serializeDeserialize(n); + assertEquals(monitorName, n.getSource()); + assertEquals(monitoredName, n.getObservedObject()); + assertEquals("WrongNull", n.getObservedAttribute()); + assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR, + n.getType()); } /** * Invalid attribute type start monitor */ - private void attributeTypeStartMonitor() + private void attributeTypeStartMonitor(Object initial) throws Exception { assertEquals(0, notifications.size()); @@ -1020,12 +2013,17 @@ assertEquals("WrongType", n.getObservedAttribute()); assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR, n.getType()); + n = serializeDeserialize(n); + assertEquals(monitoredName, n.getObservedObject()); + assertEquals("WrongType", n.getObservedAttribute()); + assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR, + n.getType()); } /** * Write only Attribute start monitor */ - private void attributeWriteStartMonitor() + private void attributeWriteStartMonitor(Object initial) throws Exception { assertEquals(0, notifications.size()); @@ -1040,12 +2038,18 @@ assertEquals("WriteOnly", n.getObservedAttribute()); assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_ERROR, n.getType()); + n = serializeDeserialize(n); + assertEquals(monitorName, n.getSource()); + assertEquals(monitoredName, n.getObservedObject()); + assertEquals("WriteOnly", n.getObservedAttribute()); + assertEquals(MonitorNotification.OBSERVED_ATTRIBUTE_ERROR, + n.getType()); } /** * Invalid objectName start monitor */ - private void objectNameStartMonitor() + private void objectNameStartMonitor(Object initial) throws Exception { assertEquals(0, notifications.size()); @@ -1061,12 +2065,18 @@ assertEquals("Value", n.getObservedAttribute()); assertEquals(MonitorNotification.OBSERVED_OBJECT_ERROR, n.getType()); + n = serializeDeserialize(n); + assertEquals(monitorName, n.getSource()); + assertEquals(monitoredName, n.getObservedObject()); + assertEquals("Value", n.getObservedAttribute()); + assertEquals(MonitorNotification.OBSERVED_OBJECT_ERROR, + n.getType()); } /** * Invalid threshold start monitor */ - private void thresholdStartMonitor() + private void thresholdStartMonitor(Object initial) throws Exception { assertEquals(0, notifications.size()); @@ -1080,25 +2090,26 @@ assertEquals("Value", n.getObservedAttribute()); assertEquals(MonitorNotification.THRESHOLD_ERROR, n.getType()); + n = serializeDeserialize(n); + assertEquals(monitorName, n.getSource()); + assertEquals(monitoredName, n.getObservedObject()); + assertEquals("Value", n.getObservedAttribute()); + assertEquals(MonitorNotification.THRESHOLD_ERROR, + n.getType()); } /** * runtime error start monitor */ - private void runtimeErrorStartMonitor() + private void runtimeErrorStartMonitor(Object initial) throws Exception { assertEquals(0, notifications.size()); monitor.setObservedAttribute("WrongException"); monitor.start(); - try - { - sync(false); - } - catch(Exception e) - { - fail("FAILS IN RI: No notification of exception thrown by getter"); - } + sync(false); + if (notifications.size() != 1) + fail ("FAILS IN RI: Does not notify of error thrown by getter"); assertEquals(1, notifications.size()); MonitorNotification n = (MonitorNotification) notifications.get(0); notifications.clear(); @@ -1107,6 +2118,12 @@ assertEquals("WrongException", n.getObservedAttribute()); assertEquals(MonitorNotification.RUNTIME_ERROR, n.getType()); + n = serializeDeserialize(n); + assertEquals(monitorName, n.getSource()); + assertEquals(monitoredName, n.getObservedObject()); + assertEquals("WrongException", n.getObservedAttribute()); + assertEquals(MonitorNotification.RUNTIME_ERROR, + n.getType()); } /** @@ -1117,6 +2134,7 @@ { assertEquals(0, notifications.size()); monitor.start(); + setValue(expected); // Synchronize the notification sync(true); @@ -1131,36 +2149,49 @@ assertEquals("Value", n.getObservedAttribute()); assertEquals(type, n.getType()); assertEquals(expected, n.getDerivedGauge()); - - // Allow the monitor to send an incorrect further notification - waitCycle(); - monitored.lock("set"); - assertEquals(0, notifications.size()); - monitored.unlock("set"); + n = serializeDeserialize(n); + assertEquals(monitorName, n.getSource()); + assertEquals(monitoredName, n.getObservedObject()); + assertEquals("Value", n.getObservedAttribute()); + assertEquals(type, n.getType()); + assertEquals(expected, n.getDerivedGauge()); } /** * Start a monitor, don't expect a notification */ - private void dontExpectStartMonitor(String initial) + private void dontExpectStartMonitor(Object initial) throws Exception { assertEquals(0, notifications.size()); monitor.start(); - - // Make sure the monitor has peformed the get - monitored.unlock("set"); + setValue(initial); waitCycle(); - monitored.lock("set"); - checkGauge(initial); assertEquals(0, notifications.size()); - monitored.unlock("set"); + checkGauge(initial); + } - // Give the monitor change to send a further notification + /** + * Start a monitor, don't expect a notification difference + */ + private void dontExpectStartMonitorDiff(Object value1, Object value2) + throws Exception + { + monitor.start(); + setValue(value1); waitCycle(); - monitored.lock("set"); assertEquals(0, notifications.size()); - monitored.unlock("set"); + setValue(value2); + waitCycle(); + assertEquals(0, notifications.size()); + checkGauge(sub(value2, value1)); + } + + private void setValue(Object value) + throws Exception + { + monitored.lock("set"); + server.setAttribute(monitoredName, new Attribute("Value", value)); } /** @@ -1170,7 +2201,7 @@ throws Exception { assertEquals(0, notifications.size()); - server.setAttribute(monitoredName, new Attribute("Value", expected)); + setValue(expected); // Synchronize the notification sync(true); @@ -1185,12 +2216,32 @@ assertEquals("Value", n.getObservedAttribute()); assertEquals(type, n.getType()); assertEquals(gauge, n.getDerivedGauge()); + } - // Give the monitor chance to further unexpected notification + /** + * Expect a notification difference + */ + private void expectDiff(Object value1, Object value2, String type) + throws Exception + { + waitCycle(); + notifications.clear(); + setValue(value1); waitCycle(); - monitored.lock("set"); assertEquals(0, notifications.size()); - monitored.unlock("set"); + setValue(value2); + sync(true); + + // Check the result + checkGauge(sub(value2, value1)); + assertEquals(1, notifications.size()); + MonitorNotification n = (MonitorNotification) notifications.get(0); + notifications.clear(); + assertEquals(monitorName, n.getSource()); + assertEquals(monitoredName, n.getObservedObject()); + assertEquals("Value", n.getObservedAttribute()); + assertEquals(type, n.getType()); + assertEquals(sub(value2, value1), n.getDerivedGauge()); } /** @@ -1209,22 +2260,44 @@ throws Exception { assertEquals(0, notifications.size()); - server.setAttribute(monitoredName, new Attribute("Value", unexpected)); - - // Allow the monitor to get the value - monitored.unlock("set"); + setValue(unexpected); waitCycle(); - - // Make sure the monitor has done the get and is waiting for the next one - monitored.lock("set"); + assertEquals(0, notifications.size()); checkGauge(unexpected); + } - // Give the monitor another change to spot further notifications - monitored.unlock("set"); + /** + * Don't expect a notification + */ + private void dontExpectDiff(Object value1, Object value2) + throws Exception + { + waitCycle(); + notifications.clear(); + setValue(value1); waitCycle(); - monitored.lock("set"); assertEquals(0, notifications.size()); - monitored.unlock("set"); + setValue(value2); + waitCycle(); + assertEquals(0, notifications.size()); + checkGauge(sub(value2, value1)); + } + + /** + * Don't expect a notification + */ + private void dontExpectDiffModulus(Object value1, Object value2, Object value3) + throws Exception + { + waitCycle(); + notifications.clear(); + setValue(value1); + waitCycle(); + assertEquals(0, notifications.size()); + setValue(value2); + waitCycle(); + assertEquals(0, notifications.size()); + checkGauge(add(sub(value2, value1), value3)); } /** @@ -1244,25 +2317,90 @@ } /** - * Sync with the notification handler - */ - private void sync(boolean getWorks) - { - // Unlock from the set operation - monitored.unlock("set"); - // Allow the monitor to get the attribute, unless get errors - if (getWorks) - waitCycle(); - // Make sure the monitor is waiting to try again - waitCycle(); - } - - /** * Wait one cycle of the monitor */ private void waitCycle() { - monitored.lock("set"); monitored.unlock("set"); + monitored.lock("set"); } + + /** + * Add two numbers. + * @param value1 the first value. + * @param value2 the second value. + * @return value1 + value2 of the correct type + */ + private Number add(Object value1, Object value2) + { + if (value1 instanceof Byte) + return new Byte((byte) (((Byte)value1).byteValue() + ((Byte)value2).byteValue())); + if (value1 instanceof Integer) + return new Integer(((Integer)value1).intValue() + ((Integer)value2).intValue()); + if (value1 instanceof Short) + return new Short((short) (((Short)value1).shortValue() + ((Short)value2).shortValue())); + if (value1 instanceof Long) + return new Long(((Long)value1).longValue() + ((Long)value2).longValue()); + fail("You idiot!"); + return null; + } + + /** + * Subtract two numbers. + * @param value1 the first value. + * @param value2 the second value. + * @return value1 - value2 of the correct type + */ + private Number sub(Object value1, Object value2) + { + if (value1 instanceof Byte) + return new Byte((byte) (((Byte)value1).byteValue() - ((Byte)value2).byteValue())); + if (value1 instanceof Integer) + return new Integer(((Integer)value1).intValue() - ((Integer)value2).intValue()); + if (value1 instanceof Short) + return new Short((short) (((Short)value1).shortValue() - ((Short)value2).shortValue())); + if (value1 instanceof Long) + return new Long(((Long)value1).longValue() - ((Long)value2).longValue()); + fail("You idiot!"); + return null; + } + + /** + * Check the notification info is as expected + * + * @param mbni the received notification info + * @param expected the expected notifications + */ + private void checkNotificationInfo(String type, + MBeanNotificationInfo[] mbni, + HashSet expected) + { + String[] types = mbni[0].getNotifTypes(); + for (int i = 0; i < types.length; i++) + if (expected.remove(types[i]) == false) + fail(type + ": didn't expect notification type " + types[i]); + Iterator iterator = expected.iterator(); + while (iterator.hasNext()) + fail(type + ": expected notification type " + iterator.next()); + } + + /** + * Serialize/Derserialize the notification + * + * @param n the notification + * @return the notification after serialize/deserialze + */ + private MonitorNotification serializeDeserialize(MonitorNotification n) + throws Exception + { + // Serialize it + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(n); + + // Deserialize it + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + ObjectInputStream ois = new ObjectInputStream(bais); + return (MonitorNotification) ois.readObject(); + } }
_______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development