KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > test > jmx > compliance > relation > RelationSupportTestCase


1 /*
2 * JBoss, Home of Professional Open Source
3 * Copyright 2005, JBoss Inc., and individual contributors as indicated
4 * by the @authors tag. See the copyright.txt in the distribution for a
5 * full listing of individual contributors.
6 *
7 * This is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as
9 * published by the Free Software Foundation; either version 2.1 of
10 * the License, or (at your option) any later version.
11 *
12 * This software is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this software; if not, write to the Free
19 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
21 */

22 package org.jboss.test.jmx.compliance.relation;
23
24 import java.util.ArrayList JavaDoc;
25 import java.util.HashMap JavaDoc;
26 import java.util.HashSet JavaDoc;
27 import java.util.Iterator JavaDoc;
28 import java.util.List JavaDoc;
29 import java.util.Map JavaDoc;
30
31 import javax.management.MBeanServer JavaDoc;
32 import javax.management.MBeanServerFactory JavaDoc;
33 import javax.management.Notification JavaDoc;
34 import javax.management.NotificationListener JavaDoc;
35 import javax.management.ObjectName JavaDoc;
36 import javax.management.relation.RelationNotification JavaDoc;
37 import javax.management.relation.RelationService JavaDoc;
38 import javax.management.relation.RelationSupport JavaDoc;
39 import javax.management.relation.Role JavaDoc;
40 import javax.management.relation.RoleInfo JavaDoc;
41 import javax.management.relation.RoleList JavaDoc;
42 import javax.management.relation.RoleResult JavaDoc;
43 import javax.management.relation.RoleUnresolved JavaDoc;
44 import javax.management.relation.RoleUnresolvedList JavaDoc;
45
46 import junit.framework.TestCase;
47
48 import org.jboss.test.jmx.compliance.relation.support.Trivial;
49
50 /**
51  * Relation Support tests
52  *
53  * @author <a HREF="mailto:Adrian.Brock@HappeningTimes.com">Adrian Brock</a>.
54  */

