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/10/08 04:16:07 UTC
svn commit: r1707430 - in /aries/trunk/subsystem/subsystem-core/src:
main/java/org/apache/aries/subsystem/core/archive/AbstractClauseBasedHeader.java
test/java/org/apache/aries/subsystem/core/archive/Aries1427Test.java
Author: jwross
Date: Thu Oct 8 02:16:07 2015
New Revision: 1707430
URL: http://svn.apache.org/viewvc?rev=1707430&view=rev
Log:
ARIES-1427 org.osgi.service.subsystem.SubsystemException: java.lang.IllegalArgumentException: Invalid filter: (version=*)
Add test.
Ignore the presence operator when parsing a version range from a filter.
The presence operator may exist with version ranges of the form (1.5.0,2.0.0). The filter form will be (&(version=*)(!(version<=1.5.0))(!(version>=2.0.0)). The presence operator
is required because an absent version attribute would otherwise match. These should simply be ignored for the purposes of converting back into a version range.
Added:
aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/Aries1427Test.java
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/AbstractClauseBasedHeader.java
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/AbstractClauseBasedHeader.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/AbstractClauseBasedHeader.java?rev=1707430&r1=1707429&r2=1707430&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/AbstractClauseBasedHeader.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/AbstractClauseBasedHeader.java Thu Oct 8 02:16:07 2015
@@ -49,6 +49,16 @@ public abstract class AbstractClauseBase
throw new IllegalArgumentException("Invalid filter: " + filter);
}
break;
+ case SimpleFilter.PRESENT:
+ /* This can happen with version ranges of the form
+ * (1.5.0,2.0.0). The filter form will be
+ * (&(version=*)(!(version<=1.5.0))(!(version>=2.0.0)). The
+ * presence operator is required because an absent version
+ * attribute would otherwise match. These should simply be
+ * ignored for the purposes of converting back into a
+ * version range.
+ */
+ break;
default:
throw new IllegalArgumentException("Invalid filter: " + filter);
}
Added: aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/Aries1427Test.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/Aries1427Test.java?rev=1707430&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/Aries1427Test.java (added)
+++ aries/trunk/subsystem/subsystem-core/src/test/java/org/apache/aries/subsystem/core/archive/Aries1427Test.java Thu Oct 8 02:16:07 2015
@@ -0,0 +1,67 @@
+/*
+ * 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.util.Collections;
+import java.util.List;
+
+import org.apache.aries.subsystem.core.internal.BasicRequirement;
+import org.junit.Test;
+import org.osgi.framework.VersionRange;
+import org.osgi.framework.namespace.PackageNamespace;
+import org.osgi.resource.Capability;
+import org.osgi.resource.Requirement;
+import org.osgi.resource.Resource;
+
+/*
+ * https://issues.apache.org/jira/browse/ARIES-1427
+ *
+ * org.osgi.service.subsystem.SubsystemException:
+ * java.lang.IllegalArgumentException: Invalid filter: (version=*)
+ */
+public class Aries1427Test {
+ @Test
+ public void testRequirementConversionWithVersionPresence() {
+ VersionRange range = VersionRange.valueOf("(1.0,2.0)");
+ String filter = new StringBuilder()
+ .append("(&(")
+ .append(PackageNamespace.PACKAGE_NAMESPACE)
+ .append("=com.acme.tnt")
+ .append(')')
+ .append(range.toFilterString(PackageNamespace.CAPABILITY_VERSION_ATTRIBUTE))
+ .append(')')
+ .toString();
+ Requirement requirement = new BasicRequirement.Builder()
+ .namespace(PackageNamespace.PACKAGE_NAMESPACE)
+ .directive(PackageNamespace.REQUIREMENT_FILTER_DIRECTIVE, filter)
+ .resource(new Resource() {
+ @Override
+ public List<Capability> getCapabilities(String namespace) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public List<Requirement> getRequirements(String namespace) {
+ return Collections.emptyList();
+ }
+ })
+ .build();
+ ImportPackageHeader.Clause expected = new ImportPackageHeader.Clause(
+ "com.acme.tnt;version=\"(1.0,2.0)\"");
+ ImportPackageHeader.Clause actual = ImportPackageHeader.Clause.valueOf(requirement);
+ assertEquals("Wrong clause", expected, actual);
+ }
+}