You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by jw...@apache.org on 2012/06/24 23:35:04 UTC

svn commit: r1353336 - in /aries/trunk/subsystem: subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ subsystem-itests/src/test/java/org/apache/aries/subsystem/ite...

Author: jwross
Date: Sun Jun 24 21:35:03 2012
New Revision: 1353336

URL: http://svn.apache.org/viewvc?rev=1353336&view=rev
Log:
ARIES-825: Fixed issue where optional package imports were causing installation failures. Added new test for optional package imports.

Added:
    aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java
Modified:
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ImportPackageRequirement.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ImportPackageRequirement.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ImportPackageRequirement.java?rev=1353336&r1=1353335&r2=1353336&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ImportPackageRequirement.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/ImportPackageRequirement.java Sun Jun 24 21:35:03 2012
@@ -13,10 +13,14 @@ public class ImportPackageRequirement ex
 	public static final String DIRECTIVE_FILTER = PackageNamespace.REQUIREMENT_FILTER_DIRECTIVE;
 	public static final String NAMESPACE = PackageNamespace.PACKAGE_NAMESPACE;
 	
-	private final Map<String, String> directives = new HashMap<String, String>(1);
+	private final Map<String, String> directives;
 	private final Resource resource;
 	
 	public ImportPackageRequirement(ImportPackageHeader.Clause clause, Resource resource) {
+		Collection<Directive> clauseDirectives = clause.getDirectives();
+		directives = new HashMap<String, String>(clauseDirectives.size() + 1);
+		for (Directive directive : clauseDirectives)
+			directives.put(directive.getName(), directive.getValue());
 		Collection<String> packageNames = clause.getPackageNames();
 		if (packageNames.isEmpty() || packageNames.size() > 1)
 			throw new IllegalArgumentException("Only one package name per requirement allowed");

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java?rev=1353336&r1=1353335&r2=1353336&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java Sun Jun 24 21:35:03 2012
@@ -142,4 +142,9 @@ public class BundleResource implements R
 		}
 		return result;
 	}
+	
+	@Override
+	public String toString() {
+        return content.toExternalForm();
+    }
 }

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java?rev=1353336&r1=1353335&r2=1353336&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java Sun Jun 24 21:35:03 2012
@@ -13,9 +13,6 @@
  */
 package org.apache.aries.subsystem.core.internal;
 
-import static org.apache.aries.application.utils.AppConstants.LOG_ENTRY;
-import static org.apache.aries.application.utils.AppConstants.LOG_EXIT;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
@@ -91,8 +88,8 @@ public class ResourceHelper {
 	}
 	
 	public static boolean matches(Requirement requirement, Capability capability) {
-		if (logger.isDebugEnabled())
-			logger.debug(LOG_ENTRY, "matches", new Object[]{requirement, capability});
+//		if (logger.isDebugEnabled())
+//			logger.debug(LOG_ENTRY, "matches", new Object[]{requirement, capability});
 		boolean result = false;
 		if (requirement == null && capability == null)
 			result = true;
@@ -116,7 +113,7 @@ public class ResourceHelper {
 			}
 		}
 		// TODO Check directives.
-		logger.debug(LOG_EXIT, "matches", result);
+//		logger.debug(LOG_EXIT, "matches", result);
 		return result;
 	}
 }

Added: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java?rev=1353336&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/OptionalDependenciesTest.java Sun Jun 24 21:35:03 2012
@@ -0,0 +1,72 @@
+package org.apache.aries.subsystem.itests;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.osgi.framework.Constants;
+import org.osgi.service.subsystem.Subsystem;
+import org.osgi.service.subsystem.SubsystemConstants;
+
+@RunWith(JUnit4TestRunner.class)
+public class OptionalDependenciesTest extends SubsystemTest {
+	/*
+	 * Subsystem-SymbolicName: application.a.esa
+	 * Subsystem-Content: bundle.a.jar
+	 */
+	private static final String APPLICATION_A = "application.a.esa";
+	/*
+	 * Bundle-SymbolicName: bundle.a.jar
+	 * Import-Package: x;resolution:=optional
+	 */
+	private static final String BUNDLE_A = "bundle.a.jar";
+	
+	private static void createApplicationA() throws IOException {
+		createApplicationAManifest();
+		createSubsystem(APPLICATION_A, BUNDLE_A);
+	}
+	
+	private static void createApplicationAManifest() throws IOException {
+		Map<String, String> attributes = new HashMap<String, String>();
+		attributes.put(SubsystemConstants.SUBSYSTEM_SYMBOLICNAME, APPLICATION_A);
+		attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, BUNDLE_A);
+		createManifest(APPLICATION_A + ".mf", attributes);
+	}
+	
+	private static void createBundleA() throws IOException {
+		Map<String, String> headers = new HashMap<String, String>();
+		headers.put(Constants.IMPORT_PACKAGE, "x;resolution:=optional");
+		createBundle(BUNDLE_A, headers);
+	}
+	
+	private static boolean createdTestFiles;
+	@Before
+	public static void createTestFiles() throws Exception {
+		if (createdTestFiles)
+			return;
+		createBundleA();
+		createApplicationA();
+		createdTestFiles = true;
+	}
+	
+	public void setUp() throws Exception {
+		super.setUp();
+		registerRepositoryService(BUNDLE_A);
+	}
+	
+	@Test
+	public void testOptionalImportPackage() throws Exception {
+		Subsystem subsystem = installSubsystemFromFile(APPLICATION_A);
+		try {
+			startSubsystem(subsystem);
+			stopSubsystem(subsystem);
+		}
+		finally {
+			uninstallSubsystemSilently(subsystem);
+		}
+	}
+}