| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.felix.useradmin.itest; |
| |
| import static org.junit.Assert.assertNotNull; |
| import static org.ops4j.pax.exam.Constants.START_LEVEL_SYSTEM_BUNDLES; |
| import static org.ops4j.pax.exam.Constants.START_LEVEL_TEST_BUNDLE; |
| import static org.ops4j.pax.exam.CoreOptions.bootDelegationPackage; |
| import static org.ops4j.pax.exam.CoreOptions.cleanCaches; |
| import static org.ops4j.pax.exam.CoreOptions.felix; |
| import static org.ops4j.pax.exam.CoreOptions.frameworkStartLevel; |
| import static org.ops4j.pax.exam.CoreOptions.junitBundles; |
| import static org.ops4j.pax.exam.CoreOptions.mavenBundle; |
| import static org.ops4j.pax.exam.CoreOptions.options; |
| import static org.ops4j.pax.exam.CoreOptions.url; |
| |
| import javax.inject.Inject; |
| |
| import org.junit.Before; |
| import org.ops4j.pax.exam.CoreOptions; |
| import org.ops4j.pax.exam.Option; |
| import org.ops4j.pax.exam.junit.Configuration; |
| import org.osgi.framework.Bundle; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.service.useradmin.UserAdmin; |
| import org.osgi.util.tracker.ServiceTracker; |
| |
| /** |
| * Base class for integration tests. |
| * |
| * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a> |
| */ |
| public abstract class BaseIntegrationTest |
| { |
| |
| private static final int DEFAULT_TIMEOUT = 10000; |
| |
| protected static final String ORG_APACHE_FELIX_USERADMIN = "org.apache.felix.useradmin"; |
| protected static final String ORG_APACHE_FELIX_USERADMIN_FILESTORE = "org.apache.felix.useradmin.filestore"; |
| protected static final String ORG_APACHE_FELIX_USERADMIN_MONGODBSTORE = "org.apache.felix.useradmin.mongodb"; |
| protected static final String ORG_MONGODB_MONGO_JAVA_DRIVER = "org.mongodb.mongo-java-driver"; |
| |
| @Inject |
| protected volatile BundleContext m_context; |
| |
| @Configuration |
| public Option[] config() |
| { |
| return options( |
| bootDelegationPackage("sun.*"), |
| cleanCaches(), |
| CoreOptions.systemProperty("logback.configurationFile").value("file:src/test/resources/logback.xml"), // |
| // CoreOptions.vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8787"), |
| |
| mavenBundle("org.slf4j", "slf4j-api").version("1.6.5").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| mavenBundle("ch.qos.logback", "logback-core").version("1.0.6").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| mavenBundle("ch.qos.logback", "logback-classic").version("1.0.6").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| |
| url("link:classpath:META-INF/links/org.ops4j.pax.exam.link").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| url("link:classpath:META-INF/links/org.ops4j.pax.exam.inject.link").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| url("link:classpath:META-INF/links/org.ops4j.pax.extender.service.link").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| url("link:classpath:META-INF/links/org.ops4j.base.link").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| url("link:classpath:META-INF/links/org.ops4j.pax.swissbox.core.link").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| url("link:classpath:META-INF/links/org.ops4j.pax.swissbox.extender.link").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| url("link:classpath:META-INF/links/org.ops4j.pax.swissbox.lifecycle.link").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| url("link:classpath:META-INF/links/org.ops4j.pax.swissbox.framework.link").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| url("link:classpath:META-INF/links/org.apache.geronimo.specs.atinject.link").startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| |
| mavenBundle("org.apache.felix", ORG_APACHE_FELIX_USERADMIN).versionAsInProject().startLevel(START_LEVEL_SYSTEM_BUNDLES), |
| mavenBundle("org.apache.felix", ORG_APACHE_FELIX_USERADMIN_FILESTORE).versionAsInProject().noStart(), |
| mavenBundle("org.apache.felix", ORG_APACHE_FELIX_USERADMIN_MONGODBSTORE).versionAsInProject().noStart(), mavenBundle("org.mongodb", "mongo-java-driver").versionAsInProject().noStart(), |
| |
| junitBundles(), frameworkStartLevel(START_LEVEL_TEST_BUNDLE), felix()); |
| } |
| |
| @Before |
| public void setUp() throws Exception |
| { |
| assertNotNull("No bundle context?!", m_context); |
| } |
| |
| /** |
| * Waits for a service to become available in certain time interval. |
| * @param serviceName |
| * @return |
| * @throws Exception |
| */ |
| protected <T> T awaitService(String serviceName) throws Exception |
| { |
| ServiceTracker tracker = new ServiceTracker(m_context, serviceName, null); |
| tracker.open(); |
| T result; |
| try |
| { |
| result = (T) tracker.waitForService(DEFAULT_TIMEOUT); |
| } |
| finally |
| { |
| tracker.close(); |
| } |
| return result; |
| } |
| |
| /** |
| * @param bsn |
| * @return |
| */ |
| protected Bundle findBundle(String bsn) |
| { |
| for (Bundle bundle : m_context.getBundles()) |
| { |
| if (bsn.equals(bundle.getSymbolicName())) |
| { |
| return bundle; |
| } |
| } |
| return null; |
| } |
| |
| protected Bundle getFileStoreBundle() |
| { |
| Bundle b = findBundle(ORG_APACHE_FELIX_USERADMIN_FILESTORE); |
| assertNotNull("Filestore bundle not found?!", b); |
| return b; |
| } |
| |
| protected Bundle getMongoDBStoreBundle() |
| { |
| Bundle b = findBundle(ORG_APACHE_FELIX_USERADMIN_MONGODBSTORE); |
| assertNotNull("MongoDB store bundle not found?!", b); |
| return b; |
| } |
| |
| protected Bundle getMongoDBBundle() |
| { |
| Bundle b = findBundle(ORG_MONGODB_MONGO_JAVA_DRIVER); |
| assertNotNull("MongoDB bundle not found?!", b); |
| return b; |
| } |
| |
| /** |
| * Obtains a service without waiting for it to become available. |
| * @param serviceName |
| * @return |
| * @throws Exception |
| */ |
| protected <T> T getService(String serviceName) throws Exception |
| { |
| ServiceTracker tracker = new ServiceTracker(m_context, serviceName, null); |
| tracker.open(); |
| T result; |
| try |
| { |
| result = (T) tracker.getService(); |
| } |
| finally |
| { |
| tracker.close(); |
| } |
| return result; |
| } |
| |
| /** |
| * @return the {@link UserAdmin} service instance. |
| */ |
| protected UserAdmin getUserAdmin() throws Exception |
| { |
| return getService(UserAdmin.class.getName()); |
| } |
| } |