You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2014/11/15 18:37:08 UTC
svn commit: r1639908 - in /aries/trunk/subsystem:
subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/
subsystem-itests/ subsystem-itests/src/test/bundles/tb4/
subsystem-itests/src/test/bundles/tb4/META-INF/
subsystem-itests/src/test/b...
Author: davidb
Date: Sat Nov 15 17:37:07 2014
New Revision: 1639908
URL: http://svn.apache.org/r1639908
Log:
ARIES-1263 Allow '*' wildcard as classname in Subsystem-ImportService and Subsystem-ExportService
Integration test (CompositeServiceTest.java) added.
Added:
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/
aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java
aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/
aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/
aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java
aries/trunk/subsystem/subsystem-itests/pom.xml
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java?rev=1639908&r1=1639907&r2=1639908&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Grammar.java Sat Nov 15 17:37:07 2014
@@ -15,17 +15,17 @@ package org.apache.aries.subsystem.core.
public interface Grammar {
-// section: *header +newline
-// nonempty-section: +header +newline
-// newline: CR LF | LF | CR (not followed by LF)
-// header: name : value
-// name: alphanum *headerchar
-// value: SPACE *otherchar newline *continuation
-// continuation: SPACE *otherchar newline
-// alphanum: {A-Z} | {a-z} | {0-9}
-// headerchar: alphanum | - | _
+// section: *header +newline
+// nonempty-section: +header +newline
+// newline: CR LF | LF | CR (not followed by LF)
+// header: name : value
+// name: alphanum *headerchar
+// value: SPACE *otherchar newline *continuation
+// continuation: SPACE *otherchar newline
+// alphanum: {A-Z} | {a-z} | {0-9}
+// headerchar: alphanum | - | _
// otherchar: any UTF-8 character except NUL, CR and LF
-
+
// public static final String ALPHA = "[A-Za-z]";
// public static final String DIGIT = "[0-9]";
// public static final String ALPHANUM = ALPHA + '|' + DIGIT;
@@ -39,16 +39,16 @@ public interface Grammar {
// public static final String HEADER = NAME + ':' + VALUE;
// public static final String SECTION = "(?:" + HEADER + ")*(?:" + NEWLINE + ")+";
// public static final String NONEMPTY_SECTION = "(?:" + HEADER + ")+(?:" + NEWLINE + ")+";
-
-// manifest-file: main-section newline *individual-section
-// main-section: version-info newline *main-attribute
-// version-info: Manifest-Version : version-number
-// version-number : digit+{.digit+}*
-// main-attribute: (any legitimate main attribute) newline
-// individual-section: Name : value newline *perentry-attribute
-// perentry-attribute: (any legitimate perentry attribute) newline
+
+// manifest-file: main-section newline *individual-section
+// main-section: version-info newline *main-attribute
+// version-info: Manifest-Version : version-number
+// version-number : digit+{.digit+}*
+// main-attribute: (any legitimate main attribute) newline
+// individual-section: Name : value newline *perentry-attribute
+// perentry-attribute: (any legitimate perentry attribute) newline
// digit: {0-9}
-
+
// public static final String VERSION_NUMBER = DIGIT + "+(?:\\." + DIGIT + "+)*";
// public static final String VERSION_INFO = "Manifest-Version: " + VERSION_NUMBER;
// public static final String MAIN_ATTRIBUTE = HEADER + NEWLINE;
@@ -56,7 +56,7 @@ public interface Grammar {
// public static final String PERENTRY_ATTRIBUTE = HEADER + NEWLINE;
// public static final String INDIVIDUAL_SECTION = "Name: " + VALUE + NEWLINE + "(?:" + PERENTRY_ATTRIBUTE + ")*";
// public static final String MANIFEST_FILE = MAIN_SECTION + NEWLINE + "(?:" + INDIVIDUAL_SECTION + ")*";
-
+
// digit ::= [0..9]
// alpha ::= [a..zA..Z]
// alphanum ::= alpha | digit
@@ -72,7 +72,7 @@ public interface Grammar {
// path-sep ::= /
// header ::= clause ( , clause ) *
// clause ::= path ( ; path ) * ( ; parameter ) *
-
+
public static final String DIGIT = "[0-9]";
public static final String ALPHA = "[A-Za-z]";
public static final String ALPHANUM = DIGIT + '|' + ALPHA;
@@ -93,7 +93,7 @@ public interface Grammar {
public static final String HEADERCHAR = ALPHANUM + "|_|-";
public static final String NAME = ALPHANUM + "(?:" + HEADERCHAR + ")*";
public static final String HEADER = NAME + ": " + CLAUSE + "(?:," + CLAUSE + ")*";
-
+
/*
* jletter ::= a character for which the method Character.isJavaIdentifierStart(int) returns true
* jletterordigit::= a character for which the method Character.isJavaIdentifierPart(int) returns true
@@ -104,7 +104,7 @@ public interface Grammar {
* import ::= package-names ( ';' parameter )*
* package-names ::= package-name ( ';' package-name )* // See 1.3.2
*/
-
+
public static final String JLETTER = "\\p{javaJavaIdentifierStart}";
public static final String JLETTERORDIGIT = "\\p{javaJavaIdentifierPart}";
public static final String IDENTIFIER = JLETTER + "(?:" + JLETTERORDIGIT + ")*";
@@ -114,32 +114,33 @@ public interface Grammar {
public static final String PACKAGENAMES = PACKAGENAME + "\\s*(?:\\;\\s*" + PACKAGENAME + ")*";
public static final String IMPORT = PACKAGENAMES + "(?:;\\s*(?:" + PARAMETER + "))*";
public static final String IMPORTPACKAGE = IMPORT + "(?:\\,\\s*" + IMPORT + ")*";
-
+
public static final String NAMESPACE = SYMBOLICNAME;
public static final String REQUIREMENT = NAMESPACE + "(?:;\\s*(?:" + PARAMETER + "))*";
public static final String REQUIRE_CAPABILITY = REQUIREMENT + "(?:,\\s*(?:" + REQUIREMENT + "))*";
-
+
public static final String BUNDLE_DESCRIPTION = SYMBOLICNAME + "(?:;\\s*(?:" + PARAMETER + "))*";
public static final String REQUIRE_BUNDLE = BUNDLE_DESCRIPTION + "(?:,\\s*(?:" + BUNDLE_DESCRIPTION + "))*";
-
+
public static final String EXPORT = PACKAGENAMES + "(?:;\\s*(?:" + PARAMETER + "))*";
public static final String EXPORT_PACKAGE = EXPORT + "(?:,\\s*(?:" + EXPORT + "))*";
-
+
public static final String SCALAR = "String|Version|Long|Double";
public static final String LIST = "List<(?:" + SCALAR + ")>";
public static final String TYPE = "(?:" + SCALAR + ")|" + LIST;
public static final String TYPED_ATTR = EXTENDED + "(?:\\:" + TYPE + ")?=(?:" + ARGUMENT + ')';
public static final String CAPABILITY = NAMESPACE + "(?:;\\s*(?:(?:" + DIRECTIVE + ")|(?:" + TYPED_ATTR + ")))*";
public static final String PROVIDE_CAPABILITY = CAPABILITY + "(?:,\\s*(?:" + CAPABILITY + "))*";
-
+
public static final String OBJECTCLASS = PACKAGENAME;
- public static final String SERVICE = OBJECTCLASS + "(?:;\\s*(?:" + PARAMETER + "))*";
- public static final String SUBSYSTEM_EXPORTSERVICE = SERVICE + "(?:,\\s*(?:" + SERVICE + "))*";
- public static final String SUBSYSTEM_IMPORTSERVICE = SERVICE + "(?:,\\s*(?:" + SERVICE + "))*";
-
+ public static final String SERVICE_OR_WILDCARD = "(" + OBJECTCLASS + "|[*])(?:;\\s*(?:" + PARAMETER + "))*";
+ public static final String SUBSYSTEM_IMPORTEXPORTSERVICE = SERVICE_OR_WILDCARD + "(?:,\\s*(?:" + SERVICE_OR_WILDCARD + "))*";
+ public static final String SUBSYSTEM_EXPORTSERVICE = SUBSYSTEM_IMPORTEXPORTSERVICE;
+ public static final String SUBSYSTEM_IMPORTSERVICE = SUBSYSTEM_IMPORTEXPORTSERVICE;
+
public static final String RESOURCE = SYMBOLICNAME + "(?:;\\s*(?:" + PARAMETER + "))*";
public static final String PREFERRED_PROVIDER = RESOURCE + "(?:,\\s*(?:" + RESOURCE + "))*";
-
+
/*
* number ::= digit+
* version ::= major( '.' minor ( '.' micro ( '.' qualifier )? )? )?
@@ -153,7 +154,7 @@ public interface Grammar {
* floor ::= version
* ceiling ::= version
*/
-
+
public static final String NUMBER = DIGIT + '+';
public static final String MAJOR = NUMBER;
public static final String MINOR = NUMBER;
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java?rev=1639908&r1=1639907&r2=1639908&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemExportServiceHeader.java Sat Nov 15 17:37:07 2014
@@ -36,19 +36,19 @@ import org.osgi.service.subsystem.Subsys
public class SubsystemExportServiceHeader implements Header<SubsystemExportServiceHeader.Clause> {
public static class Clause implements org.apache.aries.subsystem.core.archive.Clause {
public static final String DIRECTIVE_FILTER = Constants.FILTER_DIRECTIVE;
-
- private static final Pattern PATTERN_OBJECTCLASS = Pattern.compile('(' + Grammar.OBJECTCLASS + ")(?=;|\\z)");
+
+ private static final Pattern PATTERN_OBJECTCLASS_OR_STAR = Pattern.compile("((" + Grammar.OBJECTCLASS + ")|[*])(?=;|\\z)");
private static final Pattern PATTERN_PARAMETER = Pattern.compile('(' + Grammar.PARAMETER + ")(?=;|\\z)");
-
+
private static void fillInDefaults(Map<String, Parameter> parameters) {
// No defaults.
}
-
+
private final String path;
private final Map<String, Parameter> parameters = new HashMap<String, Parameter>();
-
+
public Clause(String clause) {
- Matcher main = PATTERN_OBJECTCLASS.matcher(clause);
+ Matcher main = PATTERN_OBJECTCLASS_OR_STAR.matcher(clause);
if (!main.find())
throw new IllegalArgumentException("Missing objectClass path: " + clause);
path = main.group();
@@ -59,7 +59,7 @@ public class SubsystemExportServiceHeade
}
fillInDefaults(parameters);
}
-
+
@Override
public Attribute getAttribute(String name) {
Parameter result = parameters.get(name);
@@ -101,7 +101,7 @@ public class SubsystemExportServiceHeade
directives.trimToSize();
return directives;
}
-
+
public String getObjectClass() {
return path;
}
@@ -115,12 +115,12 @@ public class SubsystemExportServiceHeade
public Collection<Parameter> getParameters() {
return Collections.unmodifiableCollection(parameters.values());
}
-
+
@Override
public String getPath() {
return path;
}
-
+
public List<Capability> toCapabilities(Resource resource) throws InvalidSyntaxException {
List<Capability> capabilities = resource.getCapabilities(ServiceNamespace.SERVICE_NAMESPACE);
if (capabilities.isEmpty())
@@ -133,7 +133,7 @@ public class SubsystemExportServiceHeade
result.trimToSize();
return result;
}
-
+
@Override
public String toString() {
StringBuilder builder = new StringBuilder()
@@ -143,11 +143,11 @@ public class SubsystemExportServiceHeade
}
return builder.toString();
}
-
+
private Filter computeFilter() throws InvalidSyntaxException {
return FrameworkUtil.createFilter(computeFilterString());
}
-
+
private String computeFilterString() {
Directive directive = getDirective(DIRECTIVE_FILTER);
return new StringBuilder()
@@ -161,13 +161,13 @@ public class SubsystemExportServiceHeade
.toString();
}
}
-
+
public static final String NAME = SubsystemConstants.SUBSYSTEM_EXPORTSERVICE;
-
- private static final Pattern PATTERN = Pattern.compile('(' + Grammar.SERVICE + ")(?=,|\\z)");
-
+
+ private static final Pattern PATTERN = Pattern.compile("(" + Grammar.SUBSYSTEM_EXPORTSERVICE + ")(?=,|\\z)");
+
private final Set<Clause> clauses = new HashSet<Clause>();
-
+
public SubsystemExportServiceHeader(String value) {
Matcher matcher = PATTERN.matcher(value);
while (matcher.find())
@@ -175,7 +175,7 @@ public class SubsystemExportServiceHeade
if (clauses.isEmpty())
throw new IllegalArgumentException("A " + NAME + " header must have at least one clause");
}
-
+
@Override
public Collection<SubsystemExportServiceHeader.Clause> getClauses() {
return Collections.unmodifiableSet(clauses);
@@ -190,14 +190,14 @@ public class SubsystemExportServiceHeade
public String getValue() {
return toString();
}
-
+
public List<Capability> toCapabilities(Resource resource) throws InvalidSyntaxException {
List<Capability> result = new ArrayList<Capability>();
for (Clause clause : clauses)
result.addAll(clause.toCapabilities(resource));
return result;
}
-
+
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java?rev=1639908&r1=1639907&r2=1639908&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/SubsystemImportServiceHeader.java Sat Nov 15 17:37:07 2014
@@ -35,10 +35,10 @@ public class SubsystemImportServiceHeade
public static final String DIRECTIVE_EFFECTIVE = Constants.EFFECTIVE_DIRECTIVE;
public static final String DIRECTIVE_FILTER = Constants.FILTER_DIRECTIVE;
public static final String DIRECTIVE_RESOLUTION = Constants.RESOLUTION_DIRECTIVE;
-
- private static final Pattern PATTERN_NAMESPACE = Pattern.compile('(' + Grammar.NAMESPACE + ")(?=;|\\z)");
+
+ private static final Pattern PATTERN_OBJECTCLASS_OR_STAR = Pattern.compile("((" + Grammar.OBJECTCLASS + ")|[*])(?=;|\\z)");
private static final Pattern PATTERN_PARAMETER = Pattern.compile('(' + Grammar.PARAMETER + ")(?=;|\\z)");
-
+
private static void fillInDefaults(Map<String, Parameter> parameters) {
Parameter parameter = parameters.get(DIRECTIVE_EFFECTIVE);
if (parameter == null)
@@ -47,12 +47,12 @@ public class SubsystemImportServiceHeade
if (parameter == null)
parameters.put(DIRECTIVE_RESOLUTION, ResolutionDirective.MANDATORY);
}
-
+
private final String path;
private final Map<String, Parameter> parameters = new HashMap<String, Parameter>();
-
+
public Clause(String clause) {
- Matcher matcher = PATTERN_NAMESPACE.matcher(clause);
+ Matcher matcher = PATTERN_OBJECTCLASS_OR_STAR.matcher(clause);
if (!matcher.find())
throw new IllegalArgumentException("Missing namespace path: " + clause);
path = matcher.group();
@@ -63,13 +63,13 @@ public class SubsystemImportServiceHeade
}
fillInDefaults(parameters);
}
-
+
public Clause(Requirement requirement) {
path = requirement.getNamespace();
for (Entry<String, String> directive : requirement.getDirectives().entrySet())
parameters.put(directive.getKey(), DirectiveFactory.createDirective(directive.getKey(), directive.getValue()));
}
-
+
@Override
public Attribute getAttribute(String name) {
Parameter result = parameters.get(name);
@@ -126,11 +126,11 @@ public class SubsystemImportServiceHeade
public String getPath() {
return path;
}
-
+
public SubsystemImportServiceRequirement toRequirement(Resource resource) {
return new SubsystemImportServiceRequirement(this, resource);
}
-
+
@Override
public String toString() {
StringBuilder builder = new StringBuilder()
@@ -141,12 +141,11 @@ public class SubsystemImportServiceHeade
return builder.toString();
}
}
-
+
public static final String NAME = SubsystemConstants.SUBSYSTEM_IMPORTSERVICE;
-
- // TODO Subsystem-ImportService currently does not have its own grammar, but it's similar to Require-Capability.
- private static final Pattern PATTERN = Pattern.compile('(' + Grammar.REQUIREMENT + ")(?=,|\\z)");
-
+
+ private static final Pattern PATTERN = Pattern.compile("(" + Grammar.SUBSYSTEM_IMPORTSERVICE + ")(?=,|\\z)");
+
private static Collection<Clause> processHeader(String header) {
Matcher matcher = PATTERN.matcher(header);
Set<Clause> clauses = new HashSet<Clause>();
@@ -154,19 +153,19 @@ public class SubsystemImportServiceHeade
clauses.add(new Clause(matcher.group()));
return clauses;
}
-
+
private final Set<Clause> clauses;
-
+
public SubsystemImportServiceHeader(String value) {
this(processHeader(value));
}
-
+
public SubsystemImportServiceHeader(Collection<Clause> clauses) {
if (clauses.isEmpty())
throw new IllegalArgumentException("A " + NAME + " header must have at least one clause");
this.clauses = new HashSet<Clause>(clauses);
}
-
+
@Override
public Collection<SubsystemImportServiceHeader.Clause> getClauses() {
return Collections.unmodifiableSet(clauses);
@@ -181,7 +180,7 @@ public class SubsystemImportServiceHeade
public String getValue() {
return toString();
}
-
+
@Override
public List<SubsystemImportServiceRequirement> toRequirements(Resource resource) {
List<SubsystemImportServiceRequirement> requirements = new ArrayList<SubsystemImportServiceRequirement>(clauses.size());
@@ -189,7 +188,7 @@ public class SubsystemImportServiceHeade
requirements.add(clause.toRequirement(resource));
return requirements;
}
-
+
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
Modified: aries/trunk/subsystem/subsystem-itests/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/pom.xml?rev=1639908&r1=1639907&r2=1639908&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/pom.xml (original)
+++ aries/trunk/subsystem/subsystem-itests/pom.xml Sat Nov 15 17:37:07 2014
@@ -448,6 +448,24 @@
</configuration>
<phase>process-test-classes</phase>
</execution>
+ <execution>
+ <id>tb4-composite2</id>
+ <goals>
+ <goal>jar</goal>
+ </goals>
+ <configuration>
+ <archive>
+ <manifestFile>src/test/bundles/tb4/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ <classesDirectory>${project.build.directory}/test-classes</classesDirectory>
+ <includes>
+ <include>org/apache/aries/subsystem/itests/tb4/**</include>
+ </includes>
+ <outputDirectory>${project.build.directory}/test-classes/composite2</outputDirectory>
+ <finalName>tb4</finalName>
+ </configuration>
+ <phase>process-test-classes</phase>
+ </execution>
<!-- New pom for hello + related tests, part 1 -->
@@ -534,6 +552,18 @@
</sources>
</configuration>
</execution>
+ <execution>
+ <id>add-source-tb4</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-test-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>src/test/bundles/tb4</source>
+ </sources>
+ </configuration>
+ </execution>
<!-- New pom for hello tests, part 2 -->
Added: aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF?rev=1639908&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/META-INF/MANIFEST.MF Sat Nov 15 17:37:07 2014
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: TB4
+Bundle-SymbolicName: org.apache.aries.subsystem.itests.tb4
+Bundle-Version: 1.0.0
+Bundle-Activator: org.apache.aries.subsystem.itests.tb4.Activator
+Import-Package: org.osgi.framework,org.osgi.util.tracker
Added: aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java?rev=1639908&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/bundles/tb4/org/apache/aries/subsystem/itests/tb4/Activator.java Sat Nov 15 17:37:07 2014
@@ -0,0 +1,46 @@
+/*
+ * 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.itests.tb4;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Filter;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator implements BundleActivator {
+ private ServiceTracker<String, String> st;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ Filter filter = context.createFilter(
+ "(&(objectClass=java.lang.String)(test=testCompositeServiceImports))");
+ st = new ServiceTracker<String, String>(context, filter, null);
+ st.open();
+
+ String svc = st.waitForService(5000);
+ if ("testCompositeServiceImports".equals(svc)) {
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ props.put("test", "tb4");
+ context.registerService(String.class, "tb4", props);
+ }
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ st.close();
+ }
+}
Added: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java?rev=1639908&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeServiceTest.java Sat Nov 15 17:37:07 2014
@@ -0,0 +1,61 @@
+/*
+ * 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.itests;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.junit.Test;
+import org.osgi.framework.Filter;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.subsystem.Subsystem;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class CompositeServiceTest extends SubsystemTest {
+
+ @Override
+ protected void createApplications() throws Exception {
+ createApplication("composite2", "tb4.jar");
+ }
+
+ @Test
+ public void testCompositeServiceImportExportWildcards() throws Exception {
+ Dictionary<String, Object> props = new Hashtable<String, Object>();
+ props.put("test", "testCompositeServiceImports");
+ ServiceRegistration<String> reg = bundleContext.registerService(String.class, "testCompositeServiceImports", props);
+
+ Filter filter = bundleContext.createFilter("(&(objectClass=java.lang.String)(test=tb4))");
+ ServiceTracker<String, String> st = new ServiceTracker<String, String>(bundleContext, filter, null);
+ st.open();
+
+ Subsystem subsystem = installSubsystemFromFile("composite2.esa");
+ try {
+ assertEquals(Subsystem.State.INSTALLED, subsystem.getState());
+ subsystem.start();
+
+ String svc = st.waitForService(5000);
+ assertNotNull("The service registered by the bundle inside the composite cannot be found", svc);
+
+ assertEquals(Subsystem.State.ACTIVE, subsystem.getState());
+ } finally {
+ subsystem.stop();
+ uninstallSubsystem(subsystem);
+ reg.unregister();
+ st.close();
+ }
+ }
+}
Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF?rev=1639908&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/composite2/OSGI-INF/SUBSYSTEM.MF Sat Nov 15 17:37:07 2014
@@ -0,0 +1,6 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.composite2
+Subsystem-Type: osgi.subsystem.composite
+Subsystem-Content: org.apache.aries.subsystem.itests.tb4;version="[1.0.0,1.0.0]"
+Import-Package: org.osgi.framework,org.osgi.util.tracker
+Subsystem-ExportService: *;filter:="(test=tb4)"
+Subsystem-ImportService: *;filter:="(test=testCompositeServiceImports)"
\ No newline at end of file