Author: jwross
Date: Tue Apr 26 14:58:18 2016
New Revision: 1741051

URL: http://svn.apache.org/viewvc?rev=1741051&view=rev
Log:
Merge ^/aries/trunk/subsystem r1740836 through r1741050 into java6support 
branch.

Modified:
    aries/branches/java6support/subsystem/   (props changed)
    
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java
    
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java
    
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java
    
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java

Propchange: aries/branches/java6support/subsystem/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Apr 26 14:58:18 2016
@@ -1,2 +1,2 @@
 /aries/branches/1.0-prototype/subsystem:1306564-1337594
-/aries/trunk/subsystem:1728111-1740835
+/aries/trunk/subsystem:1728111-1741050

Modified: 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java?rev=1741051&r1=1741050&r2=1741051&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResolveContext.java
 Tue Apr 26 14:58:18 2016
@@ -154,26 +154,44 @@ public class ResolveContext extends org.
                processWires(wires, requirement, capabilities);
        }
        
-       private void processAsSubstitutableExport(Requirement requirement, 
List<Capability> capabilities) {
+       private void processAsSubstitutableExport(boolean isFragment, 
Requirement requirement, List<Capability> capabilities) {
                String namespace = requirement.getNamespace();
                if (!PackageNamespace.PACKAGE_NAMESPACE.equals(namespace)) {
                        return;
                }
                Resource resource = requirement.getResource();
                Wiring wiring = wirings.get(resource);
-               List<Capability> resourceCapabilities = 
wiring.getResourceCapabilities(namespace);
-               processResourceCapabilities(resourceCapabilities, requirement, 
capabilities);
+               if (isFragment) {
+                       List<Wire> fragmentWires = 
wiring.getRequiredResourceWires(HostNamespace.HOST_NAMESPACE);
+                       for (Wire fragmentWire : fragmentWires) {
+                               Resource host = fragmentWire.getProvider();
+                               processResourceCapabilities(
+                                               
wirings.get(host).getResourceCapabilities(namespace),
+                                               requirement,
+                                               capabilities);
+                       }
+               }
+               else {
+                       List<Capability> resourceCapabilities = 
wiring.getResourceCapabilities(namespace);
+                       processResourceCapabilities(resourceCapabilities, 
requirement, capabilities);
+               }
        }
        
        private void processAlreadyResolvedResource(Resource resource, 
Requirement requirement, List<Capability> capabilities) {
-               if (isProcessableAsFragment(requirement)) {
+               boolean isFragment = isProcessableAsFragment(requirement);
+               if (isFragment) {
                        processAsFragment(requirement, capabilities);
                }
                else {
                        processAsBundle(requirement, capabilities);
                }
                if (capabilities.isEmpty() && Utils.isMandatory(requirement)) {
-                       processAsSubstitutableExport(requirement, capabilities);
+                       processAsSubstitutableExport(isFragment, requirement, 
capabilities);
+                       if (capabilities.isEmpty()) {
+                               // ARIES-1538. Do not fail subsystem resolution 
if an already
+                               // resolved resource has a missing dependency.
+                               capabilities.add(new 
MissingCapability(requirement));
+                       }
                }
        }
        

Modified: 
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java?rev=1741051&r1=1741050&r2=1741051&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1522Test.java
 Tue Apr 26 14:58:18 2016
@@ -70,12 +70,12 @@ public class Aries1522Test extends Subsy
        }
        
        @Test
-       public void testApacheAriesProvisionDepenenciesInstall() throws 
Exception {
+       public void testApacheAriesProvisionDependenciesInstall() throws 
Exception {
                test(AriesProvisionDependenciesDirective.INSTALL);
        }
        
        @Test
-       public void testApacheAriesProvisionDepenenciesResolve() throws 
Exception {
+       public void testApacheAriesProvisionDependenciesResolve() throws 
Exception {
                test(AriesProvisionDependenciesDirective.RESOLVE);
        }
        

Modified: 
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java?rev=1741051&r1=1741050&r2=1741051&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1523Test.java
 Tue Apr 26 14:58:18 2016
@@ -70,12 +70,12 @@ public class Aries1523Test extends Subsy
        }
        
        @Test
-       public void testApacheAriesProvisionDepenenciesInstall() throws 
Exception {
+       public void testApacheAriesProvisionDependenciesInstall() throws 
Exception {
                test(AriesProvisionDependenciesDirective.INSTALL);
        }
        
        @Test
-       public void testApacheAriesProvisionDepenenciesResolve() throws 
Exception {
+       public void testApacheAriesProvisionDependenciesResolve() throws 
Exception {
                test(AriesProvisionDependenciesDirective.RESOLVE);
        }
        

Modified: 
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java
URL: 
http://svn.apache.org/viewvc/aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java?rev=1741051&r1=1741050&r2=1741051&view=diff
==============================================================================
--- 
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java
 (original)
+++ 
aries/branches/java6support/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/defect/Aries1538Test.java
 Tue Apr 26 14:58:18 2016
@@ -32,16 +32,36 @@ import org.osgi.service.subsystem.Subsys
 
 public class Aries1538Test extends SubsystemTest {
        @Test
-       public void testApacheAriesProvisionDepenenciesInstall() throws 
Exception {
-               test(AriesProvisionDependenciesDirective.INSTALL);
+       public void 
testEffectiveActiveApacheAriesProvisionDependenciesInstall() throws Exception {
+               
testEffectiveActive(AriesProvisionDependenciesDirective.INSTALL);
        }
        
        @Test
-       public void testApacheAriesProvisionDepenenciesResolve() throws 
Exception {
-               test(AriesProvisionDependenciesDirective.RESOLVE);
+       public void 
testEffectiveActiveApacheAriesProvisionDependenciesResolve() throws Exception {
+               
testEffectiveActive(AriesProvisionDependenciesDirective.RESOLVE);
        }
        
-       private void test(AriesProvisionDependenciesDirective 
provisionDependencies) throws Exception {
+       @Test
+       public void 
testSubstitutableExportApacheAriesProvisionDependenciesInstall() throws 
Exception {
+               
testSubstitutableExport(AriesProvisionDependenciesDirective.INSTALL);
+       }
+       
+       @Test
+       public void 
testSubstituableExportApacheAriesProvisionDependenciesResolve() throws 
Exception {
+               
testSubstitutableExport(AriesProvisionDependenciesDirective.RESOLVE);
+       }
+       
+       @Test
+       public void 
testHostFragmentCircularDependencyApacheAriesProvisionDependenciesInstall() 
throws Exception {
+               
testHostFragmentCircularDependency(AriesProvisionDependenciesDirective.INSTALL);
+       }
+       
+       @Test
+       public void 
testHostFragmentCircularDependencyApacheAriesProvisionDependenciesResolve() 
throws Exception {
+               
testHostFragmentCircularDependency(AriesProvisionDependenciesDirective.RESOLVE);
+       }
+       
+       private void testEffectiveActive(AriesProvisionDependenciesDirective 
provisionDependencies) throws Exception {
                boolean flag = 
AriesProvisionDependenciesDirective.INSTALL.equals(provisionDependencies);
                BundleArchiveBuilder bab = new BundleArchiveBuilder();
                bab.symbolicName("bundle");
@@ -68,6 +88,100 @@ public class Aries1538Test extends Subsy
                                                                                
        .importPackage("foo")
                                                                                
        .build())
                                                        .build(),
+                                       flag
+                       );
+                       uninstallableSubsystems.add(subsystem);
+                       startSubsystem(subsystem, flag);
+                       stoppableSubsystems.add(subsystem);
+               }
+               catch (SubsystemException e) {
+                       e.printStackTrace();
+                       fail("Subsystem should have installed and started");
+               }
+       }
+       
+       private void 
testSubstitutableExport(AriesProvisionDependenciesDirective 
provisionDependencies) throws Exception {
+               boolean flag = 
AriesProvisionDependenciesDirective.INSTALL.equals(provisionDependencies);
+               BundleArchiveBuilder hostBuilder = new BundleArchiveBuilder();
+               hostBuilder.symbolicName("host");
+               BundleArchiveBuilder fragmentBuilder = new 
BundleArchiveBuilder();
+               fragmentBuilder.symbolicName("fragment");
+               fragmentBuilder.exportPackage("foo");
+               fragmentBuilder.importPackage("foo");
+               fragmentBuilder.header("Fragment-Host", "host");
+               Subsystem root = getRootSubsystem();
+               Bundle host = root.getBundleContext().installBundle(
+                               "host", 
+                               hostBuilder.build());
+               uninstallableBundles.add(host);
+               Bundle fragment = root.getBundleContext().installBundle(
+                               "fragment", 
+                               fragmentBuilder.build());
+               uninstallableBundles.add(fragment);
+               startBundle(host);
+               try {
+                       Subsystem subsystem = installSubsystem(
+                                       root,
+                                       "subsystem", 
+                                       new SubsystemArchiveBuilder()
+                                                       
.symbolicName("subsystem")
+                                                       
.type(SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION + ';' 
+                                                                               
+ provisionDependencies.toString())
+                                                       .bundle(
+                                                                       "a", 
+                                                                       new 
BundleArchiveBuilder()
+                                                                               
        .symbolicName("a")
+                                                                               
        .importPackage("foo")
+                                                                               
        .build())
+                                                       .build(),
+                                       flag
+                       );
+                       uninstallableSubsystems.add(subsystem);
+                       startSubsystem(subsystem, flag);
+                       stoppableSubsystems.add(subsystem);
+               }
+               catch (SubsystemException e) {
+                       e.printStackTrace();
+                       fail("Subsystem should have installed and started");
+               }
+       }
+       
+       private void 
testHostFragmentCircularDependency(AriesProvisionDependenciesDirective 
provisionDependencies) throws Exception {
+               boolean flag = 
AriesProvisionDependenciesDirective.INSTALL.equals(provisionDependencies);
+               BundleArchiveBuilder hostBuilder = new BundleArchiveBuilder();
+               hostBuilder.symbolicName("host");
+               hostBuilder.exportPackage("foo");
+               hostBuilder.importPackage("bar");
+               BundleArchiveBuilder fragmentBuilder = new 
BundleArchiveBuilder();
+               fragmentBuilder.symbolicName("fragment");
+               fragmentBuilder.exportPackage("bar");
+               fragmentBuilder.importPackage("foo");
+               fragmentBuilder.header("Fragment-Host", "host");
+               Subsystem root = getRootSubsystem();
+               Bundle host = root.getBundleContext().installBundle(
+                               "host", 
+                               hostBuilder.build());
+               uninstallableBundles.add(host);
+               Bundle fragment = root.getBundleContext().installBundle(
+                               "fragment", 
+                               fragmentBuilder.build());
+               uninstallableBundles.add(fragment);
+               startBundle(host);
+               try {
+                       Subsystem subsystem = installSubsystem(
+                                       root,
+                                       "subsystem", 
+                                       new SubsystemArchiveBuilder()
+                                                       
.symbolicName("subsystem")
+                                                       
.type(SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION + ';' 
+                                                                               
+ provisionDependencies.toString())
+                                                       .bundle(
+                                                                       "a", 
+                                                                       new 
BundleArchiveBuilder()
+                                                                               
        .symbolicName("a")
+                                                                               
        .importPackage("foo")
+                                                                               
        .build())
+                                                       .build(),
                                        flag
                        );
                        uninstallableSubsystems.add(subsystem);


Reply via email to