KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > loom > components > assembler > AssemblerTestCase


1 /*
2  * Copyright (C) The Loom Group. All rights reserved.
3  *
4  * This software is published under the terms of the Loom
5  * Software License version 1.1, a copy of which has been included
6  * with this distribution in the LICENSE.txt file.
7  */

8 package org.codehaus.loom.components.assembler;
9
10 import java.net.URL JavaDoc;
11 import java.util.HashMap JavaDoc;
12 import java.util.Map JavaDoc;
13
14 import junit.framework.TestCase;
15 import org.codehaus.dna.Configuration;
16 import org.codehaus.dna.ConfigurationException;
17 import org.codehaus.dna.impl.ConsoleLogger;
18 import org.codehaus.dna.impl.DefaultConfiguration;
19 import org.codehaus.loom.components.assembler.Assembler;
20 import org.codehaus.loom.components.assembler.data.Component1;
21 import org.codehaus.loom.components.assembler.data.Component2;
22 import org.codehaus.loom.components.assembler.data.Component3;
23 import org.codehaus.loom.components.assembler.data.Listener1;
24 import org.codehaus.loom.components.assembler.data.Service1;
25 import org.codehaus.loom.components.deployer.PhoenixProfileBuilder;
26 import org.codehaus.loom.components.util.ConfigurationBuilder;
27 import org.codehaus.loom.components.util.metadata.DependencyDirective;
28 import org.codehaus.loom.components.util.profile.ComponentProfile;
29 import org.codehaus.loom.components.util.profile.PartitionProfile;
30 import org.codehaus.loom.interfaces.ContainerConstants;
31 import org.codehaus.loom.interfaces.LoomException;
32 import org.xml.sax.InputSource JavaDoc;
33
34 /**
35  * An basic test case for the LogManager.
36  *
37  * @author Peter Donald
38  * @author <a HREF="mailto:peter.royal@pobox.com">Peter Royal</a>
39  * @version $Revision: 1.2 $ $Date: 2004/05/01 12:48:35 $
40  */

