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);
+	}
+}