55 public class RelationSupportTestCase
56   extends TestCase
57 {
58
59   // Constants -----------------------------------------------------------------
60

61   // Attributes ----------------------------------------------------------------
62

63   HashMap JavaDoc services = new HashMap JavaDoc();
64
65   RoleList JavaDoc rolesA;
66   HashMap JavaDoc roleInfosA = new HashMap JavaDoc();
67   RoleList JavaDoc rolesB;
68   HashMap JavaDoc roleInfosB = new HashMap JavaDoc();
69   Role JavaDoc roleC1;
70   Role JavaDoc roleC2;
71   RoleList JavaDoc rolesC;
72   HashMap JavaDoc roleInfosC = new HashMap JavaDoc();
73   Role JavaDoc roleCX1;
74   Role JavaDoc roleCX2;
75   RoleList JavaDoc rolesCX;
76   HashMap JavaDoc roleInfosCX = new HashMap JavaDoc();
77
78   // Constructor ---------------------------------------------------------------
79

80   /**
81    * Construct the test
82    */

83   public RelationSupportTestCase(String JavaDoc s)
84   {
85     super(s);
86   }
87
88   // Tests ---------------------------------------------------------------------
89

90   /**
91    * Test the delegate constructor
92    */

93   public void testDelegateConstructor()
94   {
95     MBeanServer JavaDoc server = createMBeanServer();
96     ObjectName JavaDoc service = createRelationService("test:type=service", null);
97     createRolesB(null);
98     RelationSupport JavaDoc support = null;
99     try
100     {
101       support = new RelationSupport JavaDoc("id", service, server, "relationTypeB",
102                                     rolesB);
103     }
104     catch(Exception JavaDoc e)
105     {
106       fail(e.toString());
107     }
108     assertEquals("id", support.getRelationId());
109     assertEquals("relationTypeB", support.getRelationTypeName());
110     assertEquals("test:type=service", support.getRelationServiceName().toString());
111     RoleList JavaDoc roleList = support.retrieveAllRoles();
112     compare(rolesB, roleList);
113   }
114
115   /**
116    * Test get all roles
117    */

118   public void testGetAllRoles()
119   {
120     MBeanServer JavaDoc server = createMBeanServer();
121     ObjectName JavaDoc service = createRelationService("test:type=service", server);
122     createRelationTypeB(service);
123     createRolesB(server);
124     RoleResult JavaDoc result = null;
125     try
126     {
127       RelationSupport JavaDoc support = new RelationSupport JavaDoc("id", service, server,
128                                   "relationTypeB", rolesB);
129       addRelation(server, service, support, "test:type=support");
130       result = support.getAllRoles();
131     }
132     catch(Exception JavaDoc e)
133     {
134       fail(e.toString());
135     }
136     checkResult(result, roleInfosB, rolesB);
137   }
138
139   /**
140    * Test get referenced mbeans when not registered in service
141    */

142   public void testGetReferencedMBeansNotRegistered()
143   {
144     MBeanServer JavaDoc server = createMBeanServer();
145     ObjectName JavaDoc service = createRelationService("test:type=service", null);
146     createRelationTypeC(service);
147     createRolesC(server);
148     Map JavaDoc result = null;
149     try
150     {
151       RelationSupport JavaDoc support = new RelationSupport JavaDoc("id", service, server,
152                                   "relationTypeC", rolesC);
153       result = support.getReferencedMBeans();
154     }
155     catch(Exception JavaDoc e)
156     {
157       fail(e.toString());
158     }
159     checkMBeans(result, rolesC);
160   }
161
162   /**
163    * Test get referenced mbeans when registered in service
164    */

165   public void testGetReferencedMBeansWhenRegistered()
166   {
167     MBeanServer JavaDoc server = createMBeanServer();
168     ObjectName JavaDoc service = createRelationService("test:type=service", server);
169     createRelationTypeC(service);
170     createRolesC(server);
171     Map JavaDoc result = null;
172     try
173     {
174       RelationSupport JavaDoc support = new RelationSupport JavaDoc("id", service, server,
175                                   "relationTypeC", rolesC);
176       addRelation(server, service, support, "test:type=support");
177       result = support.getReferencedMBeans();
178     }
179     catch(Exception JavaDoc e)
180     {
181       fail(e.toString());
182     }
183     checkMBeans(result, rolesC);
184   }
185
186   /**
187    * Test get Role
188    */

189   public void testGetRole()
190   {
191     MBeanServer JavaDoc server = createMBeanServer();
192     ObjectName JavaDoc service = createRelationService("test:type=service", server);
193     createRelationTypeC(service);
194     createRolesC(server);
195     List JavaDoc result = null;
196     try
197     {
198       RelationSupport JavaDoc support = new RelationSupport JavaDoc("id", service, server,
199                                   "relationTypeC", rolesC);
200       addRelation(server, service, support, "test:type=support");
201       result = support.getRole("roleC1");
202     }
203     catch(Exception JavaDoc e)
204     {
205       fail(e.toString());
206     }
207     compareListOfObjectNames(getRole(rolesC, "roleC1").getRoleValue(), result);
208   }
209
210   /**
211    * Test get Role cardinality when not registered
212    */

213   public void testGetRoleCardinalityUnregistered()
214   {
215     MBeanServer JavaDoc server = createMBeanServer();
216     ObjectName JavaDoc service = createRelationService("test:type=service", null);
217     createRolesC(null);
218     Integer JavaDoc result = null;
219     RelationSupport JavaDoc support = null;
220     try
221     {
222       support = new RelationSupport JavaDoc("id", service, server,
223                                   "relationTypeC", rolesC);
224       result = support.getRoleCardinality("roleC1");
225     }
226     catch(Exception JavaDoc e)
227     {
228       fail(e.toString());
229     }
230     assertEquals(2, result.intValue());
231
232     try
233     {
234       result = support.getRoleCardinality("roleC2");
235     }
236     catch(Exception JavaDoc e)
237     {
238       fail(e.toString());
239     }
240     assertEquals(3, result.intValue());
241   }
242
243   /**
244    * Test get Role cardinality registered
245    */

246   public void testGetRoleCardinalityRegistered()
247   {
248     MBeanServer JavaDoc server = createMBeanServer();
249     ObjectName JavaDoc service = createRelationService("test:type=service", server);
250     createRelationTypeC(service);
251     createRolesC(server);
252     Integer JavaDoc result = null;
253     RelationSupport JavaDoc support = null;
254     try
255     {
256       support = new RelationSupport JavaDoc("id", service, server,
257                                   "relationTypeC", rolesC);
258       addRelation(server, service, support, "test:type=support");
259       result = support.getRoleCardinality("roleC1");
260     }
261     catch(Exception JavaDoc e)
262     {
263       fail(e.toString());
264     }
265     assertEquals(2, result.intValue());
266
267     try
268     {
269       result = support.getRoleCardinality("roleC2");
270     }
271     catch(Exception JavaDoc e)
272     {
273       fail(e.toString());
274     }
275     assertEquals(3, result.intValue());
276   }
277
278   /**
279    * Test get Roles
280    */

281   public void testGetRoles()
282   {
283     MBeanServer JavaDoc server = createMBeanServer();
284     ObjectName JavaDoc service = createRelationService("test:type=service", server);
285     createRelationTypeC(service);
286     createRolesC(server);
287     RoleResult JavaDoc result = null;
288     RelationSupport JavaDoc support = null;
289     try
290     {
291       support = new RelationSupport JavaDoc("id", service, server,
292                                   "relationTypeC", rolesC);
293       addRelation(server, service, support, "test:type=support");
294       result = support.getRoles(new String JavaDoc[] {"roleC1", "roleC2" });
295     }
296     catch(Exception JavaDoc e)
297     {
298       fail(e.toString());
299     }
300     checkResult(result, roleInfosC, rolesC);
301
302     try
303     {
304       result = support.getRoles(new String JavaDoc[] {"roleC1" });
305     }
306     catch(Exception JavaDoc e)
307     {
308       fail(e.toString());
309     }
310     RoleList JavaDoc resolved = result.getRoles();
311     assertEquals(1, resolved.size());
312     assertEquals(0, result.getRolesUnresolved().size());
313     compare(getRole(rolesC, "roleC1"), (Role JavaDoc) resolved.get(0));
314
315     try
316     {
317       result = support.getRoles(new String JavaDoc[] {"roleC2" });
318     }
319     catch(Exception JavaDoc e)
320     {
321       fail(e.toString());
322     }
323     RoleUnresolvedList JavaDoc unresolved = result.getRolesUnresolved();
324     assertEquals(0, result.getRoles().size());
325     assertEquals(1, unresolved.size());
326     assertEquals("roleC2", ((RoleUnresolved JavaDoc)unresolved.get(0)).getRoleName());
327   }
328
329   /**
330    * Test relation service flag
331    */

332   public void testRelationServiceFlag()
333   {
334     MBeanServer JavaDoc server = createMBeanServer();
335     ObjectName JavaDoc service = createRelationService("test:type=service", null);
336     createRolesB(null);
337     RelationSupport JavaDoc support = null;
338     try
339     {
340       support = new RelationSupport JavaDoc("id", service, server, "relationTypeB",
341                                     rolesB);
342     }
343     catch(Exception JavaDoc e)
344     {
345       fail(e.toString());
346     }
347     assertEquals(false, support.isInRelationService().booleanValue());
348     support.setRelationServiceManagementFlag(new Boolean JavaDoc(true));
349     assertEquals(true, support.isInRelationService().booleanValue());
350     support.setRelationServiceManagementFlag(new Boolean JavaDoc(false));
351     assertEquals(false, support.isInRelationService().booleanValue());
352   }
353
354   /**
355    * Test retrieve all roles when unregistered
356    */

357   public void testRetrieveAllRolesUnRegistered()
358   {
359     MBeanServer JavaDoc server = createMBeanServer();
360     ObjectName JavaDoc service = createRelationService("test:type=service", null);
361     createRolesB(null);
362     RoleList JavaDoc result = null;
363     try
364     {
365       RelationSupport JavaDoc support = new RelationSupport JavaDoc("id", service, server,
366                                   "relationTypeB", rolesB);
367       result = support.retrieveAllRoles();
368     }
369     catch(Exception JavaDoc e)
370     {
371       fail(e.toString());
372     }
373     compare(rolesB, result);
374   }
375
376   /**
377    * Test retrieve all roles registered
378    */

379   public void testRetrieveAllRolesRegistered()
380   {
381     MBeanServer JavaDoc server = createMBeanServer();
382     ObjectName JavaDoc service = createRelationService("test:type=service", server);
383     createRelationTypeB(service);
384     createRolesB(server);
385     RoleList JavaDoc result = null;
386     try
387     {
388       RelationSupport JavaDoc support = new RelationSupport JavaDoc("id", service, server,
389                                   "relationTypeB", rolesB);
390       addRelation(server, service, support, "test:type=support");
391       result = support.retrieveAllRoles();
392     }
393     catch(Exception JavaDoc e)
394     {
395       fail(e.toString());
396     }
397     compare(rolesB, result);
398   }
399
400   /**
401    * Test set a role
402    */

403   public void testSetRole()
404   {
405       MBeanServer JavaDoc server = MBeanServerFactory.createMBeanServer();
406       try
407       {
408          ObjectName JavaDoc service = createRelationService("test:type=service", server);
409          createRelationTypeC(service);
410          createRolesC(server);
411          createRolesCX(server);
412          RelationSupport JavaDoc support = null;
413          ObjectName JavaDoc on = null;
414          Listener JavaDoc listener = new Listener JavaDoc(RelationNotification.RELATION_MBEAN_UPDATE);
415          try
416          {
417             support = new RelationSupport JavaDoc("id1", service, server,
418                                           "relationTypeC", rolesC);
419             addRelation(server, service, support, "test:type=support1");
420             server.addNotificationListener(service, listener, null, null);
421             support.setRole(roleCX2);
422             on = new ObjectName JavaDoc("test:type=support1");
423          }
424          catch(Exception JavaDoc e)
425          {
426             fail(e.toString());
427          }
428          RoleList JavaDoc shouldBe = new RoleList JavaDoc();
429          shouldBe.add(roleC1);
430          shouldBe.add(roleCX2);
431          compare(shouldBe, support.retrieveAllRoles());
432          RelationNotification JavaDoc rn = listener.check(1);
433          assertEquals(new ArrayList JavaDoc(), rn.getMBeansToUnregister());
434          assertEquals(roleCX2.getRoleValue(), rn.getNewRoleValue());
435          assertEquals(on, rn.getObjectName());
436          assertEquals(roleC2.getRoleValue(), rn.getOldRoleValue());
437          assertEquals("id1", rn.getRelationId());
438          assertEquals("relationTypeC", rn.getRelationTypeName());
439          assertEquals("roleC2", rn.getRoleName());
440       }
441       finally
442       {
443          MBeanServerFactory.releaseMBeanServer(server);
444       }
445   }
446
447   /**
448    * Test set roles
449    * @info.todo different permutations
450    */

451   public void testSetRoles()
452   {
453       MBeanServer JavaDoc server = MBeanServerFactory.createMBeanServer();
454       try
455       {
456          ObjectName JavaDoc service = createRelationService("test:type=service", server);
457          createRelationTypeC(service);
458          createRolesC(server);
459          createRolesCX(server);
460          RelationSupport JavaDoc support = null;
461          Listener JavaDoc listener = new Listener JavaDoc(RelationNotification.RELATION_MBEAN_UPDATE);
462          RoleList JavaDoc shouldBe = new RoleList JavaDoc();
463          shouldBe.add(roleC1);
464          shouldBe.add(roleCX2);
465          try
466          {
467             support = new RelationSupport JavaDoc("id1", service, server,
468                                           "relationTypeC", rolesC);
469             addRelation(server, service, support, "test:type=support1");
470             server.addNotificationListener(service, listener, null, null);
471             
472             support.setRoles(shouldBe);
473          }
474          catch(Exception JavaDoc e)
475          {
476             fail(e.toString());
477          }
478          compare(shouldBe, support.retrieveAllRoles());
479          listener.check(1);
480       }
481       finally
482       {
483          MBeanServerFactory.releaseMBeanServer(server);
484       }
485   }
486
487   /**
488    * Test error handling
489    */

490   public void testErrors()
491   {
492 // TODO !!!!!!!!
493
}
494
495   // Support -------------------------------------------------------------------
496

497   private MBeanServer JavaDoc createMBeanServer()
498   {
499       return MBeanServerFactory.createMBeanServer();
500   }
501
502   private ObjectName JavaDoc createRelationService(String JavaDoc name, MBeanServer JavaDoc server)
503   {
504     ObjectName JavaDoc result = null;
505     RelationService JavaDoc relationService = new RelationService JavaDoc(true);
506     try
507     {
508       result = new ObjectName JavaDoc(name);
509       services.put(result, relationService);
510       if (server !=null)
511         server.registerMBean(relationService, result);
512     }
513     catch(Exception JavaDoc e)
514     {
515       fail(e.toString());
516     }
517     return result;
518   }
519
520   private ObjectName JavaDoc addRelation(MBeanServer JavaDoc server, ObjectName JavaDoc service,
521                                  RelationSupport JavaDoc support, String JavaDoc name)
522   {
523     ObjectName JavaDoc result = null;
524     try
525     {
526       result = new ObjectName JavaDoc(name);
527       server.registerMBean(support, result);
528       if (service != null)
529       {
530         RelationService JavaDoc relationService = (RelationService JavaDoc) services.get(service);
531         relationService.addRelation(result);
532       }
533     }
534     catch(Exception JavaDoc e)
535     {
536       fail(e.toString());
537     }
538     return result;
539   }
540
541   private RoleInfo JavaDoc createRoleInfo(String JavaDoc name, Class JavaDoc mbean,
542                                   boolean read, boolean write,
543                                   int min, int max)
544   {
545     RoleInfo JavaDoc result = null;
546     try
547     {
548       result = new RoleInfo JavaDoc(name, mbean.getName(), read, write, min, max, "");
549     }
550     catch(Exception JavaDoc e)
551     {
552       fail(e.toString());
553     }
554     return result;
555   }
556
557   private void createRelationType(ObjectName JavaDoc relationService, String JavaDoc name, RoleInfo JavaDoc[] roleInfos)
558   {
559     try
560     {
561       RelationService JavaDoc service = (RelationService JavaDoc) services.get(relationService);
562       service.createRelationType(name, roleInfos);
563     }
564     catch(Exception JavaDoc e)
565     {
566       fail(e.toString());
567     }
568   }
569
570   private void compare(RoleList JavaDoc original, RoleList JavaDoc result)
571   {
572     assertEquals(original.size(), result.size());
573     Iterator JavaDoc iterator = original.iterator();
574     while (iterator.hasNext())
575     {
576       Role JavaDoc originalRole = (Role JavaDoc) iterator.next();
577       Iterator JavaDoc iterator2 = result.iterator();
578       while (iterator2.hasNext())
579       {
580         Role JavaDoc resultRole = (Role JavaDoc) iterator2.next();
581         if (originalRole.getRoleName().equals(resultRole.getRoleName()))
582         {
583           compare(originalRole, resultRole);
584           iterator2.remove();
585         }
586       }
587     }
588     assertEquals(0, result.size());
589   }
590
591   private void compare(Role JavaDoc original, Role JavaDoc result)
592   {
593     assertEquals(original.getRoleName(), result.getRoleName());
594     compareListOfObjectNames(original.getRoleValue(), result.getRoleValue());
595   }
596
597   private void compareListOfObjectNames(List JavaDoc original, List JavaDoc result)
598   {
599     assertEquals(original.size(), result.size());
600     Iterator JavaDoc iterator = original.iterator();
601     while (iterator.hasNext())
602     {
603       ObjectName JavaDoc originalBean = (ObjectName JavaDoc) iterator.next();
604       Iterator JavaDoc iterator2 = result.iterator();
605       while (iterator2.hasNext())
606       {
607         ObjectName JavaDoc resultBean = (ObjectName JavaDoc) iterator2.next();
608         if (originalBean.equals(resultBean))
609         {
610           iterator2.remove();
611         }
612       }
613     }
614     assertEquals(0, result.size());
615   }
616
617   private void compareListOfStrings(List JavaDoc original, List JavaDoc result)
618   {
619     assertEquals(original.size(), result.size());
620     Iterator JavaDoc iterator = original.iterator();
621     while (iterator.hasNext())
622     {
623       String JavaDoc originalString = (String JavaDoc) iterator.next();
624       Iterator JavaDoc iterator2 = result.iterator();
625       while (iterator2.hasNext())
626       {
627         String JavaDoc resultString = (String JavaDoc) iterator2.next();
628         if (originalString.equals(resultString))
629         {
630           iterator2.remove();
631         }
632       }
633     }
634     assertEquals(0, result.size());
635   }
636
637   private ObjectName JavaDoc createRoleValueBean(String JavaDoc name, Class JavaDoc mbean, MBeanServer JavaDoc server)
638   {
639     ObjectName JavaDoc result = null;
640     try
641     {
642       result = new ObjectName JavaDoc(name);
643       if (server != null)
644       {
645         server.registerMBean(mbean.newInstance(), result);
646       }
647     }
648     catch(Exception JavaDoc e)
649     {
650       fail(e.toString());
651     }
652     return result;
653   }
654
655   private void checkResult(RoleResult JavaDoc result, HashMap JavaDoc infos, RoleList JavaDoc roles)
656   {
657     checkResolved(result.getRoles(), infos, roles);
658     checkUnresolved(result.getRolesUnresolved(), infos, roles);
659   }
660
661   private void checkResolved(RoleList JavaDoc resolved, HashMap JavaDoc infos, RoleList JavaDoc roles)
662   {
663     RoleList JavaDoc copy = (RoleList JavaDoc) roles.clone();
664     Iterator JavaDoc iterator = resolved.iterator();
665     while (iterator.hasNext())
666     {
667       Role JavaDoc role = (Role JavaDoc) iterator.next();
668       String JavaDoc roleName = role.getRoleName();
669       RoleInfo JavaDoc info = (RoleInfo JavaDoc) infos.get(roleName);
670       if (info == null)
671         fail("unknown role " + roleName);
672       if (info.isReadable() == false)
673         fail("role should not be readable " + roleName);
674       Role JavaDoc original = removeRole(copy, roleName);
675       compareListOfObjectNames(original.getRoleValue(), role.getRoleValue());
676     }
677
678     iterator = copy.iterator();
679     while (iterator.hasNext())
680     {
681       Role JavaDoc role = (Role JavaDoc) iterator.next();
682       String JavaDoc roleName = role.getRoleName();
683       RoleInfo JavaDoc info = (RoleInfo JavaDoc) infos.get(roleName);
684       if (info.isReadable() == true)
685         fail("missing role " + roleName);
686     }
687   }
688
689   private void checkUnresolved(RoleUnresolvedList JavaDoc unresolved, HashMap JavaDoc infos, RoleList JavaDoc roles)
690   {
691     RoleList JavaDoc copy = (RoleList JavaDoc) roles.clone();
692     Iterator JavaDoc iterator = unresolved.iterator();
693     while (iterator.hasNext())
694     {
695       RoleUnresolved JavaDoc roleUnresolved = (RoleUnresolved JavaDoc) iterator.next();
696       String JavaDoc roleName = roleUnresolved.getRoleName();
697       RoleInfo JavaDoc info = (RoleInfo JavaDoc) infos.get(roleName);
698       if (info == null)
699         fail("unknown role " + roleName);
700       if (info.isReadable() == true)
701         fail("role should be readable " + roleName);
702       removeRole(copy, roleName);
703     }
704
705     iterator = copy.iterator();
706     while (iterator.hasNext())
707     {
708       Role JavaDoc role = (Role JavaDoc) iterator.next();
709       String JavaDoc roleName = role.getRoleName();
710       RoleInfo JavaDoc info = (RoleInfo JavaDoc) infos.get(roleName);
711       if (info.isReadable() == false)
712         fail("missing unresolved role " + roleName);
713     }
714   }
715
716   private Role JavaDoc removeRole(RoleList JavaDoc roles, String JavaDoc roleName)
717   {
718     Iterator JavaDoc iterator = roles.iterator();
719     while (iterator.hasNext())
720     {
721       Role JavaDoc role = (Role JavaDoc) iterator.next();
722       if (role.getRoleName().equals(roleName))
723       {
724         iterator.remove();
725         return role;
726       }
727     }
728     fail("role was not in the original " + roleName);
729     return null;
730   }
731
732   private Role JavaDoc getRole(RoleList JavaDoc roles, String JavaDoc roleName)
733   {
734     Iterator JavaDoc iterator = roles.iterator();
735     while (iterator.hasNext())
736     {
737       Role JavaDoc role = (Role JavaDoc) iterator.next();
738       if (role.getRoleName().equals(roleName))
739       {
740         return role;
741       }
742     }
743     fail("role was not in the original " + roleName);
744     return null;
745   }
746
747   private void checkMBeans(Map JavaDoc result, RoleList JavaDoc roles)
748   {
749     // Construct what we think the value should be
750
Map JavaDoc expected = calcMBeanRoleMap(roles);
751     
752     // Check the actual result
753
Iterator JavaDoc iterator = result.entrySet().iterator();
754     while (iterator.hasNext())
755     {
756        Map.Entry JavaDoc entry = (Map.Entry JavaDoc) iterator.next();
757        ObjectName JavaDoc key = (ObjectName JavaDoc) entry.getKey();
758        ArrayList JavaDoc roleNames = (ArrayList JavaDoc) entry.getValue();
759        ArrayList JavaDoc expectedNames = (ArrayList JavaDoc) expected.get(key);
760        if (expectedNames == null)
761          fail("Unexpected object name " + key);
762        compareListOfStrings(expectedNames, roleNames);
763        expected.remove(key);
764     }
765     assertEquals(0, expected.size());
766   }
767
768   private Map JavaDoc calcMBeanRoleMap(RoleList JavaDoc roles)
769   {
770     HashMap JavaDoc result = new HashMap JavaDoc();
771     Iterator JavaDoc iterator = roles.iterator();
772     while (iterator.hasNext())
773     {
774       Role JavaDoc role = (Role JavaDoc) iterator.next();
775       String JavaDoc roleName = role.getRoleName();
776       ArrayList JavaDoc mbeans = (ArrayList JavaDoc) role.getRoleValue();
777       Iterator JavaDoc iterator2 = mbeans.iterator();
778       while (iterator2.hasNext())
779       {
780         ObjectName JavaDoc objectName = (ObjectName JavaDoc) iterator2.next();
781         ArrayList JavaDoc names = (ArrayList JavaDoc) result.get(objectName);
782         if (names == null)
783         {
784           names = new ArrayList JavaDoc();
785           result.put(objectName, names);
786         }
787         // It seems the role name should be duplicated?
788
// Include the following test if this is a bug in RI.
789
// if (names.contains(roleName) == false)
790

791         names.add(roleName);
792       }
793     }
794     return result;
795   }
796
797   private void createRolesB(MBeanServer JavaDoc server)
798   {
799     try
800     {
801       ArrayList JavaDoc roleB1Values = new ArrayList JavaDoc();
802       roleB1Values.add(createRoleValueBean("x:relation=b,role=1,bean=1",
803                                             Trivial.class, server));
804       roleB1Values.add(createRoleValueBean("x:relation=b,role=1,bean=2",
805                                             Trivial.class, server));
806       Role JavaDoc roleB1 = new Role JavaDoc("roleB1", roleB1Values);
807
808       ArrayList JavaDoc roleB2Values = new ArrayList JavaDoc();
809       roleB2Values.add(createRoleValueBean("x:relation=b,role=2,bean=1",
810                                             Trivial.class, server));
811       roleB2Values.add(createRoleValueBean("x:relation=b,role=2,bean=2",
812                                             Trivial.class, server));
813       roleB2Values.add(createRoleValueBean("x:relation=b,role=2,bean=3",
814                                             Trivial.class, server));
815       Role JavaDoc roleB2 = new Role JavaDoc("roleB2", roleB2Values);
816
817       rolesB = new RoleList JavaDoc();
818       rolesB.add(roleB1);
819       rolesB.add(roleB2);
820     }
821     catch(Exception JavaDoc e)
822     {
823       fail(e.toString());
824     }
825   }
826
827   private void createRelationTypeB(ObjectName JavaDoc relationService)
828   {
829     try
830     {
831       RoleInfo JavaDoc roleInfoB1 = createRoleInfo("roleB1", Trivial.class, true, false, 1, 2);
832       RoleInfo JavaDoc roleInfoB2 = createRoleInfo("roleB2", Trivial.class, false, true, 3, 4);
833       RoleInfo JavaDoc[] roleInfos = new RoleInfo JavaDoc[] { roleInfoB1, roleInfoB2 };
834       createRelationType(relationService, "relationTypeB", roleInfos );
835       for (int i=0; i < roleInfos.length; i++)
836         roleInfosB.put(roleInfos[i].getName(), roleInfos[i]);
837     }
838     catch(Exception JavaDoc e)
839     {
840       fail(e.toString());
841     }
842   }
843
844   private void createRolesC(MBeanServer JavaDoc server)
845   {
846     try
847     {
848       ArrayList JavaDoc roleC1Values = new ArrayList JavaDoc();
849       roleC1Values.add(createRoleValueBean("x:relation=c,role=1,bean=1",
850                                             Trivial.class, server));
851       roleC1Values.add(createRoleValueBean("x:relation=c,role=1,bean=1",
852                                             Trivial.class, null));
853       roleC1 = new Role JavaDoc("roleC1", roleC1Values);
854
855       ArrayList JavaDoc roleC2Values = new ArrayList JavaDoc();
856       roleC2Values.add(createRoleValueBean("x:relation=c,role=1,bean=1",
857                                             Trivial.class, null));
858       roleC2Values.add(createRoleValueBean("x:relation=c,role=2,bean=1",
859                                             Trivial.class, server));
860       roleC2Values.add(createRoleValueBean("x:relation=c,role=2,bean=2",
861                                             Trivial.class, server));
862       roleC2 = new Role JavaDoc("roleC2", roleC2Values);
863
864       rolesC = new RoleList JavaDoc();
865       rolesC.add(roleC1);
866       rolesC.add(roleC2);
867     }
868     catch(Exception JavaDoc e)
869     {
870       fail(e.toString());
871     }
872   }
873
874   private void createRelationTypeC(ObjectName JavaDoc relationService)
875   {
876     try
877     {
878       RoleInfo JavaDoc roleInfoC1 = createRoleInfo("roleC1", Trivial.class, true, false, 1, 2);
879       RoleInfo JavaDoc roleInfoC2 = createRoleInfo("roleC2", Trivial.class, false, true, 3, 4);
880       RoleInfo JavaDoc[] roleInfos = new RoleInfo JavaDoc[] { roleInfoC1, roleInfoC2 };
881       createRelationType(relationService, "relationTypeC", roleInfos );
882       for (int i=0; i < roleInfos.length; i++)
883         roleInfosC.put(roleInfos[i].getName(), roleInfos[i]);
884     }
885     catch(Exception JavaDoc e)
886     {
887       fail(e.toString());
888     }
889   }
890
891    private void createRolesCX(MBeanServer JavaDoc server)
892    {
893       try
894       {
895          ArrayList JavaDoc roleCX1Values = new ArrayList JavaDoc();
896          roleCX1Values.add(createRoleValueBean("x:relation=c,role=2,bean=1",
897                                               Trivial.class, null));
898          roleCX1 = new Role JavaDoc("roleC1", roleCX1Values);
899
900          ArrayList JavaDoc roleCX2Values = new ArrayList JavaDoc();
901          roleCX2Values.add(createRoleValueBean("x:relation=c,role=1,bean=1",
902                                               Trivial.class, null));
903          roleCX2Values.add(createRoleValueBean("x:relation=c,role=1,bean=2",
904                                               Trivial.class, server));
905          roleCX2Values.add(createRoleValueBean("x:relation=c,role=1,bean=3",
906                                               Trivial.class, server));
907          roleCX2Values.add(createRoleValueBean("x:relation=c,role=1,bean=4",
908                                               Trivial.class, server));
909          roleCX2 = new Role JavaDoc("roleC2", roleCX2Values);
910
911          rolesCX = new RoleList JavaDoc();
912          rolesCX.add(roleCX1);
913          rolesCX.add(roleCX2);
914       }
915       catch(Exception JavaDoc e)
916       {
917          fail(e.toString());
918       }
919    }
920
921    private class Listener
922       implements NotificationListener JavaDoc
923    {
924       String JavaDoc type;
925       HashSet JavaDoc notifications = new HashSet JavaDoc();
926       public Listener(String JavaDoc type)
927       {
928          this.type = type;
929       }
930       public void handleNotification(Notification JavaDoc n, Object JavaDoc h)
931       {
932          notifications.add(n);
933       }
934       public RelationNotification JavaDoc check(int size)
935       {
936          RelationNotification JavaDoc result = null;
937          assertEquals(size, notifications.size());
938          Iterator JavaDoc iterator = notifications.iterator();
939          while (iterator.hasNext())
940          {
941             RelationNotification JavaDoc rn = (RelationNotification JavaDoc) iterator.next();
942             assertEquals(type, rn.getType());
943             result = rn;
944          }
945          return result;
946       }
947    }
948 }
949
Popular Tags