/* * 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.query; import junit.framework.TestCase; import java.util.Iterator; import java.util.Set; import java.util.HashSet; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectInstance; import javax.management.ObjectName; import org.jboss.test.jmx.compliance.query.support.Trivial; /** * Object Name Query tests.<p> * * TODO: More tests, more systematic? * * @author <a href="mailto:Adrian.Brock@HappeningTimes.com">Adrian Brock</a>. */ public class QueryMBeansObjectNameOnlyTestCase extends TestCase { // Attributes ---------------------------------------------------------------- /** * The number of objects registered in a server */ int implSize; // Constructor --------------------------------------------------------------- /** * Construct the test */ public QueryMBeansObjectNameOnlyTestCase(String s) { super(s); // Determine the number of objects in the implementation MBeanServer server = MBeanServerFactory.createMBeanServer(); implSize = server.getMBeanCount().intValue(); MBeanServerFactory.releaseMBeanServer(server); } // Tests --------------------------------------------------------------------- /** * Test single bean found. */ public void testExactFound() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("QueryMBeans"); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance1"))); server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance2")); server.registerMBean(new Trivial(), new ObjectName("Domain2:type=instance1")); server.registerMBean(new Trivial(), new ObjectName("Domain3:type=instance1")); resultMBeans = server.queryMBeans(new ObjectName("Domain1:type=instance1"), null); resultNames = server.queryNames(new ObjectName("Domain1:type=instance1"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * Test single bean not found. */ public void testExactNotFound() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("QueryMBeans"); server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance1")); server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance2")); server.registerMBean(new Trivial(), new ObjectName("Domain2:type=instance1")); server.registerMBean(new Trivial(), new ObjectName("Domain3:type=instance1")); resultMBeans = server.queryMBeans(new ObjectName("Domain2:type=instance2"), null); resultNames = server.queryNames(new ObjectName("Domain2:type=instance2"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * Test Get All. */ public void testGetAllMBeans() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("QueryMBeans"); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance2"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain2:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain3:type=instance1"))); resultMBeans = server.queryMBeans(new ObjectName("*:*"), null); resultNames = server.queryNames(new ObjectName("*:*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, implSize); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * Test Get All. */ public void testGetAllMBeans2() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("QueryMBeans"); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance2"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain2:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain3:type=instance1"))); resultMBeans = server.queryMBeans(new ObjectName(""), null); resultNames = server.queryNames(new ObjectName(""), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, implSize); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * Test Get All. */ public void testGetAllMBeans3() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("QueryMBeans"); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance2"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain2:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain3:type=instance1"))); resultMBeans = server.queryMBeans(null, null); resultNames = server.queryNames(null, null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, implSize); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * Test one domain. */ public void testGetOneDomain() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("QueryMBeans"); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance2"))); server.registerMBean(new Trivial(), new ObjectName("Domain2:type=instance1")); server.registerMBean(new Trivial(), new ObjectName("Domain3:type=instance1")); resultMBeans = server.queryMBeans(new ObjectName("Domain1:*"), null); resultNames = server.queryNames(new ObjectName("Domain1:*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * Test default domain. */ public void testGetDefaultDomain() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("Domain1"); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance2"))); server.registerMBean(new Trivial(), new ObjectName("Domain2:type=instance1")); server.registerMBean(new Trivial(), new ObjectName("Domain3:type=instance1")); resultMBeans = server.queryMBeans(new ObjectName(":*"), null); resultNames = server.queryNames(new ObjectName(":*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * Test one property. */ public void testGetOneProperty() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("QueryMBeans"); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance1"))); server.registerMBean(new Trivial(), new ObjectName("Domain1:type=instance2")); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain2:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Domain3:type=instance1"))); resultMBeans = server.queryMBeans(new ObjectName("*:type=instance1"), null); resultNames = server.queryNames(new ObjectName("*:type=instance1"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * This one is from the spec. */ public void testSpecAll() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer(); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Printer,type=laser"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=laser,date=1993"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Socrates:description=Printer,type=laser,date=1993"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=ink"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Disk,capacity=2"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Disk,capacity=1"))); resultMBeans = server.queryMBeans(new ObjectName("*:*"), null); resultNames = server.queryNames(new ObjectName("*:*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, implSize); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * This one is from the spec. */ public void testSpecDefault() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer(); server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Printer,type=laser")); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=laser,date=1993"))); server.registerMBean(new Trivial(), new ObjectName("Socrates:description=Printer,type=laser,date=1993")); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=ink"))); server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Disk,capacity=2")); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Disk,capacity=1"))); resultMBeans = server.queryMBeans(new ObjectName(":*"), null); resultNames = server.queryNames(new ObjectName(":*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * This one is from the spec. */ public void testSpecMyDomain() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer(); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Printer,type=laser"))); server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=laser,date=1993")); server.registerMBean(new Trivial(), new ObjectName("Socrates:description=Printer,type=laser,date=1993")); server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=ink")); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Disk,capacity=2"))); server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Disk,capacity=1")); resultMBeans = server.queryMBeans(new ObjectName("MyDomain:*"), null); resultNames = server.queryNames(new ObjectName("MyDomain:*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * This one is from the spec. */ public void testSpecAnyAnyDomain() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer(); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Printer,type=laser"))); server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=laser,date=1993")); server.registerMBean(new Trivial(), new ObjectName("Socrates:description=Printer,type=laser,date=1993")); server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=ink")); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Disk,capacity=2"))); server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Disk,capacity=1")); resultMBeans = server.queryMBeans(new ObjectName("??Domain:*"), null); resultNames = server.queryNames(new ObjectName("??Domain:*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * This one is from the spec. */ public void testAsteriskDomAsterisk() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer(); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Printer,type=laser"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=laser,date=1993"))); server.registerMBean(new Trivial(), new ObjectName("Socrates:description=Printer,type=laser,date=1993")); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=ink"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Disk,capacity=2"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Disk,capacity=1"))); resultMBeans = server.queryMBeans(new ObjectName("*Dom*:*"), null); resultNames = server.queryNames(new ObjectName("*Dom*:*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * This one is from the spec. */ public void testSpecLaserPrinters() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer(); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Printer,type=laser"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=laser,date=1993"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Socrates:description=Printer,type=laser,date=1993"))); server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=ink")); server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Disk,capacity=2")); server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Disk,capacity=1")); resultMBeans = server.queryMBeans(new ObjectName("*:description=Printer,type=laser,*"), null); resultNames = server.queryNames(new ObjectName("*:description=Printer,type=laser,*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * This one is from the spec. */ public void testSpecPrinters() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer(); instances.add(server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Printer,type=laser"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=laser,date=1993"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("Socrates:description=Printer,type=laser,date=1993"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Printer,type=ink"))); server.registerMBean(new Trivial(), new ObjectName("MyDomain:description=Disk,capacity=2")); server.registerMBean(new Trivial(), new ObjectName("DefaultDomain:description=Disk,capacity=2")); resultMBeans = server.queryMBeans(new ObjectName("*:description=Printer,*"), null); resultNames = server.queryNames(new ObjectName("*:description=Printer,*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * Test suffix asterisk on domain. */ public void testSuffixMatchManyDomain() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("QueryMBeans"); instances.add(server.registerMBean(new Trivial(), new ObjectName("DomainA123:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DomainA321:type=instance2"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DomainA2224:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DomainA3:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("DomainA:type=instance1"))); server.registerMBean(new Trivial(), new ObjectName("Domain:type=instance1")); server.registerMBean(new Trivial(), new ObjectName("Dom:type=instance1")); resultMBeans = server.queryMBeans(new ObjectName("DomainA*:*"), null); resultNames = server.queryNames(new ObjectName("DomainA*:*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } /** * Test prefix asterisk on domain. */ public void testPrefixMatchManyDomain() { MBeanServer server = null; HashSet instances = new HashSet(); Set resultMBeans = null; Set resultNames = null; try { server = MBeanServerFactory.createMBeanServer("QueryMBeans"); instances.add(server.registerMBean(new Trivial(), new ObjectName("123ADomain:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("321ADomain:type=instance2"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("2224ADomain:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("3ADomain:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("3ADomai123ADomain:type=instance1"))); instances.add(server.registerMBean(new Trivial(), new ObjectName("ADomain:type=instance1"))); server.registerMBean(new Trivial(), new ObjectName("Domain:type=instance1")); server.registerMBean(new Trivial(), new ObjectName("ADomai:type=instance1")); server.registerMBean(new Trivial(), new ObjectName("main:type=instance1")); resultMBeans = server.queryMBeans(new ObjectName("*ADomain:*"), null); resultNames = server.queryNames(new ObjectName("*ADomain:*"), null); } catch (Exception e) { fail(e.toString()); } checkit(resultMBeans, resultNames, instances, 0); if (server != null) MBeanServerFactory.releaseMBeanServer(server); } // Support ---------------------------------------------------------------- /** * Check the resultMBeans */ private void checkit(Set resultMBeans, Set resultNames, HashSet expected, int others) { // Quick tests assertEquals(expected.size() + others, resultMBeans.size()); assertEquals(expected.size() + others, resultNames.size()); // Get the expected ObjectNames HashSet expectedNames = new HashSet(); Iterator iterator = expected.iterator(); while (iterator.hasNext()) { expectedNames.add(((ObjectInstance) iterator.next()).getObjectName()); } // Check resultMBeans iterator = resultMBeans.iterator(); while (iterator.hasNext()) { ObjectInstance instance = (ObjectInstance) iterator.next(); Iterator iterator2 = expected.iterator(); boolean found = false; while (iterator2.hasNext()) { if (iterator2.next().equals(instance)) { iterator2.remove(); found = true; break; } } if (found == false && instance.getObjectName().getDomain().equals("JMImplementation") == false) fail("Unexpected instance " + instance.getObjectName()); } // Check resultNames iterator = resultNames.iterator(); while (iterator.hasNext()) { ObjectName name = (ObjectName) iterator.next(); Iterator iterator2 = expectedNames.iterator(); boolean found = false; while (iterator2.hasNext()) { if (iterator2.next().equals(name)) { iterator2.remove(); found = true; break; } } if (found == false && name.getDomain().equals("JMImplementation") == false) fail("Unexpected name " + name); } } }