1   /*
2    * $Id: AgentSorterTestCase.java 11530 2008-04-08 12:49:14Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.agent;
12  
13  import java.util.ArrayList;
14  import java.util.List;
15  
16  import junit.framework.Assert;
17  import junit.framework.TestCase;
18  
19  public class AgentSorterTestCase extends TestCase
20  {
21      public void testListWithoutDependencies()
22      {
23          MockAgent a = new MockAgent_A();
24          MockAgent b = new MockAgent_B();
25          MockAgent c = new MockAgent_C();
26  
27          List agents = new ArrayList();
28          agents.add(a);
29          agents.add(b);
30          agents.add(c);
31  
32          List result = AgentSorter.sortAgents(agents);
33          Assert.assertEquals(3, result.size());
34      }
35      
36      public void testSortWithSimpleDependency()
37      {
38          MockAgent a = new MockAgent_A();
39          MockAgent b = new MockAgent_B();
40          MockAgent c = new MockAgent_C(new Class[] { MockAgent_A.class });
41          
42          List agents = new ArrayList();
43          agents.add(a);
44          agents.add(b);
45          agents.add(c);
46  
47          List result = AgentSorter.sortAgents(agents);
48          Assert.assertEquals(3, result.size());
49          
50          int indexOfA = result.indexOf(a);
51          int indexOfC = result.indexOf(c);
52          Assert.assertTrue(indexOfA < indexOfC);
53      }
54  
55      public void testSortWithForwardDependency()
56      {
57          MockAgent a = new MockAgent_A(new Class[] { MockAgent_C.class });
58          MockAgent b = new MockAgent_B();
59          MockAgent c = new MockAgent_C();
60          
61          List agents = new ArrayList();
62          agents.add(a);
63          agents.add(b);
64          agents.add(c);
65  
66          List result = AgentSorter.sortAgents(agents);
67          Assert.assertEquals(3, result.size());
68          
69          int indexOfA = result.indexOf(a);
70          Assert.assertTrue(indexOfA > -1);
71          int indexOfC = result.indexOf(c);
72          Assert.assertTrue(indexOfC > -1);
73          Assert.assertTrue(indexOfC < indexOfA);
74      }
75          
76      public void testCyclicDependency()
77      {
78          MockAgent a = new MockAgent_A(new Class[] { MockAgent_B.class });
79          MockAgent b = new MockAgent_B(new Class[] { MockAgent_A.class });
80          
81          List agents = new ArrayList();
82          agents.add(a);
83          agents.add(b);
84  
85          try
86          {
87              AgentSorter.sortAgents(agents);
88              Assert.fail();
89          }
90          catch (IllegalArgumentException iae)
91          {
92              // expected exception
93          }
94      }
95      
96      public void testSortComplexDependencies()
97      {
98          MockAgent a = new MockAgent_A();
99          MockAgent b = new MockAgent_B(new Class[] { MockAgent_A.class });
100         MockAgent c = new MockAgent_C(new Class[] { MockAgent_B.class });
101         MockAgent d = new MockAgent_D(new Class[] { MockAgent_A.class, MockAgent_C.class });
102         
103         List agents = new ArrayList();
104         agents.add(a);
105         agents.add(d);
106         agents.add(c);
107         agents.add(b);
108 
109         List result = AgentSorter.sortAgents(agents);
110         Assert.assertEquals(4, result.size());
111         
112         Assert.assertEquals(a, result.get(0));
113         Assert.assertEquals(b, result.get(1));
114         Assert.assertEquals(c, result.get(2));
115         Assert.assertEquals(d, result.get(3));
116     }
117     
118     public void testSortWithMissingDependency()
119     {
120         MockAgent a = new MockAgent_A();
121         MockAgent b = new MockAgent_B(new Class[] { MockAgent_C.class });
122         
123         List agents = new ArrayList();
124         agents.add(a);
125         agents.add(b);
126 
127         List result = AgentSorter.sortAgents(agents);
128         Assert.assertEquals(2, result.size());
129     }
130 
131 }
132 
133