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 2015/09/17 16:12:24 UTC
svn commit: r1703631 [3/3] - 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/capabilityset/
subsystem-core/src/main/java/org/apache/aries/subs...
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/VersionRangeAttribute.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/VersionRangeAttribute.java?rev=1703631&r1=1703630&r2=1703631&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/VersionRangeAttribute.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/VersionRangeAttribute.java Thu Sep 17 14:12:21 2015
@@ -18,9 +18,12 @@ import org.osgi.framework.Version;
import org.osgi.framework.VersionRange;
public class VersionRangeAttribute extends AbstractAttribute {
- public static final String NAME = Constants.VERSION_ATTRIBUTE;
+ public static final String NAME_BUNDLEVERSION = Constants.BUNDLE_VERSION_ATTRIBUTE;
+ public static final String NAME_VERSION = Constants.VERSION_ATTRIBUTE;
- public static final VersionRangeAttribute DEFAULT = new VersionRangeAttribute();
+ public static final VersionRangeAttribute DEFAULT_BUNDLEVERSION = new VersionRangeAttribute(
+ NAME_BUNDLEVERSION, new VersionRange(Version.emptyVersion.toString()));
+ public static final VersionRangeAttribute DEFAULT_VERSION = new VersionRangeAttribute();
private final VersionRange range;
@@ -33,13 +36,17 @@ public class VersionRangeAttribute exten
}
public VersionRangeAttribute(VersionRange range) {
- super(Constants.VERSION_ATTRIBUTE, range.toString());
+ this(Constants.VERSION_ATTRIBUTE, range);
+ }
+
+ public VersionRangeAttribute(String name, VersionRange range) {
+ super(name, range.toString());
this.range = range;
}
@Override
public StringBuilder appendToFilter(StringBuilder builder) {
- return builder.append(range.toFilterString(Constants.VERSION_ATTRIBUTE));
+ return builder.append(range.toFilterString(name));
}
@Override
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/capabilityset/SimpleFilter.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/capabilityset/SimpleFilter.java?rev=1703631&r1=1703630&r2=1703631&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/capabilityset/SimpleFilter.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/capabilityset/SimpleFilter.java Thu Sep 17 14:12:21 2015
@@ -19,6 +19,9 @@
package org.apache.aries.subsystem.core.capabilityset;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -648,4 +651,86 @@ loop: for (int i = 0; i < len; i++)
return sf;
}
+
+ @Override
+ public int hashCode() {
+ int result = 17;
+ result = 31 * result + (m_name == null ? 0 : m_name.hashCode());
+ result = 31 * result + m_op;
+ if (m_value == null) {
+ result = 31 * result + 0;
+ }
+ else if (m_name == null && m_value instanceof Collection) {
+ Iterator iterator = ((Collection)m_value).iterator();
+ int sum = 0;
+ while (iterator.hasNext()) {
+ sum += iterator.next().hashCode();
+ }
+ result = 31 * result + sum;
+ }
+ else {
+ result = 31 * result + m_value.hashCode();
+ }
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ if (!(o instanceof SimpleFilter)) {
+ return false;
+ }
+ SimpleFilter that = (SimpleFilter)o;
+ if (!(that.m_name == null ? this.m_name == null : that.m_name.equals(this.m_name))) {
+ return false;
+ }
+ if (that.m_op != this.m_op) {
+ return false;
+ }
+ if (that.m_value == null) {
+ return this.m_value == null;
+ }
+ if (this.m_value == null) {
+ return false;
+ }
+ if (that.m_name == null && that.m_value instanceof Collection) {
+ if (!(this.m_name == null && this.m_value instanceof Collection)) {
+ return false;
+ }
+ return ((Collection)that.m_value).containsAll((Collection)this.m_value);
+ }
+ return that.m_value.equals(this.m_value);
+ }
+
+ /**
+ * Extracts attributes from the provided filter. If an attribute appears
+ * more than once, the last value seen will be the value in the map. The
+ * returned map is the property of the caller.
+ *
+ * @param filter The filter containing attributes to extract.
+ * @return The map of extracted attributes. The key is the attribute name,
+ * and the value is the attribute value.
+ * @throws NullPointerException If the filter is <code>null</code>.
+ * @throws IllegalArgumentException If the filter contains invalid syntax.
+ */
+ public static Map<String, Object> attributes(String filter) {
+ Map<String, Object> attributes = new HashMap<String, Object>();
+ attributes(parse(filter), attributes);
+ return attributes;
+ }
+
+ private static void attributes(SimpleFilter filter, Map<String, Object> attributes) {
+ Object value = filter.m_value;
+ if (value instanceof Collection) {
+ Collection<SimpleFilter> filters = (Collection<SimpleFilter>)value;
+ for (SimpleFilter f : filters) {
+ attributes(f, attributes);
+ }
+ }
+ else {
+ attributes.put(filter.m_name, value);
+ }
+ }
}
\ No newline at end of file
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java?rev=1703631&r1=1703630&r2=1703631&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java Thu Sep 17 14:12:21 2015
@@ -46,6 +46,7 @@ import org.apache.aries.subsystem.core.a
import org.apache.aries.subsystem.core.archive.SubsystemSymbolicNameHeader;
import org.apache.aries.subsystem.core.archive.SubsystemTypeHeader;
import org.apache.aries.subsystem.core.archive.SubsystemVersionHeader;
+import org.apache.aries.subsystem.core.capabilityset.SimpleFilter;
import org.apache.aries.util.filesystem.FileSystem;
import org.apache.aries.util.filesystem.IDirectory;
import org.apache.aries.util.filesystem.IFile;
@@ -198,7 +199,7 @@ public class RawSubsystemResource implem
capBuilder.namespace(ServiceNamespace.SERVICE_NAMESPACE);
capBuilder.attribute(ServiceNamespace.CAPABILITY_OBJECTCLASS_ATTRIBUTE, objectClasses);
if (filter != null)
- capBuilder.attributes(new HashMap<String, Object>(ManifestHeaderProcessor.parseFilter(filter)));
+ capBuilder.attributes(new HashMap<String, Object>(SimpleFilter.attributes(filter)));
capBuilder.attribute("service.imported", "");
capBuilder.resource(fakeResource);
modifiableCaps.add(capBuilder.build());
@@ -328,7 +329,7 @@ public class RawSubsystemResource implem
for (Requirement requirement : requirements) {
if (!PackageNamespace.PACKAGE_NAMESPACE.equals(requirement.getNamespace()))
continue;
- clauses.add(new ImportPackageHeader.Clause(requirement));
+ clauses.add(ImportPackageHeader.Clause.valueOf(requirement));
}
if (clauses.isEmpty())
return null;
@@ -352,7 +353,7 @@ public class RawSubsystemResource implem
for (Requirement requirement : requirements) {
if (!BundleNamespace.BUNDLE_NAMESPACE.equals(requirement.getNamespace()))
continue;
- clauses.add(new RequireBundleHeader.Clause(requirement));
+ clauses.add(RequireBundleHeader.Clause.valueOf(requirement));
}
if (clauses.isEmpty())
return null;
@@ -370,7 +371,7 @@ public class RawSubsystemResource implem
// Don't filter out the osgi.ee namespace.
!namespace.equals(ExecutionEnvironmentNamespace.EXECUTION_ENVIRONMENT_NAMESPACE))
continue;
- clauses.add(new RequireCapabilityHeader.Clause(requirement));
+ clauses.add(RequireCapabilityHeader.Clause.valueOf(requirement));
}
if (clauses.isEmpty())
return null;
@@ -495,7 +496,7 @@ public class RawSubsystemResource implem
for (Requirement requirement : requirements) {
if (!ServiceNamespace.SERVICE_NAMESPACE.equals(requirement.getNamespace()))
continue;
- clauses.add(new SubsystemImportServiceHeader.Clause(requirement));
+ clauses.add(SubsystemImportServiceHeader.Clause.valueOf(requirement));
}
if (clauses.isEmpty())
return null;
Modified: aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/BundleRequiredExecutionEnvironmentHeaderTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/BundleRequiredExecutionEnvironmentHeaderTest.java?rev=1703631&r1=1703630&r2=1703631&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/BundleRequiredExecutionEnvironmentHeaderTest.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/BundleRequiredExecutionEnvironmentHeaderTest.java Thu Sep 17 14:12:21 2015
@@ -36,7 +36,7 @@ public class BundleRequiredExecutionEnvi
public void testClause() {
String clauseStr = "CDC-1.0/Foundation-1.0";
BundleRequiredExecutionEnvironmentHeader.Clause clause = new BundleRequiredExecutionEnvironmentHeader.Clause(clauseStr);
- assertClause(clause, clauseStr, "CDC/Foundation", "1.0", "(|(&(osgi.ee=CDC/Foundation)(version=1.0.0)))");
+ assertClause(clause, clauseStr, "CDC/Foundation", "1.0", "(&(osgi.ee=CDC/Foundation)(version=1.0.0))");
}
@Test
@@ -60,7 +60,7 @@ public class BundleRequiredExecutionEnvi
@Test
public void testHeaderWithOneClause() {
String value = "OSGi/Minimum-1.2";
- String filter = "(|(&(osgi.ee=OSGi/Minimum)(version=1.2.0)))";
+ String filter = "(&(osgi.ee=OSGi/Minimum)(version=1.2.0))";
BundleRequiredExecutionEnvironmentHeader header = new BundleRequiredExecutionEnvironmentHeader(value);
assertEquals("Wrong number of clauses", 1, header.getClauses().size());
assertClause(header.getClauses().iterator().next(), value, "OSGi/Minimum", "1.2", filter);
@@ -82,11 +82,11 @@ public class BundleRequiredExecutionEnvi
"(&(osgi.ee=JavaSE)(version=1.4.0))" +
"(&(osgi.ee=JavaSE)(version=1.6.0))" +
"(&(osgi.ee=AA/BB)(version=1.7.0))" +
- "(&(osgi.ee=V1-1.5/V2-1.6))" +
- "(&(osgi.ee=MyEE-badVersion)))";
+ "(osgi.ee=V1-1.5/V2-1.6)" +
+ "(osgi.ee=MyEE-badVersion))";
BundleRequiredExecutionEnvironmentHeader header = new BundleRequiredExecutionEnvironmentHeader(value);
assertEquals("Wrong number of clauses", 7, header.getClauses().size());
- assertClause(header.getClauses().iterator().next(), "CDC-1.0/Foundation-1.0", "CDC/Foundation", "1.0", "(|(&(osgi.ee=CDC/Foundation)(version=1.0.0)))");
+ assertClause(header.getClauses().iterator().next(), "CDC-1.0/Foundation-1.0", "CDC/Foundation", "1.0", "(&(osgi.ee=CDC/Foundation)(version=1.0.0))");
assertEquals("Wrong name", Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT, header.getName());
assertEquals("Wrong value", value, header.getValue());
Resource resource = EasyMock.createNiceMock(Resource.class);
Modified: aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/ImportPackageHeaderTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/ImportPackageHeaderTest.java?rev=1703631&r1=1703630&r2=1703631&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/ImportPackageHeaderTest.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/ImportPackageHeaderTest.java Thu Sep 17 14:12:21 2015
@@ -24,8 +24,10 @@ public class ImportPackageHeaderTest {
public void testVersionAttributeWithMultiplePackages() {
String headerStr = "org.foo;org.bar;org.foo.bar;version=1.3";
ImportPackageHeader header = new ImportPackageHeader(headerStr);
+ ImportPackageHeader header2 = new ImportPackageHeader(headerStr);
assertClauses(header, 1);
assertVersionAttribute(header, "org.foo;org.bar;org.foo.bar", "1.3");
+ assertEquals(header, header2);
}
@Test
Added: aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/SubsystemManifestEqualityTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/SubsystemManifestEqualityTest.java?rev=1703631&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/SubsystemManifestEqualityTest.java (added)
+++ aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/SubsystemManifestEqualityTest.java Thu Sep 17 14:12:21 2015
@@ -0,0 +1,217 @@
+/*
+ * Licensed 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.aries.subsystem.core.archive;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.junit.Test;
+
+public class SubsystemManifestEqualityTest {
+
+ @Test
+ public void testSubsystemContentEquality() {
+ String headerStr = "org.aries.bundle;start-order:=0;type=osgi.bundle;version=\"1.8.4\";resolution:=mandatory";
+ SubsystemContentHeader header1 = new SubsystemContentHeader(headerStr);
+ SubsystemContentHeader header2 = new SubsystemContentHeader(headerStr);
+ assertEquals(header1, header2);
+
+ String headerStr1 = "org.aries.bundle;start-order:=0;type=osgi.bundle;version=\"1.8.4\";resolution:=mandatory";
+ String headerStr2 = "org.aries.bundle;type=osgi.bundle;resolution:=mandatory;version=\"1.8.4\";start-order:=0";
+ header1 = new SubsystemContentHeader(headerStr1);
+ header2 = new SubsystemContentHeader(headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testDynamicImportHeaderEquality() {
+ String headerStr1 = "org.eclipse.jetty.*;version=\"[9.0,10.0)\",*;JavaServlet=contract";
+ String headerStr2 = "*;JavaServlet=contract,org.eclipse.jetty.*;version=\"[9.0,10.0)\"";
+ DynamicImportPackageHeader header1 = new DynamicImportPackageHeader(
+ headerStr1);
+ DynamicImportPackageHeader header2 = new DynamicImportPackageHeader(
+ headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testExportPackageHeaderEquality() {
+ String headerStr1 = "javax.servlet;version=\"2.5\",javax.servlet.http; version=\"2.5\"";
+ String headerStr2 = "javax.servlet.http; version=\"2.5\",javax.servlet;version=\"2.5\"";
+ ExportPackageHeader header1 = new ExportPackageHeader(headerStr1);
+ ExportPackageHeader header2 = new ExportPackageHeader(headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testFragmentHostHeaderEquality() {
+ String headerStr1 = "the.parent.bundle;bundle-version=1.2.3";
+ String headerStr2 = "the.parent.bundle;bundle-version=1.2.3";
+ FragmentHostHeader header1 = new FragmentHostHeader(headerStr1);
+ FragmentHostHeader header2 = new FragmentHostHeader(headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testImportPackageHeaderEquality() {
+ String headerStr1 = "javax.servlet;version=\"2.6.0\", javax.servlet.resources;version=\"2.6.0\"";
+ String headerStr2 = "javax.servlet.resources;version=\"2.6.0\",javax.servlet;version=\"2.6.0\"";
+ ImportPackageHeader header1 = new ImportPackageHeader(headerStr1);
+ ImportPackageHeader header2 = new ImportPackageHeader(headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testPreferredProviderHeaderEquality() {
+ String headerStr1 = "org.aries.kernel;version=\"1.0.4\";type=osgi.subsystem.composite";
+ String headerStr2 = "org.aries.kernel;type=osgi.subsystem.composite;version=\"1.0.4\"";
+ PreferredProviderHeader header1 = new PreferredProviderHeader(
+ headerStr1);
+ PreferredProviderHeader header2 = new PreferredProviderHeader(
+ headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testProvideCapabilityHeaderEquality() {
+ String headerStr1 = "osgi.contract;osgi.contract=JavaServlet;version:Version=2.5;uses:=\"javax.servlet,javax.servlet.http\"";
+ String headerStr2 = "osgi.contract;uses:=\"javax.servlet,javax.servlet.http\";osgi.contract=JavaServlet;version:Version=2.5";
+ ProvideCapabilityHeader header1 = new ProvideCapabilityHeader(
+ headerStr1);
+ ProvideCapabilityHeader header2 = new ProvideCapabilityHeader(
+ headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testProvisionResourceHeaderEquality() {
+ String headerStr1 = "com.acme.logging;type=osgi.bundle;deployed-version=1.0.0";
+ String headerStr2 = "com.acme.logging;deployed-version=1.0.0;type=osgi.bundle";
+ ProvisionResourceHeader header1 = new ProvisionResourceHeader(
+ headerStr1);
+ ProvisionResourceHeader header2 = new ProvisionResourceHeader(
+ headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testRequireBundleHeaderEquality() {
+ String headerStr1 = "com.example.acme,com.acme.logging;bundle-version=\"[1.0, 1.1)\"";
+ String headerStr2 = "com.acme.logging;bundle-version=\"[1.0, 1.1)\",com.example.acme";
+ RequireBundleHeader header1 = new RequireBundleHeader(headerStr1);
+ RequireBundleHeader header2 = new RequireBundleHeader(headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testRequireCapabilityHeaderEquality() {
+ String headerStr1 = "osgi.ee; filter:=\"(osgi.ee=*)\",screen.size; filter:=\"(&(width>=800)(height>=600))\"";
+ String headerStr2 = "screen.size; filter:=\"(&(width>=800)(height>=600))\",osgi.ee; filter:=\"(osgi.ee=*)\"";
+ RequireCapabilityHeader header1 = new RequireCapabilityHeader(
+ headerStr1);
+ RequireCapabilityHeader header2 = new RequireCapabilityHeader(
+ headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testSubsystemExportServiceHeaderEquality() {
+ String headerStr1 = "com.acme.service.Logging";
+ String headerStr2 = "com.acme.service.Logging";
+ SubsystemExportServiceHeader header1 = new SubsystemExportServiceHeader(
+ headerStr1);
+ SubsystemExportServiceHeader header2 = new SubsystemExportServiceHeader(
+ headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testSubsystemImportServiceHeaderEquality() {
+ String headerStr1 = "com.acme.service.Logging";
+ String headerStr2 = "com.acme.service.Logging";
+ SubsystemImportServiceHeader header1 = new SubsystemImportServiceHeader(
+ headerStr1);
+ SubsystemImportServiceHeader header2 = new SubsystemImportServiceHeader(
+ headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testSubsystemManifestEquality() throws IOException {
+
+ SubsystemManifest subsystemManifest1 = new SubsystemManifest(getClass()
+ .getResourceAsStream("/files/SUBSYSTEM.MF.1"));
+ SubsystemManifest subsystemManifest2 = new SubsystemManifest(getClass()
+ .getResourceAsStream("/files/SUBSYSTEM.MF.2"));
+ assertEquals(subsystemManifest1, subsystemManifest2);
+ }
+
+ @Test
+ public void testSubsystemTypeHeaderEquality() {
+ String headerStr1 = "osgi.subsystem.composite";
+ String headerStr2 = "osgi.subsystem.composite";
+ SubsystemTypeHeader header1 = new SubsystemTypeHeader(headerStr1);
+ SubsystemTypeHeader header2 = new SubsystemTypeHeader(headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testSubsystemVersionHeaderEquality() {
+ String headerStr1 = "1.0.0";
+ String headerStr2 = "1.0.0";
+ SubsystemVersionHeader header1 = new SubsystemVersionHeader(headerStr1);
+ SubsystemVersionHeader header2 = new SubsystemVersionHeader(headerStr2);
+ assertEquals(header1, header2);
+
+ headerStr2 = "1";
+ header2 = new SubsystemVersionHeader(headerStr2);
+ assertEquals("Equivalent versions should be equal", header1, header2);
+ }
+
+ @Test
+ public void testBundleSymbolicNameHeaderEquality() {
+ String headerStr1 = "com.example.acme;singleton:=true";
+ String headerStr2 = "com.example.acme;singleton:=true";
+ SymbolicNameHeader header1 = new BundleSymbolicNameHeader(headerStr1);
+ SymbolicNameHeader header2 = new BundleSymbolicNameHeader(headerStr2);
+ assertEquals(header1, header2);
+
+ headerStr1 = "com.example.acme;fragment-attachment:=never;singleton:=true";
+ headerStr2 = "com.example.acme;singleton:=true;fragment-attachment:=never";
+ header1 = new BundleSymbolicNameHeader(headerStr1);
+ header2 = new BundleSymbolicNameHeader(headerStr2);
+ assertEquals("Equivalent clauses should be equal", header1, header2);
+ }
+
+ @Test
+ public void testSubsystemSymbolicNameHeaderEquality() {
+ String headerStr1 = "org.acme.billing;category=banking";
+ String headerStr2 = "org.acme.billing;category=banking";
+ SymbolicNameHeader header1 = new SubsystemSymbolicNameHeader(
+ headerStr1);
+ SymbolicNameHeader header2 = new SubsystemSymbolicNameHeader(
+ headerStr2);
+ assertEquals(header1, header2);
+ }
+
+ @Test
+ public void testDeployedContentHeaderEquality() {
+ String headerStr1 = "com.acme.logging;type=osgi.bundle;deployed-version=1.0.0";
+ String headerStr2 = "com.acme.logging;type=osgi.bundle;deployed-version=1.0.0";
+ DeployedContentHeader header1 = new DeployedContentHeader(headerStr1);
+ DeployedContentHeader header2 = new DeployedContentHeader(headerStr2);
+ assertEquals(header1, header2);
+ }
+}
Added: aries/trunk/subsystem/subsystem-core/src/test/resources/files/SUBSYSTEM.MF.1
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/test/resources/files/SUBSYSTEM.MF.1?rev=1703631&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/test/resources/files/SUBSYSTEM.MF.1 (added)
+++ aries/trunk/subsystem/subsystem-core/src/test/resources/files/SUBSYSTEM.MF.1 Thu Sep 17 14:12:21 2015
@@ -0,0 +1,11 @@
+Export-Package: a.b.c;version="1.0",x.y.z;uses:="m.n"; version="1.1.1", m.n;version="0"
+Subsystem-Type: osgi.subsystem.composite; provision-policy:=rejectDependencies
+Subsystem-SymbolicName: com.acme.rocket;a=b;apachearies-provision-dependencies:=start
+Import-Package: c.b.a, z.y.x;version=9;resolution:=optional, n.m;version="[3.1,4.0)";resolution:=mandatory
+Preferred-Provider: foo, org.bar;version="[1,2)";type=osg.bundle
+Provide-Capability: x;a=b, osgi.service;objectClass=o.p.Quick;b=a;effective:=active
+Require-Bundle: com.example.acme,com.acme.logging;bundle-version="[1.0, 1.1)";resolution:=optional
+Require-Capability: osgi.ee; filter:="(osgi.ee=*)", screen.size; filter:="(&(width>=800)(height>=600))"
+Subsystem-Content: bundle.a,feature.a;start-order:=2;type=osgi.subsystem.feature;version="[1.8,1.8.4)";resolution:=optional
+Subsystem-ExportService: service.a.b.c;filter:="(&(x=y)(y=z)(foo=bar))"
+Subsystem-ImportService: service.x.y.z;filter:="(|(&(a=b)(c=d)(foo=bar))(&(d=c)(bar=foo)(b=a)))"
Added: aries/trunk/subsystem/subsystem-core/src/test/resources/files/SUBSYSTEM.MF.2
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/test/resources/files/SUBSYSTEM.MF.2?rev=1703631&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/test/resources/files/SUBSYSTEM.MF.2 (added)
+++ aries/trunk/subsystem/subsystem-core/src/test/resources/files/SUBSYSTEM.MF.2 Thu Sep 17 14:12:21 2015
@@ -0,0 +1,13 @@
+Export-Package: a.b.c;version="1.0", x.y.z;version="1.1.1";uses:="m.n",m.n
+Subsystem-Type: osgi.subsystem.composite
+Subsystem-SymbolicName: com.acme.rocket; apachearies-provision-dependencies:=start; a=b
+Import-Package: z.y.x;resolution:=optional;version="9", n.m;version="[3.1.0, 4)";resolution:=mandatory,c.b.a;resolution:=mandatory;version="0.0"
+Preferred-Provider: org.bar;type=osg.bundle;version="[1,2)",foo;version=0;type=osgi.subsystem.composite
+Provide-Capability: x; effective:=resolve;a=b, osgi.service; effective:=active;b=a; objectClass=o.p.Quick
+Require-Bundle: com.example.acme;visibility:=private;bundle-version="0.0.0";resolution:=mandatory,com.acme.logging;resolution:=optional;bundle-version="[1,1.1.0)"
+Require-Capability: osgi.ee; filter:="(osgi.ee=*)";effective:=resolve,screen.size;resolution:=mandatory; filter:="(&(height>=600)(width>=800))"
+Subsystem-Content: bundle.a; resolution:=mandatory; version="[0, 0.0]";type=osgi.bundle
+Subsystem-Content: bundle.a; resolution:=mandatory; version="0.0";type=osgi.bundle, feature.a; type=osgi.subsystem.feature;start-order:=2;resolution:=optional;version="[1.8.0,1.8.4)"
+Subsystem-ExportService: service.a.b.c;filter:="(&(foo=bar)(y=z)(x=y))"
+Subsystem-ImportService: service.x.y.z;filter:="(|(&(bar=foo)(d=c)(b=a))(&(a=b)(foo=bar)(c=d)))"
+Subsystem-Version: 0
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ResolutionTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ResolutionTest.java?rev=1703631&r1=1703630&r2=1703631&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ResolutionTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ResolutionTest.java Thu Sep 17 14:12:21 2015
@@ -290,6 +290,7 @@ public class ResolutionTest extends Subs
fail("Missing BREE should result in installation failure");
}
catch (Exception e) {
+ e.printStackTrace();
assertTrue("Installation failure should be due to resolution error", e.getCause() instanceof ResolutionException);
}
finally {
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ServiceDependencyTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ServiceDependencyTest.java?rev=1703631&r1=1703630&r2=1703631&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ServiceDependencyTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/ServiceDependencyTest.java Thu Sep 17 14:12:21 2015
@@ -64,8 +64,7 @@ public class ServiceDependencyTest exten
* Bundle-Blueprint: OSGI-INF/blueprint/*.xml
*
* <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- * <reference interface="bundle.b"/>
- * <reference interface="bundle.b1" filter="(active=true)"/>
+ * <reference interface="bundle.b" filter="(&(active=true)(mode=shared))"/>
* <service interface="bundle.a" ref="bundle.a"/>
* </blueprint>
*/
@@ -152,7 +151,8 @@ public class ServiceDependencyTest exten
.append("<blueprint ")
.append("xmlns=\"http://www.osgi.org/xmlns/blueprint/v1.0.0\">")
.append("<reference ")
- .append("interface=\"bundle.b\"")
+ .append("interface=\"bundle.b\" ")
+ .append("filter=\"(active=true)(mode=shared)\"")
.append("/>")
.append("<service ")
.append("interface=\"bundle.a\" ")
@@ -263,7 +263,7 @@ public class ServiceDependencyTest exten
try {
Subsystem child = installSubsystemFromFile(parent, APPLICATION_A);
try {
- assertSubsystemImportServiceHeader(child, "osgi.service;filter:=\"(objectClass=bundle.b)\";resolution:=mandatory;cardinality:=single");
+ assertSubsystemImportServiceHeader(child, "bundle.b;filter:=\"(&(active=true)(mode=shared))\";resolution:=mandatory;cardinality:=single;effective:=active");
}
finally {
uninstallSubsystemSilently(child);
@@ -300,7 +300,7 @@ public class ServiceDependencyTest exten
try {
Subsystem subsystem = installSubsystemFromFile(APPLICATION_B);
try {
- assertSubsystemImportServiceHeader(subsystem, "osgi.service;filter:=\"(objectClass=bundle.a)\";resolution:=optional;cardinality:=single");
+ assertSubsystemImportServiceHeader(subsystem, "bundle.a;resolution:=optional;cardinality:=single;effective:=active");
}
finally {
uninstallSubsystemSilently(subsystem);