Skip to content

Commit

Permalink
adds initial arquillian integration testing support
Browse files Browse the repository at this point in the history
  • Loading branch information
bmckinney committed Apr 6, 2016
1 parent 8a7403b commit 2f243b1
Show file tree
Hide file tree
Showing 7 changed files with 338 additions and 4 deletions.
76 changes: 72 additions & 4 deletions pom.xml
Expand Up @@ -12,6 +12,13 @@
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jacoco.version>0.7.5.201505241946</jacoco.version>
<org.jboss.arquillian.version>1.1.1.Final</org.jboss.arquillian.version>
<org.jboss.arquillian.drone.version>1.3.0.Final</org.jboss.arquillian.drone.version>
<org.jboss.arquillian.selenium.bom.version>2.40.0</org.jboss.arquillian.selenium.bom.version>
<org.jboss.arquillian.graphene.version>2.0.2.Final</org.jboss.arquillian.graphene.version>
<arquillian.shrinkwrap.resolver>2.2.2</arquillian.shrinkwrap.resolver>
<glassfish.version>4.1</glassfish.version>
</properties>

<repositories>
Expand Down Expand Up @@ -49,9 +56,38 @@
<enabled>true</enabled>
</snapshots>
</repository>

<repository>
<id>jboss-public-repository-group</id>
<url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
</repository>
</repositories>


<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>1.1.5.Final</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-bom</artifactId>
<version>2.1.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-drone-bom</artifactId>
<version>1.3.1.Final</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>junit</groupId>
Expand Down Expand Up @@ -409,6 +445,30 @@
<version>4.0.0</version>
</dependency>

<!-- arquillian -->
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.shrinkwrap.resolver</groupId>
<artifactId>shrinkwrap-resolver-depchain</artifactId>
<type>pom</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-drone-webdriver-depchain</artifactId>
<type>pom</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-glassfish-managed-3.1</artifactId>
<version>1.0.0.CR4</version>
<scope>test</scope>
</dependency>

</dependencies>

Expand Down Expand Up @@ -441,8 +501,9 @@
<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
<!-- for use with `mvn -DcompilerArgument=-Xlint:unchecked compile` -->
<!-- for use with `mvn -DcompilerArgument=-Xlint:unchecked compile`
<compilerArgument>${compilerArgument}</compilerArgument>
-->
</configuration>
</plugin>
<plugin>
Expand Down Expand Up @@ -500,7 +561,7 @@
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.5.201505241946</version>
<version>${jacoco.version}</version>
<configuration>
<destfile>${basedir}/target/coverage-reports/jacoco-unit.exec</destfile>
<datafile>${basedir}/target/coverage-reports/jacoco-unit.exec</datafile>
Expand All @@ -526,6 +587,13 @@
<artifactId>coveralls-maven-plugin</artifactId>
<version>4.0.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.15</version>
<configuration>
<skipTests>false</skipTests>
</configuration>
</plugin>
</plugins>
</build>

Expand Down
@@ -0,0 +1,140 @@
package edu.harvard.iq.dataverse.batch.launcher;


import com.jayway.restassured.http.ContentType;
import com.jayway.restassured.path.json.JsonPath;
import com.jayway.restassured.response.Response;
import edu.harvard.iq.dataverse.api.UtilIT;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.importer.ZipImporter;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.*;
import org.junit.runner.RunWith;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.logging.Logger;

import static com.jayway.restassured.RestAssured.given;
import static com.jayway.restassured.RestAssured.with;
import static junit.framework.Assert.assertEquals;

