package org.jolokia.util; import java.lang.management.ManagementFactory; import javax.management.*; import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; /** * @author roland * @since 07.03.13 */ public class JmxUtilTest implements NotificationListener { private int counter = 0; @Test public void newObjectName() throws MalformedObjectNameException { ObjectName name = JmxUtil.newObjectName("java.lang:type=blub"); assertEquals(name, new ObjectName("java.lang:type=blub")); } @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ".*Invalid.*sogehtsnicht.*") public void invalidObjectName() { JmxUtil.newObjectName("bla:blub:name=sogehtsnicht"); } @Test public void addNotificationListenerTest() throws NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, InstanceNotFoundException { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); counter = 0; JmxUtil.addMBeanRegistrationListener(server,this,null); ObjectName name = JmxUtil.newObjectName("test:name=demo"); server.registerMBean(new Bla(),name); assertEquals(counter, 1); server.unregisterMBean(name); assertEquals(counter, 2); JmxUtil.removeMBeanRegistrationListener(server,this); server.registerMBean(new Bla(),name); assertEquals(counter, 2); server.unregisterMBean(name); assertEquals(counter, 2); counter = 0; } @Test public void addNotificationListenerTestWithFilter() throws MBeanRegistrationException, InstanceNotFoundException, InstanceAlreadyExistsException, NotCompliantMBeanException { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); ObjectName name1 = JmxUtil.newObjectName("test:name=demo"); ObjectName nameFilter = JmxUtil.newObjectName("test:name=registered"); JmxUtil.addMBeanRegistrationListener(server,this,nameFilter); counter = 0; server.registerMBean(new Bla(),name1); assertEquals(counter, 0); server.unregisterMBean(name1); assertEquals(counter, 0); server.registerMBean(new Bla(),nameFilter); assertEquals(counter, 1); server.unregisterMBean(nameFilter); assertEquals(counter, 2); JmxUtil.removeMBeanRegistrationListener(server,this); server.registerMBean(new Bla(),nameFilter); assertEquals(counter, 2); server.unregisterMBean(nameFilter); assertEquals(counter, 2); counter = 0; } @Test public void unknowListenerDeregistrationShouldBeSilentlyIgnored() { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); JmxUtil.removeMBeanRegistrationListener(server,this); } public void handleNotification(Notification notification, Object handback) { counter++; } public static class Bla implements BlaMBean {} public static interface BlaMBean {} }