/**
* Copyright 2011-2012 Universite Joseph Fourier, LIG, ADELE team
* 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 fr.imag.adele.apam.tests.helpers;
import static org.ops4j.pax.exam.CoreOptions.cleanCaches;
import static org.ops4j.pax.exam.CoreOptions.frameworkProperty;
import static org.ops4j.pax.exam.CoreOptions.junitBundles;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.CoreOptions.systemProperty;
import static org.ops4j.pax.exam.CoreOptions.systemTimeout;
import static org.ops4j.pax.exam.CoreOptions.vmOption;
import static org.ops4j.pax.exam.CoreOptions.when;
import java.io.File;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TestName;
import org.junit.rules.TestRule;
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.options.CompositeOption;
import org.ops4j.pax.exam.options.DefaultCompositeOption;
import org.ops4j.pax.exam.util.PathUtils;
import org.osgi.framework.BundleContext;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import fr.imag.adele.apam.Apam;
import fr.imag.adele.apam.CST;
import fr.imag.adele.apam.ComponentBroker;
public abstract class ExtensionAbstract extends TestUtils {
// Based on the current running, no test should take longer than 2 minute
@Rule
public TestRule globalTimeout = new ApamTimeoutRule(
isDebugModeOn() ? 3600000 : 60000);
@Rule
public TestName name = new TestName();
@Inject
public BundleContext context;
// private Logger logger = LoggerFactory.getLogger(getClass());
private Logger logger = (Logger) LoggerFactory
.getLogger(Logger.ROOT_LOGGER_NAME);
public ApAMHelper apam;
protected ComponentBroker broker;
boolean startObrMan = false;
protected static Option[] configuration = null;
@Configuration
public Option[] apamConfig() {
Option conf[] = config().toArray(new Option[0]);
configuration = conf;
return conf;
}
public List<Option> config() {
return config(null, true);
}
public List<Option> config(Map<String, String> testApps, boolean startObrMan) {
List<Option> config = new ArrayList<Option>();
config.add(packInitialConfig());
config.add(packOSGi());
config.add(packPax());
config.add(packApamCore());
config.add(packApamShell());
this.startObrMan = startObrMan;
if (startObrMan) {
config.add(packApamObrMan());
}
if (testApps != null && !testApps.isEmpty()) {
for (String artifactID : testApps.keySet()) {
config.add(packAppForTestBundles(testApps.get(artifactID),
artifactID));
}
}
// config.add(packAppForTestBundles()); Not for all tests
config.add(packLog());
config.add(junitBundles());
config.add(packDebugConfiguration());
// config.add(vmOption("-ea"));
return config;
}
public List<Option> configWithoutTests() {
List<Option> config = new ArrayList<Option>();
config.add(packInitialConfig());
config.add(packOSGi());
config.add(packPax());
config.add(packApamCore());
config.add(packApamShell());
config.add(packLog());
config.add(junitBundles());
config.add(packDebugConfiguration());
// config.add(vmOption("-ea"));
return config;
}
private boolean isDebugModeOn() {
RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = RuntimemxBean.getInputArguments();
boolean debugModeOn = false;
for (String string : arguments) {
debugModeOn = string.indexOf("jdwp") != -1;
if (debugModeOn) {
break;
}
}
return debugModeOn;
}
protected CompositeOption packApamConflictManager() {
CompositeOption apamConflictManagerConfig = new DefaultCompositeOption(
mavenBundle("fr.imag.adele.apam", "manager.conflict")
.versionAsInProject());
return apamConflictManagerConfig;
}
protected CompositeOption packApamCore() {
CompositeOption apamCoreConfig = new DefaultCompositeOption(
mavenBundle().groupId("fr.imag.adele.apam")
.artifactId("apam-bundle").versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests", "apam-helpers")
.versionAsInProject());
return apamCoreConfig;
}
protected CompositeOption packApamDistriMan() {
CompositeOption apamObrmanConfig = new DefaultCompositeOption(
// version as in project
// org.ops4j.pax.exam.CoreOptions
// .repositories(
// "http://repo.maven.apache.org/maven2/",
// "https://maven.java.net/content/repositories/releases/",
// "https://repository.apache.org/content/groups/public",
// "https://repository.apache.org/content/groups/snapshots",
//
// "http://repository.springsource.com/maven/bundles/release",
// "http://repository.springsource.com/maven/bundles/external",
// "http://repository.ow2.org/nexus/content/repositories/snapshots",
// "http://repository.ow2.org/nexus/content/repositories/releases",
// "http://repository.ow2.org/nexus/content/sites/ow2-utilities",
// "http://repository.ow2.org/nexus/content/repositories/thirdparty",
// "http://repository.ow2.org/nexus/content/repositories/ow2-legacy",
// "http://repository.ow2.org/nexus/content/groups/public"),
mavenBundle("org.ow2.asm", "asm-all").version("4.1"),
mavenBundle("javax.mail", "com.springsource.javax.mail")
.version("1.4.1"), mavenBundle("javax.wsdl",
"com.springsource.javax.wsdl").version("1.6.1"),
mavenBundle("javax.xml.stream",
"com.springsource.javax.xml.stream").version("1.0.1"),
mavenBundle("org.apache.xml",
"com.springsource.org.apache.xml.resolver").version(
"1.2.0"), mavenBundle("org.dom4j",
"com.springsource.org.dom4j").version("1.6.1"),
mavenBundle("joda-time", "joda-time").version("1.6.2"),
mavenBundle("org.apache.cxf", "cxf-bundle-minimal").version(
"2.5.2"), mavenBundle("com.google.guava", "guava")
.version("13.0-rc1"), mavenBundle("javax.ws.rs",
"javax.ws.rs-api").version("2.0-m09"), mavenBundle(
"javax.ws.rs", "jsr311-api").version("1.1"),
mavenBundle("org.apache.neethi", "neethi").version("3.0.2"),
mavenBundle("org.apache.felix", "org.apache.felix.http.jetty")
.version("2.2.0"), mavenBundle(
"org.apache.servicemix.bundles",
"org.apache.servicemix.bundles.opensaml").version(
"2.4.1_1"), mavenBundle("org.apache.ws.xmlschema",
"xmlschema-core").version("2.0"), mavenBundle(
"org.codehaus.jackson", "jackson-core-asl").version(
"1.9.12"), mavenBundle("org.codehaus.jackson",
"jackson-mapper-asl").version("1.9.12"), mavenBundle(
"fr.imag.adele.apam", "DISTRIMAN").versionAsInProject()
);
return apamObrmanConfig;
}
protected CompositeOption packApamObrMan() {
CompositeOption apamObrmanConfig = new DefaultCompositeOption(
mavenBundle().groupId("fr.imag.adele.apam")
.artifactId("obrman").versionAsInProject());
return apamObrmanConfig;
}
protected CompositeOption packApamShell() {
CompositeOption logConfig = new DefaultCompositeOption(
mavenBundle("fr.imag.adele.apam", "apam-universal-shell")
.versionAsInProject(),
mavenBundle("org.apache.felix", "org.apache.felix.gogo.command")
.version("0.12.0"),
mavenBundle("org.apache.felix", "org.apache.felix.gogo.runtime")
.version("0.10.0"), mavenBundle("org.apache.felix",
"org.apache.felix.gogo.shell").version("0.10.0"),
mavenBundle("org.apache.felix",
"org.apache.felix.ipojo.arch.gogo").version("1.0.1"),
mavenBundle("org.knowhowlab.osgi.shell", "felix-gogo").version(
"1.1.0"));
return logConfig;
}
protected CompositeOption packAppForTestBundles() {
CompositeOption testAppBundle = new DefaultCompositeOption(mavenBundle(
"fr.imag.adele.apam.tests", "apam-helpers")
.versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests.obrman.app1.private",
"APP1-MainImpl").versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests.obrman.app1.private",
"APP1-MainSpec").versionAsInProject(), mavenBundle(
"fr.imag.adele.apam.tests.obrman.app1.private",
"APP1-S1-Spec").versionAsInProject(), mavenBundle(
"fr.imag.adele.apam.tests.obrman.app1.private",
"APP1-S2-Spec").versionAsInProject(), mavenBundle(
"fr.imag.adele.apam.tests.obrman.app1.private",
"APP1-S3-Spec").versionAsInProject(), mavenBundle(
"fr.imag.adele.apam.tests.obrman.app1.public",
"APP1-Spec").versionAsInProject(), mavenBundle(
"fr.imag.adele.apam.tests.obrman.app2.private",
"APP2-MainImpl").versionAsInProject(), mavenBundle(
"fr.imag.adele.apam.tests.obrman.app2.private",
"APP2-MainSpec").versionAsInProject(), mavenBundle(
"fr.imag.adele.apam.tests.obrman.app2.public",
"APP2-Spec").versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests.services",
"apam-pax-samples-iface").versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests.services",
"apam-pax-samples-impl-s1").versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests.services",
"apam-pax-samples-impl-s2").versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests.services",
"apam-pax-samples-impl-s3").versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests.services",
"apam-pax-samples-impl-s6").versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests.messages",
"apam-pax-samples-msg").versionAsInProject(),
mavenBundle("fr.imag.adele.apam.tests.messages",
"apam-pax-samples-impl-m1").versionAsInProject());
return testAppBundle;
}
protected CompositeOption packAppForTestBundles(String groupID,
String artifactID) {
CompositeOption testAppBundle = new DefaultCompositeOption(mavenBundle(
"fr.imag.adele.apam.tests", "apam-helpers")
.versionAsInProject(),
mavenBundle(groupID, artifactID).versionAsInProject());
return testAppBundle;
}
protected CompositeOption packDebugConfiguration() {
CompositeOption debugConfig = new DefaultCompositeOption(
when(isDebugModeOn())
.useOptions(
vmOption(String
.format("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=%d",
Constants.CONST_DEBUG_PORT)),
systemTimeout(3600000)));
return debugConfig;
}
protected CompositeOption packInitialConfig() {
Logger root = (Logger) LoggerFactory
.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
root.setLevel(Level.WARN);
String logpath = "file:" + PathUtils.getBaseDir() + "/log/logback.xml";
//File log = new File(logpath);
//
// boolean includeLog = log.exists() && log.isFile();
CompositeOption initial = new DefaultCompositeOption(
vmOption("-XX:+UnlockDiagnosticVMOptions"),
vmOption("-XX:+UnsyncloadClass"),
frameworkProperty(
"org.osgi.service.http.port").value("8280"), cleanCaches(),
systemProperty("logback.configurationFile").value(logpath),
systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level")
.value("WARN"));
return initial;
}
protected CompositeOption packLog() {
CompositeOption logConfig = new DefaultCompositeOption(mavenBundle(
"ch.qos.logback", "logback-core").versionAsInProject(),
mavenBundle("ch.qos.logback", "logback-classic")
.versionAsInProject(), mavenBundle("org.slf4j",
"slf4j-api").versionAsInProject(), mavenBundle(
"org.apache.felix", "org.apache.felix.log").version(
"1.0.1"));
return logConfig;
}
protected CompositeOption packOSGi() {
CompositeOption osgiConfig = new DefaultCompositeOption(mavenBundle()
.groupId("org.apache.felix")
.artifactId("org.apache.felix.ipojo").versionAsInProject(),
mavenBundle().groupId("org.ow2.chameleon.testing")
.artifactId("osgi-helpers").versionAsInProject(),
mavenBundle().groupId("org.osgi")
.artifactId("org.osgi.compendium").version("4.2.0"),
mavenBundle().groupId("org.apache.felix")
.artifactId("org.apache.felix.bundlerepository")
.version("1.6.6"),
frameworkProperty("ipojo.processing.synchronous").value("false"),
frameworkProperty("org.apache.felix.ipojo.extender.ThreadPoolSize").value("5"));
return osgiConfig;
}
protected CompositeOption packPax() {
CompositeOption paxConfig = new DefaultCompositeOption(mavenBundle()
.groupId("org.ops4j.pax.url").artifactId("pax-url-mvn")
.versionAsInProject());
return paxConfig;
}
@Before
public void setUp() {
waitForApam();
apam = new ApAMHelper(context);
broker = CST.componentBroker;
logger.info("***[Run Test : " + name.getMethodName() + "]***");
if (startObrMan) {
waitForInstByName(null, "OBRMAN-Instance");
// apam.waitForIt(1000);
}
}
@After
public void tearDown() {
apam.dispose();
}
}