diff options
author | nash <nash@13f79535-47bb-0310-9956-ffa450edef68> | 2010-11-22 09:49:22 +0000 |
---|---|---|
committer | nash <nash@13f79535-47bb-0310-9956-ffa450edef68> | 2010-11-22 09:49:22 +0000 |
commit | f0797f0026f729fa612930fbd0acefc5343a0fe6 (patch) | |
tree | e5f5736d13b815c6164bca3740bb8763b5a7e4db /sca-java-1.x/tags/1.6.1/itest/osgi-contribution/contribution-test/src/test/java/org/apache/tuscany/sca/contribution/osgi/test/SCAResolverTestCase.java | |
parent | cdd4a3ad287c73bb6d756c812bc61917f6ddf344 (diff) |
Copy 1.6.1-RC2 tag as 1.6.1
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1037648 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-1.x/tags/1.6.1/itest/osgi-contribution/contribution-test/src/test/java/org/apache/tuscany/sca/contribution/osgi/test/SCAResolverTestCase.java')
-rw-r--r-- | sca-java-1.x/tags/1.6.1/itest/osgi-contribution/contribution-test/src/test/java/org/apache/tuscany/sca/contribution/osgi/test/SCAResolverTestCase.java | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/1.6.1/itest/osgi-contribution/contribution-test/src/test/java/org/apache/tuscany/sca/contribution/osgi/test/SCAResolverTestCase.java b/sca-java-1.x/tags/1.6.1/itest/osgi-contribution/contribution-test/src/test/java/org/apache/tuscany/sca/contribution/osgi/test/SCAResolverTestCase.java new file mode 100644 index 0000000000..a2b3a7bc92 --- /dev/null +++ b/sca-java-1.x/tags/1.6.1/itest/osgi-contribution/contribution-test/src/test/java/org/apache/tuscany/sca/contribution/osgi/test/SCAResolverTestCase.java @@ -0,0 +1,240 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.tuscany.sca.contribution.osgi.test; + + +import java.io.File; +import java.lang.reflect.Method; +import java.net.URL; + +import junit.framework.TestCase; + +import org.apache.tuscany.sca.assembly.Composite; +import org.apache.tuscany.sca.contribution.Contribution; +import org.apache.tuscany.sca.contribution.osgi.OSGiTestUtil; +import org.apache.tuscany.sca.contribution.resolver.ClassReference; +import org.apache.tuscany.sca.contribution.service.ContributionService; +import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain; + +/* + * + * Supplychain using OSGi contributions, using default SCA resolver + * + * This test uses two sets of four contributions where each set contains a bundle corresponding + * to the four components of supplychain (customer, retailer, warehouse and shipper). + * Tests classes from the bundle used in <implementation.java/>, and the bundles themselves + * used as the bundle in <implementation.osgi/>. + * + * Notes: + * All OSGi bundle references should be resolvable using pure OSGi bundle mechanisms. No + * dummy bundles will be created to resolve combinations of OSGi and non-OSGi contributions + * + * Notes: + * All OSGi bundle references should be resolvable using pure OSGi bundle mechanisms. No + * dummy bundles will be created to resolve combinations of OSGi and non-OSGi contributions + * + * All dependent OSGi contribution bundles should be installed before the referring contribution. + * Hence dependencies should be a tree and cannot contain cycles. + * + * For Jar files contained within OSGi bundles, Bundle-Classpath should be + * set so that standard OSGi class resolution is sufficient to resolve classes containing in + * nested jars or bundles. + */ + +public class SCAResolverTestCase extends TestCase { + + + protected EmbeddedSCADomain domain; + + private SupplyChain supplyChainV1; + private SupplyChain supplyChainV2; + + + protected String customerJarName = "Customer"; + protected String retailerJarName = "Retailer"; + protected String warehouseJarName = "Warehouse"; + protected String shipperJarName = "Shipper"; + + + + @Override + protected void setUp() throws Exception { + + setUpOSGi(); + setUpSCA(); + } + + protected void setUpOSGi() throws Exception { + OSGiTestUtil.setUpFelixTestRuntime(); + } + + protected void setUpSCA() throws Exception { + //Create a test embedded SCA domain + ClassLoader cl = getClass().getClassLoader(); + domain = new EmbeddedSCADomain(cl, "http://localhost"); + + //Start the domain + domain.start(); + + // Contribute the SCA contribution + ContributionService contributionService = domain.getContributionService(); + supplyChainV1 = new SupplyChain("../contribution-classes/target/classes", + contributionService, "V1"); + supplyChainV1.setUpSCA(); + + supplyChainV2 = new SupplyChain("../contribution-classes-v2/target/classes", + contributionService, "V2"); + supplyChainV2.setUpSCA(); + } + + + + @Override + public void tearDown() throws Exception { + + + supplyChainV1.tearDownSCA(); + supplyChainV2.tearDownSCA(); + + domain.stop(); + + domain.close(); + + OSGiTestUtil.shutdownOSGiRuntime(); + } + + + @SuppressWarnings("unchecked") + public void test() throws Exception { + + ClassReference customerClassRef = new ClassReference("supplychain.customer.Customer"); + customerClassRef = supplyChainV1.customerContribution.getModelResolver().resolveModel(ClassReference.class, customerClassRef); + Class customerClass = customerClassRef.getJavaClass(); + + Object customer = + domain.getService(customerClass, "CustomerComponent"); + + Method m = customerClass.getMethod("purchaseGoods"); + m.invoke(customer); + + System.out.println("Sleeping ..."); + Thread.sleep(1000); + + ClassReference customerClassRefV2 = new ClassReference("supplychain.customer.Customer"); + customerClassRefV2 = supplyChainV2.customerContribution.getModelResolver().resolveModel(ClassReference.class, customerClassRefV2); + Class customerClassV2 = customerClassRefV2.getJavaClass(); + + Object customerV2 = + domain.getService(customerClassV2, "CustomerComponentV2"); + + Method mV2 = customerClassV2.getMethod("purchaseGoods"); + mV2.invoke(customerV2); + + System.out.println("Sleeping ..."); + Thread.sleep(2000); + + System.out.println("Test complete"); + + } + + private class SupplyChain { + + private String folderName; + private ContributionService contributionService; + private String version; + + private Contribution customerContribution; + private Contribution retailerContribution; + private Contribution warehouseContribution; + private Contribution shipperContribution; + + + public SupplyChain(String folderName, ContributionService contributionService, String version) { + this.folderName = folderName; + this.contributionService = contributionService; + this.version = version; + } + + protected void setUpSCA() throws Exception { + File customerLocation = new File(folderName + "/" + customerJarName + version + ".jar"); + URL customerContribURL = customerLocation.toURL(); + File retailerLocation = new File(folderName + "/" + retailerJarName + version + ".jar"); + URL retailerContribURL = retailerLocation.toURL(); + File warehouseLocation = new File(folderName + "/" + warehouseJarName + version + ".jar"); + URL warehouseContribURL = warehouseLocation.toURL(); + File shipperLocation = new File(folderName + "/" + shipperJarName + version + ".jar"); + URL shipperContribURL = shipperLocation.toURL(); + + shipperContribution = contributionService.contribute("Shipper" + + version, shipperContribURL, true); + warehouseContribution = contributionService.contribute("Warehouse" + + version, warehouseContribURL, true); + retailerContribution = contributionService.contribute("Retailer" + + version, retailerContribURL, true); + customerContribution = contributionService.contribute("Customer" + + version, customerContribURL, true); + + + for (Composite deployable : customerContribution.getDeployables()) { + domain.getDomainComposite().getIncludes().add(deployable); + domain.buildComposite(deployable); + } + + + for (Composite deployable : retailerContribution.getDeployables() ) { + domain.getDomainComposite().getIncludes().add(deployable); + domain.buildComposite(deployable); + } + + for (Composite deployable : warehouseContribution.getDeployables() ) { + domain.getDomainComposite().getIncludes().add(deployable); + domain.buildComposite(deployable); + } + + for (Composite deployable : shipperContribution.getDeployables() ) { + domain.getDomainComposite().getIncludes().add(deployable); + domain.buildComposite(deployable); + } + + // Start Components from my composite + for (Composite deployable : customerContribution.getDeployables() ) { + domain.getCompositeActivator().activate(deployable); + domain.getCompositeActivator().start(deployable); + } + } + + public void tearDownSCA() throws Exception { + // Remove the contribution from the in-memory repository + contributionService.remove("Customer" + version); + contributionService.remove("Retailer" + version); + contributionService.remove("Warehouse" + version); + contributionService.remove("Shipper" + version); + + + // Stop Components from my composite + for (Composite deployable : customerContribution.getDeployables() ) { + domain.getCompositeActivator().stop(deployable); + domain.getCompositeActivator().deactivate(deployable); + } + + } + + } + +} |