blob: cfcb08884b83ed2838a181895006a18a60e88a42 [file] [log] [blame]
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 4716675
* @summary Test that relation type checking uses isInstanceOf
* @author Eamonn McManus
* @modules java.management
* @run clean RelationTypeTest
* @run build RelationTypeTest
* @run main RelationTypeTest
*/
import java.util.*;
import javax.management.*;
import javax.management.relation.*;
public class RelationTypeTest {
public static void main(String[] args) throws Exception {
System.out.println("Test that relation type checking uses " +
"isInstanceOf");
MBeanServer mbs = MBeanServerFactory.newMBeanServer();
ObjectName relSvc = new ObjectName("a:type=relationService");
mbs.createMBean("javax.management.relation.RelationService",
relSvc,
new Object[] {Boolean.TRUE},
new String[] {"boolean"});
RoleInfo leftInfo =
new RoleInfo("left", "javax.management.timer.TimerMBean");
RoleInfo rightInfo =
new RoleInfo("right", "javax.management.timer.Timer");
mbs.invoke(relSvc, "createRelationType",
new Object[] {
"typeName",
new RoleInfo[] {leftInfo, rightInfo},
},
new String[] {
"java.lang.String",
"[Ljavax.management.relation.RoleInfo;",
});
ObjectName timer1 = new ObjectName("a:type=timer,number=1");
ObjectName timer2 = new ObjectName("a:type=timer,number=2");
mbs.createMBean("javax.management.timer.Timer", timer1);
mbs.createMBean("javax.management.timer.Timer", timer2);
Role leftRole =
new Role("left", Arrays.asList(new ObjectName[] {timer1}));
Role rightRole =
new Role("right", Arrays.asList(new ObjectName[] {timer2}));
RoleList roles =
new RoleList(Arrays.asList(new Role[] {leftRole, rightRole}));
mbs.invoke(relSvc, "createRelation",
new Object[] {
"relationName",
"typeName",
roles,
},
new String[] {
"java.lang.String",
"java.lang.String",
"javax.management.relation.RoleList",
});
Map assoc =
(Map) mbs.invoke(relSvc, "findAssociatedMBeans",
new Object[] {
timer1,
"typeName",
"left",
},
new String[] {
"javax.management.ObjectName",
"java.lang.String",
"java.lang.String",
});
if (assoc.size() != 1) {
System.out.println("TEST FAILS: findAssociatedMBeans should " +
"return one association: " + assoc);
System.exit(1);
}
ArrayList list = (ArrayList) assoc.get(timer2);
if (list.size() != 1 || !list.get(0).equals("relationName")) {
System.out.println("TEST FAILS: MBean not associated as " +
"expected: " + list);
System.exit(1);
}
System.out.println("Test passes");
}
}