/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.jmx.compliance.relation; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import javax.management.MBeanServerNotification; import javax.management.ObjectName; import javax.management.relation.MBeanServerNotificationFilter; import junit.framework.TestCase; /** * MBean Server Notification Filter tests.<p> * * Test it to death.<p> * * NOTE: The tests use String literals to ensure the comparisons are * not performed on object references.<p> * * WARNING!! WARNING!! The spec says the MBeanServerNotificationFilter * accepts everything by default. The RI does exactly the opposite. * * @author <a href="mailto:Adrian.Brock@HappeningTimes.com">Adrian Brock</a>. */ public class MBeanServerNotificationFilterTestCase extends TestCase { // Attributes ---------------------------------------------------------------- MBeanServerNotificationFilter mbsnf; ObjectName on1; ObjectName on2; MBeanServerNotification n1; MBeanServerNotification n2; // Constructor --------------------------------------------------------------- /** * Construct the test */ public MBeanServerNotificationFilterTestCase(String s) { super(s); } // Tests --------------------------------------------------------------------- /** * By default all names are enabled. */ public void testDefault() { setUpTest(); mbsnf.enableObjectName(on1); mbsnf.enableObjectName(on2); assertEquals(true, mbsnf.isNotificationEnabled(n1)); assertEquals(true, mbsnf.isNotificationEnabled(n2)); } /** * Enable all */ public void testEnableAll() { setUpTest(); mbsnf.enableAllObjectNames(); assertEquals(true, mbsnf.isNotificationEnabled(n1)); assertEquals(true, mbsnf.isNotificationEnabled(n2)); } /** * Enable one */ public void testEnableOne() { setUpTest(); mbsnf.enableObjectName(on2); assertEquals(false, mbsnf.isNotificationEnabled(n1)); assertEquals(true, mbsnf.isNotificationEnabled(n2)); } /** * Disable all */ public void testDisableAll() { setUpTest(); mbsnf.enableObjectName(on1); mbsnf.disableAllObjectNames(); assertEquals(false, mbsnf.isNotificationEnabled(n1)); assertEquals(false, mbsnf.isNotificationEnabled(n2)); } /** * Disable one */ public void testDisableOne() { setUpTest(); mbsnf.enableAllObjectNames(); mbsnf.disableObjectName(on2); assertEquals(true, mbsnf.isNotificationEnabled(n1)); assertEquals(false, mbsnf.isNotificationEnabled(n2)); } /** * Test getters */ public void testGetters() { setUpTest(); try { // By default Everything disabled assertEquals(0, mbsnf.getEnabledObjectNames().size()); assertEquals(null, mbsnf.getDisabledObjectNames()); // Enabled everything mbsnf.enableAllObjectNames(); assertEquals(null, mbsnf.getEnabledObjectNames()); assertEquals(0, mbsnf.getDisabledObjectNames().size()); // Disable one mbsnf.disableObjectName(on1); assertEquals(null, mbsnf.getEnabledObjectNames()); assertEquals(1, mbsnf.getDisabledObjectNames().size()); assertEquals(on1, mbsnf.getDisabledObjectNames().elementAt(0)); // Disable everything mbsnf.disableAllObjectNames(); assertEquals(0, mbsnf.getEnabledObjectNames().size()); assertEquals(null, mbsnf.getDisabledObjectNames()); // Enable one mbsnf.enableObjectName(on1); assertEquals(1, mbsnf.getEnabledObjectNames().size()); assertEquals(null, mbsnf.getDisabledObjectNames()); assertEquals(on1, mbsnf.getEnabledObjectNames().elementAt(0)); } catch (NullPointerException e) { fail("FAILS IN RI: " + e.toString()); } } /** * Test serialization. */ public void testSerialization() { setUpTest(); // Enable only one mbsnf.enableObjectName(on2); try { // Serialize it ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(mbsnf); // Deserialize it ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); ois.readObject(); } catch (IOException ioe) { fail(ioe.toString()); } catch (ClassNotFoundException cnfe) { fail(cnfe.toString()); } // Did it work? assertEquals(false, mbsnf.isNotificationEnabled(n1)); assertEquals(true, mbsnf.isNotificationEnabled(n2)); } // Support ------------------------------------------------------------------- private void setUpTest() { mbsnf = new MBeanServerNotificationFilter(); mbsnf.enableType(MBeanServerNotification.REGISTRATION_NOTIFICATION); try { on1 = new ObjectName(":a=a"); on2 = new ObjectName(":b=b"); } catch (Exception e) { fail(e.toString()); } n1 = new MBeanServerNotification(MBeanServerNotification.REGISTRATION_NOTIFICATION, new Object(), 1, on1); n2 = new MBeanServerNotification(MBeanServerNotification.REGISTRATION_NOTIFICATION, new Object(), 2, on2); } }