--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/management/monitor/NullAttributeValueTest.java Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,353 @@
+/*
+ * Copyright 2005 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6200031
+ * @summary Test that the counter/gauge/string monitors emit a
+ * jmx.monitor.error.type notification when the attribute
+ * being monitored returns a null value.
+ * @author Luis-Miguel Alventosa
+ * @run clean NullAttributeValueTest
+ * @run build NullAttributeValueTest
+ * @run main NullAttributeValueTest
+ */
+
+import javax.management.*;
+import javax.management.monitor.*;
+
+public class NullAttributeValueTest implements NotificationListener {
+
+ // Flag to notify that a message has been received
+ private boolean messageReceived = false;
+
+ // MBean class
+ public class ObservedObject implements ObservedObjectMBean {
+ public Integer getIntegerAttribute() {
+ return null;
+ }
+ public String getStringAttribute() {
+ return null;
+ }
+ }
+
+ // MBean interface
+ public interface ObservedObjectMBean {
+ public Integer getIntegerAttribute();
+ public String getStringAttribute();
+ }
+
+ // Notification handler
+ public void handleNotification(Notification notification,
+ Object handback) {
+ MonitorNotification n = (MonitorNotification) notification;
+ echo("\tInside handleNotification...");
+ String type = n.getType();
+ try {
+ if (type.equals(
+ MonitorNotification.OBSERVED_ATTRIBUTE_TYPE_ERROR)) {
+ echo("\t\t" + n.getObservedAttribute() + " is null");
+ echo("\t\tDerived Gauge = " + n.getDerivedGauge());
+ echo("\t\tTrigger = " + n.getTrigger());
+ messageReceived = true;
+ } else {
+ echo("\t\tSkipping notification of type: " + type);
+ }
+ } catch (Exception e) {
+ echo("\tError in handleNotification!");
+ e.printStackTrace(System.out);
+ }
+ }
+
+ /**
+ * Update the counter and check for notifications
+ */
+ public int counterMonitorNotification() throws Exception {
+
+ CounterMonitor counterMonitor = null;
+ try {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ String domain = server.getDefaultDomain();
+
+ // Create a new CounterMonitor MBean and add it to the MBeanServer.
+ //
+ echo(">>> CREATE a new CounterMonitor MBean");
+ ObjectName counterMonitorName = new ObjectName(
+ domain + ":type=" + CounterMonitor.class.getName());
+ counterMonitor = new CounterMonitor();
+ server.registerMBean(counterMonitor, counterMonitorName);
+
+ echo(">>> ADD a listener to the CounterMonitor");
+ counterMonitor.addNotificationListener(this, null, null);
+
+ //
+ // MANAGEMENT OF A STANDARD MBEAN
+ //
+
+ echo(">>> CREATE a new ObservedObject MBean");
+
+ ObjectName obsObjName =
+ ObjectName.getInstance(domain + ":type=ObservedObject");
+ ObservedObject obsObj = new ObservedObject();
+ server.registerMBean(obsObj, obsObjName);
+
+ echo(">>> SET the attributes of the CounterMonitor:");
+
+ counterMonitor.addObservedObject(obsObjName);
+ echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
+
+ counterMonitor.setObservedAttribute("IntegerAttribute");
+ echo("\tATTRIBUTE \"ObservedAttribute\" = IntegerAttribute");
+
+ counterMonitor.setNotify(true);
+ echo("\tATTRIBUTE \"NotifyFlag\" = true");
+
+ Integer threshold = 2;
+ counterMonitor.setInitThreshold(threshold);
+ echo("\tATTRIBUTE \"Threshold\" = " + threshold);
+
+ int granularityperiod = 500;
+ counterMonitor.setGranularityPeriod(granularityperiod);
+ echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
+
+ echo(">>> START the CounterMonitor");
+ counterMonitor.start();
+
+ // Wait for granularity period (multiplied by 2 for sure)
+ //
+ Thread.sleep(granularityperiod * 2);
+
+ // Check if notification was received
+ //
+ if (messageReceived) {
+ echo("\tOK: CounterMonitor notification received");
+ } else {
+ echo("\tKO: CounterMonitor notification missed or not emitted");
+ return 1;
+ }
+ } finally {
+ if (counterMonitor != null)
+ counterMonitor.stop();
+ }
+
+ return 0;
+ }
+
+ /**
+ * Update the gauge and check for notifications
+ */
+ public int gaugeMonitorNotification() throws Exception {
+
+ GaugeMonitor gaugeMonitor = null;
+ try {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ String domain = server.getDefaultDomain();
+
+ // Create a new GaugeMonitor MBean and add it to the MBeanServer.
+ //
+ echo(">>> CREATE a new GaugeMonitor MBean");
+ ObjectName gaugeMonitorName = new ObjectName(
+ domain + ":type=" + GaugeMonitor.class.getName());
+ gaugeMonitor = new GaugeMonitor();
+ server.registerMBean(gaugeMonitor, gaugeMonitorName);
+
+ echo(">>> ADD a listener to the GaugeMonitor");
+ gaugeMonitor.addNotificationListener(this, null, null);
+
+ //
+ // MANAGEMENT OF A STANDARD MBEAN
+ //
+
+ echo(">>> CREATE a new ObservedObject MBean");
+
+ ObjectName obsObjName =
+ ObjectName.getInstance(domain + ":type=ObservedObject");
+ ObservedObject obsObj = new ObservedObject();
+ server.registerMBean(obsObj, obsObjName);
+
+ echo(">>> SET the attributes of the GaugeMonitor:");
+
+ gaugeMonitor.addObservedObject(obsObjName);
+ echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
+
+ gaugeMonitor.setObservedAttribute("IntegerAttribute");
+ echo("\tATTRIBUTE \"ObservedAttribute\" = IntegerAttribute");
+
+ gaugeMonitor.setNotifyLow(false);
+ gaugeMonitor.setNotifyHigh(true);
+ echo("\tATTRIBUTE \"Notify Low Flag\" = false");
+ echo("\tATTRIBUTE \"Notify High Flag\" = true");
+
+ Double highThreshold = 3.0, lowThreshold = 2.5;
+ gaugeMonitor.setThresholds(highThreshold, lowThreshold);
+ echo("\tATTRIBUTE \"Low Threshold\" = " + lowThreshold);
+ echo("\tATTRIBUTE \"High Threshold\" = " + highThreshold);
+
+ int granularityperiod = 500;
+ gaugeMonitor.setGranularityPeriod(granularityperiod);
+ echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
+
+ echo(">>> START the GaugeMonitor");
+ gaugeMonitor.start();
+
+ // Wait for granularity period (multiplied by 2 for sure)
+ //
+ Thread.sleep(granularityperiod * 2);
+
+ // Check if notification was received
+ //
+ if (messageReceived) {
+ echo("\tOK: GaugeMonitor notification received");
+ } else {
+ echo("\tKO: GaugeMonitor notification missed or not emitted");
+ return 1;
+ }
+ } finally {
+ if (gaugeMonitor != null)
+ gaugeMonitor.stop();
+ }
+
+ return 0;
+ }
+
+ /**
+ * Update the string and check for notifications
+ */
+ public int stringMonitorNotification() throws Exception {
+
+ StringMonitor stringMonitor = null;
+ try {
+ MBeanServer server = MBeanServerFactory.newMBeanServer();
+
+ String domain = server.getDefaultDomain();
+
+ // Create a new StringMonitor MBean and add it to the MBeanServer.
+ //
+ echo(">>> CREATE a new StringMonitor MBean");
+ ObjectName stringMonitorName = new ObjectName(
+ domain + ":type=" + StringMonitor.class.getName());
+ stringMonitor = new StringMonitor();
+ server.registerMBean(stringMonitor, stringMonitorName);
+
+ echo(">>> ADD a listener to the StringMonitor");
+ stringMonitor.addNotificationListener(this, null, null);
+
+ //
+ // MANAGEMENT OF A STANDARD MBEAN
+ //
+
+ echo(">>> CREATE a new ObservedObject MBean");
+
+ ObjectName obsObjName =
+ ObjectName.getInstance(domain + ":type=ObservedObject");
+ ObservedObject obsObj = new ObservedObject();
+ server.registerMBean(obsObj, obsObjName);
+
+ echo(">>> SET the attributes of the StringMonitor:");
+
+ stringMonitor.addObservedObject(obsObjName);
+ echo("\tATTRIBUTE \"ObservedObject\" = " + obsObjName);
+
+ stringMonitor.setObservedAttribute("StringAttribute");
+ echo("\tATTRIBUTE \"ObservedAttribute\" = StringAttribute");
+
+ stringMonitor.setNotifyMatch(true);
+ echo("\tATTRIBUTE \"NotifyMatch\" = true");
+
+ stringMonitor.setNotifyDiffer(false);
+ echo("\tATTRIBUTE \"NotifyDiffer\" = false");
+
+ stringMonitor.setStringToCompare("do_match_now");
+ echo("\tATTRIBUTE \"StringToCompare\" = \"do_match_now\"");
+
+ int granularityperiod = 500;
+ stringMonitor.setGranularityPeriod(granularityperiod);
+ echo("\tATTRIBUTE \"GranularityPeriod\" = " + granularityperiod);
+
+ echo(">>> START the StringMonitor");
+ stringMonitor.start();
+
+ // Wait for granularity period (multiplied by 2 for sure)
+ //
+ Thread.sleep(granularityperiod * 2);
+
+ // Check if notification was received
+ //
+ if (messageReceived) {
+ echo("\tOK: StringMonitor notification received");
+ } else {
+ echo("\tKO: StringMonitor notification missed or not emitted");
+ return 1;
+ }
+ } finally {
+ if (stringMonitor != null)
+ stringMonitor.stop();
+ }
+
+ return 0;
+ }
+
+ /**
+ * Test the monitor notifications.
+ */
+ public int monitorNotifications() throws Exception {
+ echo(">>> ----------------------------------------");
+ messageReceived = false;
+ int error = counterMonitorNotification();
+ echo(">>> ----------------------------------------");
+ messageReceived = false;
+ error += gaugeMonitorNotification();
+ echo(">>> ----------------------------------------");
+ messageReceived = false;
+ error += stringMonitorNotification();
+ echo(">>> ----------------------------------------");
+ return error;
+ }
+
+ /*
+ * Print message
+ */
+ private static void echo(String message) {
+ System.out.println(message);
+ }
+
+ /*
+ * Standalone entry point.
+ *
+ * Run the test and report to stdout.
+ */
+ public static void main (String args[]) throws Exception {
+ NullAttributeValueTest test = new NullAttributeValueTest();
+ int error = test.monitorNotifications();
+ if (error > 0) {
+ echo(">>> Unhappy Bye, Bye!");
+ throw new IllegalStateException("Test FAILED: Didn't get all " +
+ "the notifications that were " +
+ "expected by the test!");
+ } else {
+ echo(">>> Happy Bye, Bye!");
+ }
+ }
+}