41 public class AssemblerTestCase
42     extends TestCase
43 {
44     public void testBasic()
45         throws Exception JavaDoc
46     {
47         final PartitionProfile partitionProfile = assembleSar( "assembly1.xml" );
48         final ComponentProfile[] blocks =
49             partitionProfile.getPartition( ContainerConstants.BLOCK_PARTITION ).
50             getComponents();
51         assertEquals( "Block Count", 2, blocks.length );
52
53         final ComponentProfile block1 = blocks[0];
54         final ComponentProfile block2 = blocks[1];
55         final DependencyDirective[] dependencies1 = block1.getTemplate()
56             .getDependencies();
57         final DependencyDirective[] dependencies2 = block2.getTemplate()
58             .getDependencies();
59
60         assertEquals( "Block1 getImplementationKey",
61                       Component1.class.getName(),
62                       block1.getTemplate().getImplementationKey() );
63         assertEquals( "Block1 getName", "c1", block1.getTemplate().getName() );
64         assertEquals( "Block1 getDependencies count",
65                       1, dependencies1.length );
66         assertEquals( "Block1 dep1 name",
67                       "c2",
68                       dependencies1[0].getProviderName() );
69         assertEquals( "Block1 dep1 role",
70                       Service1.class.getName(), dependencies1[0].getKey() );
71         assertTrue( "Block1 getBlockInfo non null",
72                     null != block1.getInfo() );
73         assertEquals( "Block1 isDisableProxy",
74                       false,
75                       isProxyDisabled( block1 ) );
76
77         assertEquals( "Block2 getImplementationKey",
78                       Component2.class.getName(),
79                       block2.getTemplate().getImplementationKey() );
80         assertEquals( "Block2 getName", "c2", block2.getTemplate().getName() );
81         assertEquals( "Block2 getDependencies count",
82                       0, dependencies2.length );
83         assertTrue( "Block2 getBlockInfo non null",
84                     null != block2.getInfo() );
85         assertEquals( "Block2 isDisableProxy",
86                       true,
87                       isProxyDisabled( block2 ) );
88
89         final ComponentProfile[] listeners =
90             partitionProfile.getPartition( ContainerConstants.LISTENER_PARTITION ).
91             getComponents();
92         final ComponentProfile listener = listeners[0];
93
94         assertEquals( "Listener Count", 1, listeners.length );
95         assertEquals( "Listener1 getImplementationKey",
96                       Listener1.class.getName(),
97                       listener.getTemplate().getImplementationKey() );
98         assertEquals( "Listener1 getName",
99                       "l1",
100                       listener.getTemplate().getName() );
101     }
102
103     private boolean isProxyDisabled( final ComponentProfile block2 )
104     {
105         return block2.getTemplate().isDisableProxy();
106     }
107
108     public void testComplex()
109         throws Exception JavaDoc
110     {
111         final PartitionProfile partitionProfile = assembleSar( "assembly2.xml" );
112         final ComponentProfile[] blocks =
113             partitionProfile.getPartition( ContainerConstants.BLOCK_PARTITION )
114             .getComponents();
115         assertEquals( "Block Count", 4, blocks.length );
116
117         final ComponentProfile block1 = blocks[0];
118         final ComponentProfile block2 = blocks[1];
119         final ComponentProfile block3 = blocks[2];
120         final ComponentProfile block4 = blocks[3];
121         final DependencyDirective[] dependencies1 = block1.getTemplate()
122             .getDependencies();
123         final DependencyDirective[] dependencies2 = block2.getTemplate()
124             .getDependencies();
125         final DependencyDirective[] dependencies3 = block3.getTemplate()
126             .getDependencies();
127         final DependencyDirective[] dependencies4 = block4.getTemplate()
128             .getDependencies();
129
130         assertEquals( "Block1 getImplementationKey",
131                       Component2.class.getName(),
132                       block1.getTemplate().getImplementationKey() );
133         assertEquals( "Block1 getName",
134                       "c2a",
135                       block1.getTemplate().getName() );
136         assertEquals( "Block1 getDependencies count",
137                       0, dependencies1.length );
138         assertTrue( "Block2 getBlockInfo non null",
139                     null != block1.getInfo() );
140         assertEquals( "Block1 isDisableProxy",
141                       false,
142                       isProxyDisabled( block1 ) );
143
144         assertEquals( "Block2 getImplementationKey",
145                       Component2.class.getName(),
146                       block2.getTemplate().getImplementationKey() );
147         assertEquals( "Block2 getName",
148                       "c2b",
149                       block2.getTemplate().getName() );
150         assertEquals( "Block2 getDependencies count",
151                       0, dependencies2.length );
152         assertTrue( "Block2 getBlockInfo non null",
153                     null != block2.getInfo() );
154         assertEquals( "Block2 isDisableProxy",
155                       false,
156                       isProxyDisabled( block2 ) );
157
158         assertEquals( "Block3 getImplementationKey",
159                       Component2.class.getName(),
160                       block3.getTemplate().getImplementationKey() );
161         assertEquals( "Block3 getName",
162                       "c2c",
163                       block3.getTemplate().getName() );
164         assertEquals( "Block3 getDependencies count",
165                       0, dependencies3.length );
166         assertTrue( "Block3 getBlockInfo non null",
167                     null != block3.getInfo() );
168         assertEquals( "Block3 isDisableProxy",
169                       false,
170                       isProxyDisabled( block3 ) );
171
172         assertEquals( "Block4 getImplementationKey",
173                       Component3.class.getName(),
174                       block4.getTemplate().getImplementationKey() );
175         assertEquals( "Block4 getName", "c3", block4.getTemplate().getName() );
176         assertEquals( "Block4 getDependencies count",
177                       3, dependencies4.length );
178         final DependencyDirective dependency1 = dependencies4[0];
179         final DependencyDirective dependency2 = dependencies4[1];
180         final DependencyDirective dependency3 = dependencies4[2];
181         assertEquals( "Block4 dep1 name",
182                       "c2a",
183                       dependency1.getProviderName() );
184         assertEquals( "Block4 dep1 role",
185                       Service1.class.getName(), dependency1.getKey() );
186         assertEquals( "Block4 dep1 name",
187                       "c2b",
188                       dependency2.getProviderName() );
189         assertEquals( "Block4 dep1 role",
190                       Service1.class.getName(), dependency2.getKey() );
191         assertEquals( "Block4 dep1 name",
192                       "c2c",
193                       dependency3.getProviderName() );
194         assertEquals( "Block4 dep1 role",
195                       Service1.class.getName(), dependency3.getKey() );
196         assertTrue( "Block4 getBlockInfo non null",
197                     null != block4.getInfo() );
198         assertEquals( "Block4 isDisableProxy",
199                       false,
200                       isProxyDisabled( block4 ) );
201     }
202
203     public void testBuildDependencies()
204         throws Exception JavaDoc
205     {
206         final DefaultConfiguration[] provides = new DefaultConfiguration[2];
207         final String JavaDoc name0 = "Cheese";
208         final String JavaDoc role0 = "market.Cheddar";
209         final String JavaDoc name1 = "Bleu";
210         final String JavaDoc role1 = "market.blue";
211
212         provides[0] = new DefaultConfiguration( "provide", "", "" );
213         provides[0].setAttribute( "name", name0 );
214         provides[0].setAttribute( "role", role0 );
215         provides[1] = new DefaultConfiguration( "provide", "", "" );
216         provides[1].setAttribute( "name", name1 );
217         provides[1].setAttribute( "role", role1 );
218
219         final Assembler assembler = new Assembler();
220         final DependencyDirective[] directives = assembler.buildDependencies( provides );
221
222         assertEquals( provides.length, directives.length );
223         assertEquals( name0, directives[0].getProviderName() );
224         assertEquals( name1, directives[1].getProviderName() );
225         assertEquals( role0, directives[0].getKey() );
226         assertEquals( role1, directives[1].getKey() );
227     }
228
229     public void testBuildDependency()
230         throws Exception JavaDoc
231     {
232         final String JavaDoc name = "Blah";
233         final String JavaDoc alias = name;
234         final String JavaDoc role = "com.biz.Service";
235         final Assembler assembler = new Assembler();
236         final DefaultConfiguration provide = new DefaultConfiguration( "provide", "", "" );
237         provide.setAttribute( "name", name );
238         provide.setAttribute( "role", role );
239         final DependencyDirective directive =
240             assembler.buildDependency( provide );
241         assertEquals( "name", name, directive.getProviderName() );
242         assertEquals( "role", role, directive.getKey() );
243         assertEquals( "alias", alias, directive.getAlias() );
244     }
245
246     public void testBuildDependencyThatSpecifiesAlias()
247         throws Exception JavaDoc
248     {
249         final String JavaDoc name = "Blah";
250         final String JavaDoc alias = "Blee";
251         final String JavaDoc role = "com.biz.Service";
252         final Assembler assembler = new Assembler();
253         final DefaultConfiguration provide = new DefaultConfiguration( "provide", "", "" );
254         provide.setAttribute( "name", name );
255         provide.setAttribute( "role", role );
256         provide.setAttribute( "alias", alias );
257         final DependencyDirective directive =
258             assembler.buildDependency( provide );
259         assertEquals( "name", name, directive.getProviderName() );
260         assertEquals( "role", role, directive.getKey() );
261         assertEquals( "alias", alias, directive.getAlias() );
262     }
263
264     public void testBuildDependencyThatMissesName()
265         throws Exception JavaDoc
266     {
267         final Assembler assembler = new Assembler();
268         final DefaultConfiguration provide = new DefaultConfiguration( "provide", "", "" );
269         provide.setAttribute( "role", "com.biz.Service" );
270         try
271         {
272             assembler.buildDependency( provide );
273         }
274         catch( final ConfigurationException ce )
275         {
276             return;
277         }
278         fail( "Expected ConfigurationException due to missing name" );
279     }
280
281     public void testBuildDependencyThatMissesRole()
282         throws Exception JavaDoc
283     {
284         final Assembler assembler = new Assembler();
285         final DefaultConfiguration provide = new DefaultConfiguration( "provide", "", "" );
286         provide.setAttribute( "name", "MyService" );
287         try
288         {
289             assembler.buildDependency( provide );
290         }
291         catch( final ConfigurationException ce )
292         {
293             return;
294         }
295         fail( "Expected ConfigurationException due to missing role" );
296     }
297
298     protected PartitionProfile assembleSar( final String JavaDoc config )
299         throws Exception JavaDoc
300     {
301         final PhoenixProfileBuilder assembler = new PhoenixProfileBuilder();
302         final URL JavaDoc resource = getClass().getResource( config );
303         assertNotNull( "Config resource: " + config, resource );
304         final ConsoleLogger logger = new ConsoleLogger();
305         final Configuration assembly =
306             ConfigurationBuilder.build( new InputSource JavaDoc( resource.toExternalForm() ),
307                                         ConfigurationBuilder.ASSEMBLY_SCHEMA,
308                                         logger );
309         final Map JavaDoc parameters = new HashMap JavaDoc();
310         parameters.put( ContainerConstants.ASSEMBLY_NAME, "test" );
311         parameters.put( ContainerConstants.ASSEMBLY_DESCRIPTOR, assembly );
312         parameters.put( ContainerConstants.CONFIG_DESCRIPTOR,
313                         new DefaultConfiguration( "config", "", "" ) );
314         parameters.put( ContainerConstants.ASSEMBLY_CLASSLOADER,
315                         getClass().getClassLoader() );
316
317         assembler.enableLogging( logger );
318
319         return assembler.buildProfile( parameters );
320     }
321
322     public void testMalformedBlockListener()
323         throws Exception JavaDoc
324     {
325         final DefaultConfiguration listener = new DefaultConfiguration( "listner", "", "" );
326         final DefaultConfiguration config = new DefaultConfiguration( "config",
327                                                                       "",
328                                                                       "" );
329         final Assembler assembler = new Assembler();
330
331         try
332         {
333             assembler.buildBlockListener( listener, config );
334             fail( "buildBlockListner allowed no 'name' attribute" );
335         }
336         catch( LoomException e )
337         {
338             assertEquals( "Malformed listener entry in assembly.xml at \"\". " +
339                           "(Reason: Attribute named name not specified.).",
340                           e.getMessage() );
341         }
342
343         listener.setAttribute( "name", "foo" );
344
345         try
346         {
347             assembler.buildBlockListener( listener, config );
348             fail( "buildBlockListner allowed no 'class' attribute" );
349         }
350         catch( LoomException e )
351         {
352             assertEquals( "Malformed listener entry in assembly.xml at \"\". " +
353                           "(Reason: Attribute named class not specified.).",
354                           e.getMessage() );
355         }
356     }
357 }
358
Popular Tags