| /* |
| * 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.karaf.itests; |
| |
| import static org.ops4j.pax.tinybundles.core.TinyBundles.bundle; |
| |
| import java.io.InputStream; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.List; |
| |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.ops4j.pax.exam.Configuration; |
| import org.ops4j.pax.exam.CoreOptions; |
| import org.ops4j.pax.exam.Option; |
| import org.ops4j.pax.exam.junit.PaxExam; |
| import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; |
| import org.ops4j.pax.exam.spi.reactors.PerClass; |
| import org.osgi.framework.Bundle; |
| import org.osgi.framework.Constants; |
| |
| @RunWith(PaxExam.class) |
| @ExamReactorStrategy(PerClass.class) |
| public class ImportServiceTest extends KarafTestSupport { |
| |
| private static final String BUNDLE2_NAME = "testbundle.require.service"; |
| private static final String BUNDLE1_NAME = "testbundle.import.service"; |
| |
| @SuppressWarnings("deprecation") |
| @Configuration |
| public Option[] config() { |
| List<Option> options = new ArrayList<Option>(Arrays.asList(super.config())); |
| InputStream testBundleImportService = bundle() |
| .set(Constants.IMPORT_SERVICE, "FooService") |
| .set(Constants.BUNDLE_SYMBOLICNAME, BUNDLE1_NAME) |
| .set(Constants.BUNDLE_VERSION, "1.0.0") |
| .set(Constants.BUNDLE_MANIFESTVERSION, "2") |
| .build(); |
| options.add(CoreOptions.streamBundle(testBundleImportService)); |
| InputStream testBundleRequireService = bundle() |
| .set(Constants.REQUIRE_CAPABILITY, "osgi.service;effective:=active;filter:=\"(objectClass=FooService)\"") |
| .set(Constants.BUNDLE_SYMBOLICNAME, BUNDLE2_NAME) |
| .set(Constants.BUNDLE_VERSION, "1.0.0") |
| .set(Constants.BUNDLE_MANIFESTVERSION, "2") |
| .build(); |
| options.add(CoreOptions.streamBundle(testBundleRequireService)); |
| return options.toArray(new Option[] {}); |
| } |
| |
| /** |
| * Checks that the resolver does not mandate specified required services to be present. |
| * This is done for backwards compatibility as not all bundles define capabilities for services they start. |
| */ |
| @Test |
| public void checkBundleStarted() throws InterruptedException { |
| waitBundleState(BUNDLE1_NAME, Bundle.ACTIVE); |
| waitBundleState(BUNDLE2_NAME, Bundle.ACTIVE); |
| } |
| } |