1 8 package org.codehaus.loom.components.assembler; 9 10 import java.net.URL ; 11 import java.util.HashMap ; 12 import java.util.Map ; 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 ; 33 34 41 public class AssemblerTestCase 42 extends TestCase 43 { 44 public void testBasic() 45 throws Exception 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 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 205 { 206 final DefaultConfiguration[] provides = new DefaultConfiguration[2]; 207 final String name0 = "Cheese"; 208 final String role0 = "market.Cheddar"; 209 final String name1 = "Bleu"; 210 final String 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 231 { 232 final String name = "Blah"; 233 final String alias = name; 234 final String 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 248 { 249 final String name = "Blah"; 250 final String alias = "Blee"; 251 final String 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 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 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 config ) 299 throws Exception 300 { 301 final PhoenixProfileBuilder assembler = new PhoenixProfileBuilder(); 302 final URL 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 ( resource.toExternalForm() ), 307 ConfigurationBuilder.ASSEMBLY_SCHEMA, 308 logger ); 309 final Map parameters = new HashMap (); 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 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 |