/**
* Created by bmckinney on 3/30/16.
*/
@RunWith(Arquillian.class)
public class ImportLauncherIT {

private static final Logger logger = Logger.getLogger(ImportLauncherIT.class.getCanonicalName());

private static final String PRIVILEGED_USER = "src/test/resources/json/user-privileged.json";
private static final String GUEST_USER = "src/test/resources/json/user-guest.json";
private static final String TEST_DATAVERSE = "src/test/resources/json/complete-dataverse.json";
private static final String TEST_DATASET = "src/test/resources/json/test-dataset.json";

private static final String BUILT_IN_USER_KEY = "burrito";
private static final String USERNAME_KEY = "userName";
private static final String API_TOKEN_HTTP_HEADER = "X-Dataverse-key";

private String dsid;
private String dvAlias;
private String privilegedUserToken;
private String privilegedUserName;
private String guestUserName;

@Deployment
public static WebArchive createDeployment() {

WebArchive war = ShrinkWrap.create(ZipImporter.class, "test-dataverse.war")
.importFrom(new File("target/dataverse-4.2.4.war"))
.as(WebArchive.class);
war.delete("WEB-INF/classes/META-INF/persistence.xml");
war.addAsResource(new File("src/test/resources/glassfish/test-persistence.xml"), "META-INF/persistence.xml");
return war;

}

@Before
public void before() throws Exception{

Response response;

// BuiltinUsers.KEY
response = given().body(BUILT_IN_USER_KEY).put("api/admin/settings/:BuiltinUsers.KEY");
response.prettyPrint();

// SUPER USER
response = given()
.body(new String(Files.readAllBytes(Paths.get(PRIVILEGED_USER))))
.contentType(ContentType.JSON)
.post("/api/builtin-users?key=" + BUILT_IN_USER_KEY);
response.prettyPrint();
privilegedUserName = JsonPath.from(response.asString()).getString("data.user.userName");
privilegedUserToken = JsonPath.from(response.asString()).getString("data.apiToken");
Response superUser = given().post("/api/admin/superuser/pete");
superUser.prettyPrint();

// DATAVERSE
response = given()
.body(Files.readAllBytes(Paths.get(TEST_DATAVERSE)))
.contentType(ContentType.JSON)
.when().post("/api/dataverses/:root?key=" + privilegedUserToken);
response.prettyPrint();
String dataverseId = JsonPath.from(response.asString()).getString("data.id");
dvAlias = JsonPath.from(response.asString()).getString("data.alias");

// DATASET
response = given()
.header(API_TOKEN_HTTP_HEADER, privilegedUserToken)
.body(Files.readAllBytes(Paths.get(TEST_DATASET)))
.contentType("application/json")
.post("/api/dataverses/" + dvAlias + "/datasets");
response.prettyPrint();
dsid = JsonPath.from(response.asString()).getString("data.id");

// GUEST USER
response = given()
.body(new String(Files.readAllBytes(Paths.get(GUEST_USER))))
.contentType(ContentType.JSON)
.post("/api/builtin-users?key=" + BUILT_IN_USER_KEY);
response.prettyPrint();
guestUserName = JsonPath.from(response.asString()).getString("data.user.userName");

}

@After
public void after() {

Response resp;

resp = given().delete("/api/datasets/" + dsid + "?key=" + privilegedUserToken );
resp.prettyPrint();

resp = given().delete("/api/dataverses/" + dvAlias + "?key=" + privilegedUserToken);
resp.prettyPrint();

resp = given().delete("/api/admin/authenticatedUsers/" + privilegedUserName + "/");
resp.prettyPrint();

resp = given().delete("/api/admin/authenticatedUsers/" + guestUserName + "/");
resp.prettyPrint();

}

@RunAsClient
@Test
public void should_return_execution_id() {
ImportLauncher importLauncher = new ImportLauncher();
//javax.ws.rs.core.Response response = importLauncher.getFilesystemImport("doi:10.5072/FK2/NSMTIE","12345678");
//System.out.println(response.getStatus());
//System.out.println("Response: " + response.toString());

//Assert.fail("Not yet implemented.");
}


}
23 changes: 23 additions & 0 deletions src/test/resources/arquillian.xml
@@ -0,0 +1,23 @@
<arquillian xmlns="http://jboss.org/schema/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://jboss.org/schema/arquillian
http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
<engine>
<property name="deploymentExportPath">target/deployments</property>
</engine>
<extension qualifier="webdriver">
<property name="browser">chrome</property>
</extension>
<container qualifier="glassfish" default="true">
<configuration>
<property name="glassFishHome">/usr/local/glassfish4</property>
<property name="adminHost">localhost</property>
<property name="adminPort">4848</property>
<property name="adminUser">admin</property>
<property name="adminPassword"></property>
<property name="outputToConsole">true</property>
<property name="allowConnectingToRunningServer">true</property>
</configuration>
</container>
</arquillian>
14 changes: 14 additions & 0 deletions src/test/resources/glassfish/test-persistence.xml
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="VDCNet-ejbPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/VDCNetDS</jta-data-source>
<properties>
<property name="eclipselink.ddl-generation" value="none"/>
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.id-validation" value="NULL"/>
</properties>
</persistence-unit>
</persistence>
71 changes: 71 additions & 0 deletions src/test/resources/json/test-dataset.json
@@ -0,0 +1,71 @@
{
"datasetVersion": {
"metadataBlocks": {
"citation": {
"fields": [
{
"value": "Darwin's Finches",
"typeClass": "primitive",
"multiple": false,
"typeName": "title"
},
{
"value": [
{
"authorName": {
"value": "Finch, Fiona",
"typeClass": "primitive",
"multiple": false,
"typeName": "authorName"
},
"authorAffiliation": {
"value": "Birds Inc.",
"typeClass": "primitive",
"multiple": false,
"typeName": "authorAffiliation"
}
}
],
"typeClass": "compound",
"multiple": true,
"typeName": "author"
},
{
"value": [
{ "datasetContactEmail" : {
"typeClass": "primitive",
"multiple": false,
"typeName": "datasetContactEmail",
"value" : "finch@mailinator.com"
}
}],
"typeClass": "compound",
"multiple": true,
"typeName": "datasetContact"
},
{
"value": [ {
"dsDescriptionValue":{
"value": "Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds.",
"multiple":false,
"typeClass": "primitive",
"typeName": "dsDescriptionValue"
}}],
"typeClass": "compound",
"multiple": true,
"typeName": "dsDescription"
},
{
"value": [
"Medicine, Health and Life Sciences"
],
"typeClass": "controlledVocabulary",
"multiple": true,
"typeName": "subject"
}
],
"displayName": "Citation Metadata"
}
}
}
}
9 changes: 9 additions & 0 deletions src/test/resources/json/user-guest.json
@@ -0,0 +1,9 @@
{
"firstName":"Gabbi",
"lastName":"Guest",
"userName":"gabbi",
"affiliation":"low",
"position":"A Guest",
"email":"gabbi@malinator.com",
"phone":"(888) 888-8888"
}
9 changes: 9 additions & 0 deletions src/test/resources/json/user-privileged.json
@@ -0,0 +1,9 @@
{
"firstName":"Pete",
"lastName":"Privileged",
"userName":"pete",
"affiliation":"Top",
"position":"The Boss",
"email":"pete@malinator.com",
"phone":"(888) 888-8888"
}

0 comments on commit 2f243b1

Please sign in to comment.