package com.elasticinbox.itests;
import static com.jayway.restassured.RestAssured.expect;
import static org.ops4j.pax.exam.CoreOptions.felix;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
import static org.ops4j.pax.exam.CoreOptions.options;
import static org.ops4j.pax.exam.CoreOptions.scanDir;
import static org.ops4j.pax.exam.CoreOptions.systemProperty;
import static org.ops4j.pax.exam.CoreOptions.workingDirectory;
import static org.ops4j.pax.exam.CoreOptions.wrappedBundle;
import java.io.IOException;
import java.io.InputStream;
import javax.inject.Inject;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractIntegrationTest
{
static final String TEST_ACCOUNT = "test@elasticinbox.com";
static final String TEST_PASSWORD = "valid";
static final String REST_PATH = "/rest/v2/elasticinbox.com/test";
static final String EMAIL_LARGE_ATT = "/01-attach-utf8.eml";
static final String EMAIL_REGULAR = "/01-headers-utf8.eml";
static final String EMAIL_SIMPLE = "/01-simple-ascii.eml";
static Boolean initialized = false;
static final Logger logger =
LoggerFactory.getLogger(AbstractIntegrationTest.class);
@Inject
private BundleContext bc;
@Configuration()
public Option[] config()
{
return options(
//junitBundles(),
felix().version("3.2.2"),
workingDirectory("target/paxrunner/"),
//repository("https://repository.apache.org/snapshots/").allowSnapshots(),
// Configs
systemProperty("elasticinbox.config").value("../test-classes/elasticinbox.yaml"),
systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"),
// PAX Exam Bundles
mavenBundle().groupId("org.mortbay.jetty").artifactId("servlet-api").versionAsInProject(),
mavenBundle().groupId("org.ops4j.pax.web").artifactId("pax-web-api").versionAsInProject(),
mavenBundle().groupId("org.ops4j.pax.web").artifactId("pax-web-spi").versionAsInProject(),
mavenBundle().groupId("org.ops4j.pax.web").artifactId("pax-web-jetty-bundle").versionAsInProject(),
mavenBundle().groupId("org.ops4j.pax.web").artifactId("pax-web-extender-war").versionAsInProject(),
// Logging
mavenBundle().groupId("ch.qos.logback").artifactId("logback-core").versionAsInProject(),
mavenBundle().groupId("ch.qos.logback").artifactId("logback-classic").versionAsInProject(),
mavenBundle().groupId("org.slf4j").artifactId("slf4j-api").versionAsInProject(),
// REST-Assured Bundles
wrappedBundle(mavenBundle().groupId("com.jayway.restassured").artifactId("rest-assured").versionAsInProject()).
imports("org.apache.http.impl.conn,org.apache.http.impl.client,org.apache.commons.lang3,org.apache.commons.lang3.math,org.codehaus.jackson.map,groovy.lang,org.hamcrest,*"),
wrappedBundle(mavenBundle().groupId("org.hamcrest").artifactId("hamcrest-all").versionAsInProject()),
mavenBundle().groupId("org.codehaus.groovy").artifactId("groovy-all").version("1.8.8"),
mavenBundle().groupId("org.apache.commons").artifactId("commons-lang3").version("3.1"),
mavenBundle().groupId("commons-collections").artifactId("commons-collections").version("3.2.1"),
mavenBundle().groupId("org.apache.httpcomponents").artifactId("httpcore-osgi").version("4.2.2"),
mavenBundle().groupId("org.apache.httpcomponents").artifactId("httpclient-osgi").version("4.2.2"),
mavenBundle().groupId("org.codehaus.jackson").artifactId("jackson-core-asl").version("1.8.5"),
mavenBundle().groupId("org.codehaus.jackson").artifactId("jackson-mapper-asl").version("1.8.5"),
mavenBundle().groupId("org.codehaus.jackson").artifactId("jackson-jaxrs").version("1.8.5"),
wrappedBundle(mavenBundle().groupId("org.apache.httpcomponents").artifactId("httpmime").version("4.2.2")),
wrappedBundle(mavenBundle("oauth.signpost", "signpost-commonshttp4", "1.2.1.2")),
wrappedBundle(mavenBundle("oauth.signpost", "signpost-core", "1.2.1.2")),
wrappedBundle(mavenBundle("org.ccil.cowan.tagsoup", "tagsoup", "1.2.1")),
// jClouds and dependencies
mavenBundle().groupId("com.google.inject").artifactId("guice").versionAsInProject(),
mavenBundle().groupId("org.jclouds").artifactId("jclouds-core").versionAsInProject(),
mavenBundle().groupId("org.jclouds").artifactId("jclouds-blobstore").versionAsInProject(),
mavenBundle().groupId("org.jclouds.api").artifactId("filesystem").versionAsInProject(),
mavenBundle().groupId("org.jclouds.common").artifactId("aws-common").versionAsInProject(),
mavenBundle().groupId("org.jclouds.provider").artifactId("aws-s3").versionAsInProject(),
mavenBundle().groupId("org.jclouds.api").artifactId("s3").versionAsInProject(),
mavenBundle().groupId("org.jclouds.common").artifactId("azure-common").versionAsInProject(),
mavenBundle().groupId("org.jclouds.provider").artifactId("azureblob").versionAsInProject(),
mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.aopalliance").versionAsInProject(),
mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.javax-inject").versionAsInProject(),
mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.oauth-commons").versionAsInProject(),
mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.java-xmlbuilder").versionAsInProject(),
mavenBundle().groupId("com.google.inject.extensions").artifactId("guice-assistedinject").versionAsInProject(),
mavenBundle().groupId("com.google.code.gson").artifactId("gson").versionAsInProject(),
mavenBundle().groupId("org.bouncycastle").artifactId("bcprov-jdk16").versionAsInProject(),
mavenBundle().groupId("org.99soft.guice").artifactId("rocoto").versionAsInProject(),
// ElasticInbox Bundles
mavenBundle().groupId("com.google.guava").artifactId("guava").versionAsInProject(),
mavenBundle().groupId("com.fasterxml.jackson.core").artifactId("jackson-core").versionAsInProject(),
mavenBundle().groupId("com.fasterxml.jackson.core").artifactId("jackson-databind").versionAsInProject(),
mavenBundle().groupId("com.fasterxml.jackson.core").artifactId("jackson-annotations").versionAsInProject(),
mavenBundle().groupId("com.ning").artifactId("compress-lzf").versionAsInProject(),
mavenBundle().groupId("com.sun.jersey").artifactId("jersey-core").versionAsInProject(),
mavenBundle().groupId("com.sun.jersey").artifactId("jersey-server").versionAsInProject(),
mavenBundle().groupId("com.sun.jersey").artifactId("jersey-servlet").versionAsInProject(),
mavenBundle().groupId("javax.mail").artifactId("mail").versionAsInProject(),
mavenBundle().groupId("commons-io").artifactId("commons-io").versionAsInProject(),
mavenBundle().groupId("commons-lang").artifactId("commons-lang").versionAsInProject(),
scanDir("../bundles/com.ecyrd.speed4j/target/"),
scanDir("../modules/common/target/"),
scanDir("../modules/config/target/"),
scanDir("../modules/core/target/"),
scanDir("../modules/rest/target/")
// remote debugging
//, vmOption( "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005" )
);
}
public BundleContext getBundleContext() {
return bc;
}
/**
* This is hack which initializes account. Ideally we should put this into @BeforeClass
* and @AfterClass. However PaxExam does not support it at this moment (see PAXEXAM-288).
*
* This method should be called at the beginning of each test manually.
* @throws InterruptedException
*/
public static synchronized void initAccount()
{
// delete account
expect().statusCode(204).when().delete(REST_PATH);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// ignore
}
// create account
expect().statusCode(201).when().post(REST_PATH);
}
//@Test
public void bundleContextTest()
{
logger.info("BundleContext of bundle injected: {}", getBundleContext().getBundle().getSymbolicName());
for (Bundle b : getBundleContext().getBundles()) {
logger.info("Bundle {} [state={}]", b.getSymbolicName(), b.getState());
}
}
/**
* Returns resource size
*
* @param name
* @return
* @throws IOException
*/
public long getResourceSize(String messageFile) throws IOException
{
InputStream in = null;
try {
in = this.getClass().getResourceAsStream(messageFile);
return in.available();
} finally {
in.close();
}
}
}