You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2016/07/08 15:50:04 UTC
[1/2] james-project git commit: JAMES-1795 port every cucumber tests
from rest-assured to raw httpclient
Repository: james-project
Updated Branches:
refs/heads/master 662fa4a95 -> 5c7471cd9
JAMES-1795 port every cucumber tests from rest-assured to raw httpclient
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/88f1dbab
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/88f1dbab
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/88f1dbab
Branch: refs/heads/master
Commit: 88f1dbaba43cb865675ab0ee60f311cdf0c6d3b5
Parents: 1c294dd
Author: Matthieu Baechler <ma...@linagora.com>
Authored: Fri Jul 8 13:04:15 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Fri Jul 8 17:47:00 2016 +0200
----------------------------------------------------------------------
.../jmap-integration-testing-common/pom.xml | 4 +
.../james/jmap/HttpJmapAuthentication.java | 59 ++++++
.../integration/cucumber/DownloadStepdefs.java | 199 ++++++++++---------
.../cucumber/GetMessagesMethodStepdefs.java | 85 ++++----
.../integration/cucumber/MainStepdefs.java | 22 +-
.../cucumber/SetMailboxesMethodStepdefs.java | 48 +++--
.../integration/cucumber/UploadStepdefs.java | 103 +++++-----
.../integration/cucumber/UserStepdefs.java | 4 +-
.../test/resources/cucumber/DownloadGet.feature | 4 +-
9 files changed, 298 insertions(+), 230 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/88f1dbab/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
index 6002d51..f75de8d 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/pom.xml
@@ -278,6 +278,10 @@
<version>18.0</version> <!--$NO-MVN-MAN-VER$-->
</dependency>
<dependency>
+ <groupId>com.jayway.jsonpath</groupId>
+ <artifactId>json-path</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/james-project/blob/88f1dbab/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/HttpJmapAuthentication.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/HttpJmapAuthentication.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/HttpJmapAuthentication.java
new file mode 100644
index 0000000..07ad607
--- /dev/null
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/HttpJmapAuthentication.java
@@ -0,0 +1,59 @@
+/****************************************************************
+ * 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.james.jmap;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.client.fluent.Response;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.entity.ContentType;
+import org.apache.james.jmap.api.access.AccessToken;
+
+import com.jayway.jsonpath.JsonPath;
+
+public class HttpJmapAuthentication {
+
+ public static AccessToken authenticateJamesUser(URIBuilder uriBuilder, String username, String password) throws ClientProtocolException, IOException, URISyntaxException {
+ String continuationToken = getContinuationToken(uriBuilder, username);
+
+ Response response = Request.Post(uriBuilder.setPath("/authentication").build())
+ .bodyString("{\"token\": \"" + continuationToken + "\", \"method\": \"password\", \"password\": \"" + password + "\"}",
+ ContentType.APPLICATION_JSON)
+ .setHeader("Accept", ContentType.APPLICATION_JSON.getMimeType())
+ .execute();
+
+ return AccessToken.fromString(
+ JsonPath.parse(response.returnContent().asString())
+ .read("accessToken"));
+ }
+
+ private static String getContinuationToken(URIBuilder uriBuilder, String username) throws ClientProtocolException, IOException, URISyntaxException {
+ Response response = Request.Post(uriBuilder.setPath("/authentication").build())
+ .bodyString("{\"username\": \"" + username + "\", \"clientName\": \"Mozilla Thunderbird\", \"clientVersion\": \"42.0\", \"deviceName\": \"Joe Blogg\u2019s iPhone\"}",
+ ContentType.APPLICATION_JSON)
+ .setHeader("Accept", ContentType.APPLICATION_JSON.getMimeType())
+ .execute();
+ return JsonPath.parse(response.returnContent().asString())
+ .read("continuationToken");
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/88f1dbab/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java
index 53fe11d..98dd128 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/DownloadStepdefs.java
@@ -19,10 +19,11 @@
package org.apache.james.jmap.methods.integration.cucumber;
-import static com.jayway.restassured.RestAssured.with;
-import static org.hamcrest.Matchers.isIn;
-import static org.hamcrest.Matchers.notNullValue;
+import static org.assertj.core.api.Assertions.assertThat;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -30,20 +31,22 @@ import java.util.Map;
import javax.inject.Inject;
import javax.mail.Flags;
+import org.apache.commons.io.IOUtils;
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.client.fluent.Response;
+import org.apache.http.client.utils.URIBuilder;
import org.apache.james.jmap.api.access.AccessToken;
import org.apache.james.jmap.model.AttachmentAccessToken;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
+import com.google.common.base.Charsets;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.ImmutableList;
import com.google.common.collect.Multimap;
-import com.jayway.restassured.http.ContentType;
-import com.jayway.restassured.response.Response;
-import com.jayway.restassured.response.ValidatableResponse;
-import com.jayway.restassured.specification.RequestSpecification;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
@@ -63,10 +66,9 @@ public class DownloadStepdefs {
private final UserStepdefs userStepdefs;
private final MainStepdefs mainStepdefs;
- private Response response;
+ private HttpResponse response;
private Multimap<String, String> attachmentsByMessageId;
private Map<String, String> blobIdByAttachmentId;
- private ValidatableResponse validatableResponse;
private Map<AttachmentAccessTokenKey, AttachmentAccessToken> attachmentAccessTokens;
@Inject
@@ -77,7 +79,7 @@ public class DownloadStepdefs {
this.blobIdByAttachmentId = new HashMap<>();
this.attachmentAccessTokens = new HashMap<>();
}
-
+
@Given("^\"([^\"]*)\" mailbox \"([^\"]*)\" contains a message \"([^\"]*)\" with an attachment \"([^\"]*)\"$")
public void appendMessageWithAttachmentToMailbox(String user, String mailbox, String messageId, String attachmentId) throws Throwable {
MailboxPath mailboxPath = new MailboxPath(MailboxConstants.USER_NAMESPACE, user, mailbox);
@@ -104,32 +106,32 @@ public class DownloadStepdefs {
@When("^\"([^\"]*)\" checks for the availability of the attachment endpoint$")
public void optionDownload(String username) throws Throwable {
AccessToken accessToken = userStepdefs.tokenByUser.get(username);
- RequestSpecification with = with();
+ URI target = mainStepdefs.baseUri().setPath("/download/" + ONE_ATTACHMENT_EML_ATTACHEMENT_BLOB_ID).build();
+ Request request = Request.Options(target);
if (accessToken != null) {
- with.header("Authorization", accessToken.serialize());
+ request.addHeader("Authorization", accessToken.serialize());
}
-
- response = with
- .options("/download/" + ONE_ATTACHMENT_EML_ATTACHEMENT_BLOB_ID);
+ response = request.execute().returnResponse();
}
@When("^\"([^\"]*)\" downloads \"([^\"]*)\"$")
public void downloads(String username, String attachmentId) throws Throwable {
String blobId = blobIdByAttachmentId.get(attachmentId);
- response = authenticatedDownloadRequest(blobId, username)
- .get("/download/" + blobId);
+ URIBuilder uriBuilder = mainStepdefs.baseUri().setPath("/download/" + blobId);
+ response = authenticatedDownloadRequest(uriBuilder, blobId, username).execute().returnResponse();
}
- private RequestSpecification authenticatedDownloadRequest(String blobId, String username) {
+ private Request authenticatedDownloadRequest(URIBuilder uriBuilder, String blobId, String username) throws URISyntaxException {
AccessToken accessToken = userStepdefs.tokenByUser.get(username);
AttachmentAccessTokenKey key = new AttachmentAccessTokenKey(username, blobId);
if (attachmentAccessTokens.containsKey(key)) {
- return with().param("access_token", attachmentAccessTokens.get(key).serialize());
+ uriBuilder.addParameter("access_token", attachmentAccessTokens.get(key).serialize());
}
+ Request request = Request.Get(uriBuilder.build());
if (accessToken != null) {
- return with().header("Authorization", accessToken.serialize());
+ request.addHeader("Authorization", accessToken.serialize());
}
- return with();
+ return request;
}
@When("^\"([^\"]*)\" is trusted for attachment \"([^\"]*)\"$")
@@ -173,14 +175,11 @@ public class DownloadStepdefs {
}
}
- private void trustForBlobId(String blobId, String username) {
- String serializedAttachmentAccessToken =
- with()
- .header("Authorization", userStepdefs.tokenByUser.get(username).serialize())
- .post("/download/" + blobId)
- .then()
- .extract()
- .asString();
+ private void trustForBlobId(String blobId, String username) throws Exception {
+ Response tokenGenerationResponse = Request.Post(mainStepdefs.baseUri().setPath("/download/" + blobId).build())
+ .addHeader("Authorization", userStepdefs.tokenByUser.get(username).serialize())
+ .execute();
+ String serializedAttachmentAccessToken = tokenGenerationResponse.returnContent().asString();
attachmentAccessTokens.put(
new AttachmentAccessTokenKey(username, blobId),
AttachmentAccessToken.from(
@@ -188,133 +187,149 @@ public class DownloadStepdefs {
blobId));
}
- @When("^\"([^\"]*)\" downloads \"([^\"]*)\" with a valid authentication token$")
+ @When("^\"([^\"]*)\" downloads \"([^\"]*)\" with a valid authentication token but a bad blobId$")
public void downloadsWithValidToken(String username, String attachmentId) throws Throwable {
- String blobId = blobIdByAttachmentId.get(attachmentId);
-
- response = requestWithQueryParameterAuthentication(username, blobId)
- .get("/download/" + attachmentId);
+ URIBuilder uriBuilder = mainStepdefs.baseUri().setPath("/download/badblobId");
+ response = Request.Get(uriBuilder.build())
+ .addHeader("Authorization", userStepdefs.tokenByUser.get(username).serialize())
+ .execute()
+ .returnResponse();
}
@When("^\"([^\"]*)\" downloads \"([^\"]*)\" without any authentication token$")
- public void getDownloadWithoutToken(String username, String attachmentId) {
+ public void getDownloadWithoutToken(String username, String attachmentId) throws Exception {
String blobId = blobIdByAttachmentId.get(attachmentId);
- response = with().get("/download/" + blobId);
+ response = Request.Get(mainStepdefs.baseUri().setPath("/download/" + blobId).build())
+ .execute()
+ .returnResponse();
}
@When("^\"([^\"]*)\" downloads \"([^\"]*)\" with an empty authentication token$")
- public void getDownloadWithEmptyToken(String username, String attachmentId) {
+ public void getDownloadWithEmptyToken(String username, String attachmentId) throws Exception {
String blobId = blobIdByAttachmentId.get(attachmentId);
- response = with()
- .param("access_token", "")
- .get("/download/" + blobId);
+ response = Request.Get(
+ mainStepdefs.baseUri()
+ .setPath("/download/" + blobId)
+ .addParameter("access_token", "")
+ .build())
+ .execute()
+ .returnResponse();
}
@When("^\"([^\"]*)\" downloads \"([^\"]*)\" with a bad authentication token$")
- public void getDownloadWithBadToken(String username, String attachmentId) {
+ public void getDownloadWithBadToken(String username, String attachmentId) throws Exception {
String blobId = blobIdByAttachmentId.get(attachmentId);
- response = with()
- .param("access_token", "bad")
- .get("/download/" + blobId);
+ response = Request.Get(
+ mainStepdefs.baseUri()
+ .setPath("/download/" + blobId)
+ .addParameter("access_token", "bad")
+ .build())
+ .execute()
+ .returnResponse();
}
@When("^\"([^\"]*)\" downloads \"([^\"]*)\" with an invalid authentication token$")
- public void getDownloadWithUnknownToken(String username, String attachmentId) {
+ public void getDownloadWithUnknownToken(String username, String attachmentId) throws Exception {
String blobId = blobIdByAttachmentId.get(attachmentId);
- response = with()
- .param("access_token", INVALID_ATTACHMENT_TOKEN)
- .get("/download/" + blobId);
+ response = Request.Get(
+ mainStepdefs.baseUri()
+ .setPath("/download/" + blobId)
+ .addParameter("access_token", INVALID_ATTACHMENT_TOKEN)
+ .build())
+ .execute()
+ .returnResponse();
}
@When("^\"([^\"]*)\" downloads \"([^\"]*)\" without blobId parameter$")
public void getDownloadWithoutBlobId(String username, String attachmentId) throws Throwable {
String blobId = blobIdByAttachmentId.get(attachmentId);
- response = requestWithQueryParameterAuthentication(username, blobId)
- .get("/download/");
+ URIBuilder uriBuilder = mainStepdefs.baseUri().setPath("/download/");
+ trustForBlobId(blobId, username);
+ AttachmentAccessTokenKey key = new AttachmentAccessTokenKey(username, blobId);
+ uriBuilder.addParameter("access_token", attachmentAccessTokens.get(key).serialize());
+ response = Request.Get(uriBuilder.build())
+ .execute()
+ .returnResponse();
}
@When("^\"([^\"]*)\" downloads \"([^\"]*)\" with wrong blobId$")
public void getDownloadWithWrongBlobId(String username, String attachmentId) throws Throwable {
String blobId = blobIdByAttachmentId.get(attachmentId);
- response = requestWithQueryParameterAuthentication(username, blobId)
- .get("/download/badbadbadbadbadbadbadbadbadbadbadbadbadb");
- }
-
- private RequestSpecification requestWithQueryParameterAuthentication(String username, String blobId) {
+ URIBuilder uriBuilder = mainStepdefs.baseUri().setPath("/download/badbadbadbadbadbadbadbadbadbadbadbadbadb");
trustForBlobId(blobId, username);
- return authenticatedDownloadRequest(blobId, username);
+ AttachmentAccessTokenKey key = new AttachmentAccessTokenKey(username, blobId);
+ uriBuilder.addParameter("access_token", attachmentAccessTokens.get(key).serialize());
+ response = Request.Get(uriBuilder.build())
+ .execute()
+ .returnResponse();
}
@When("^\"([^\"]*)\" asks for a token for attachment \"([^\"]*)\"$")
public void postDownload(String username, String attachmentId) throws Throwable {
String blobId = blobIdByAttachmentId.get(attachmentId);
AccessToken accessToken = userStepdefs.tokenByUser.get(username);
- RequestSpecification with = with();
- if (accessToken != null) {
- with = with.header("Authorization", accessToken.serialize());
- }
- response = with
- .post("/download/" + blobId);
+ response = Request.Post(mainStepdefs.baseUri().setPath("/download/" + blobId).build())
+ .addHeader("Authorization", accessToken.serialize())
+ .execute()
+ .returnResponse();
}
@When("^\"([^\"]*)\" downloads \"([^\"]*)\" with \"([^\"]*)\" name$")
- public void downloadsWithName(String username, String attachmentId, String name) {
+ public void downloadsWithName(String username, String attachmentId, String name) throws Exception {
String blobId = blobIdByAttachmentId.get(attachmentId);
- response = authenticatedDownloadRequest(blobId, username)
- .get("/download/" + blobId + "/" + name);
+ URIBuilder uriBuilder = mainStepdefs.baseUri().setPath("/download/" + blobId + "/" + name);
+ response = authenticatedDownloadRequest(uriBuilder, blobId, username)
+ .execute()
+ .returnResponse();
}
@When("^\"([^\"]*)\" downloads \"([^\"]*)\" with an expired token$")
- public void getDownloadWithExpiredToken(String username, String attachmentId) {
+ public void getDownloadWithExpiredToken(String username, String attachmentId) throws Exception {
String blobId = blobIdByAttachmentId.get(attachmentId);
- response = with()
- .param("access_token", EXPIRED_ATTACHMENT_TOKEN)
- .get("/download/" + blobId);
+ response = Request.Get(mainStepdefs.baseUri().setPath("/download/" + blobId)
+ .addParameter("access_token", EXPIRED_ATTACHMENT_TOKEN)
+ .build())
+ .execute()
+ .returnResponse();
}
@Then("^the user should be authorized$")
- public void httpStatusDifferentFromUnauthorized() {
- response.then()
- .statusCode(isIn(ImmutableList.of(200, 404)));
+ public void httpStatusDifferentFromUnauthorized() throws IOException {
+ assertThat(response.getStatusLine().getStatusCode()).isIn(200, 404);
}
@Then("^the user should not be authorized$")
- public void httpUnauthorizedStatus() {
- response.then()
- .statusCode(401);
+ public void httpUnauthorizedStatus() throws IOException {
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(401);
}
@Then("^the user should receive a bad request response$")
- public void httpBadRequestStatus() {
- response.then()
- .statusCode(400);
+ public void httpBadRequestStatus() throws IOException {
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(400);
}
@Then("^the user should receive that attachment$")
- public void httpOkStatusAndExpectedContent() {
- validatableResponse = response.then()
- .statusCode(200)
- .content(notNullValue());
+ public void httpOkStatusAndExpectedContent() throws IOException {
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
+ assertThat(IOUtils.toString(response.getEntity().getContent(), Charsets.UTF_8)).isNotEmpty();
}
@Then("^the user should receive a not found response$")
- public void httpNotFoundStatus() {
- response.then()
- .statusCode(404);
+ public void httpNotFoundStatus() throws IOException {
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(404);
}
@Then("^the user should receive an attachment access token$")
public void accessTokenResponse() throws Throwable {
- response.then()
- .statusCode(200)
- .contentType(ContentType.TEXT)
- .content(notNullValue());
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
+ assertThat(response.getHeaders("Content-Type")).extracting(Header::toString).containsExactly("Content-Type: text/plain");
+ assertThat(IOUtils.toString(response.getEntity().getContent(), Charsets.UTF_8)).isNotEmpty();
}
@Then("^the attachment is named \"([^\"]*)\"$")
- public void assertContentDisposition(String name) {
- validatableResponse.header("Content-Disposition", name);
+ public void assertContentDisposition(String name) throws IOException {
+ assertThat(response.getHeaders("Content-Disposition")).extracting(Header::toString).containsExactly("Content-Disposition: " + name);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/88f1dbab/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
index 252afd0..bdaaff1 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
@@ -19,16 +19,12 @@
package org.apache.james.jmap.methods.integration.cucumber;
-import static com.jayway.restassured.RestAssured.with;
-import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.empty;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.nullValue;
+import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayInputStream;
import java.time.ZonedDateTime;
import java.util.Date;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
@@ -39,6 +35,9 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.mail.Flags;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.fluent.Request;
import org.apache.james.jmap.methods.integration.cucumber.util.TableRow;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
@@ -46,15 +45,16 @@ import org.javatuples.Pair;
import com.google.common.base.Charsets;
import com.google.common.base.Joiner;
-import com.jayway.restassured.response.Response;
-import com.jayway.restassured.response.ValidatableResponse;
+import com.jayway.jsonpath.Configuration;
+import com.jayway.jsonpath.DocumentContext;
+import com.jayway.jsonpath.JsonPath;
+import com.jayway.jsonpath.Option;
import cucumber.api.DataTable;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import cucumber.runtime.java.guice.ScenarioScoped;
-import groovy.json.StringEscapeUtils;
@ScenarioScoped
public class GetMessagesMethodStepdefs {
@@ -71,8 +71,8 @@ public class GetMessagesMethodStepdefs {
private final MainStepdefs mainStepdefs;
private final UserStepdefs userStepdefs;
- private Response post;
- private ValidatableResponse response;
+ private HttpResponse response;
+ private DocumentContext jsonPath;
@Inject
private GetMessagesMethodStepdefs(MainStepdefs mainStepdefs, UserStepdefs userStepdefs) {
@@ -195,116 +195,117 @@ public class GetMessagesMethodStepdefs {
return Joiner.on(": ").join(pair);
}
- private void post(String requestBody) {
- post = with()
- .header("Authorization", userStepdefs.tokenByUser.get(userStepdefs.lastConnectedUser).serialize())
- .body(requestBody)
- .post("/jmap");
+ private void post(String requestBody) throws Exception {
+ response = Request.Post(mainStepdefs.baseUri().setPath("/jmap").build())
+ .addHeader("Authorization", userStepdefs.tokenByUser.get(userStepdefs.lastConnectedUser).serialize())
+ .addHeader("Accept", org.apache.http.entity.ContentType.APPLICATION_JSON.getMimeType())
+ .bodyString(requestBody, org.apache.http.entity.ContentType.APPLICATION_JSON)
+ .execute()
+ .returnResponse();
+ jsonPath = JsonPath.using(Configuration.defaultConfiguration().addOptions(Option.SUPPRESS_EXCEPTIONS)).parse(response.getEntity().getContent());
}
@Then("^an error \"([^\"]*)\" is returned$")
public void error(String type) throws Throwable {
- response = post.then()
- .statusCode(200)
- .body(NAME, equalTo("error"))
- .body(ARGUMENTS + ".type", equalTo(type));
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
+ assertThat(jsonPath.<String>read(NAME)).isEqualTo("error");
+ assertThat(jsonPath.<String>read(ARGUMENTS + ".type")).isEqualTo(type);
}
@Then("^no error is returned$")
public void noError() throws Throwable {
- response = post.then()
- .statusCode(200)
- .body(NAME, equalTo("messages"));
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
+ assertThat(jsonPath.<String>read(NAME)).isEqualTo("messages");
}
@Then("^the list of unknown messages is empty$")
public void assertNotFoundIsEmpty() {
- response.body(ARGUMENTS + ".notFound", empty());
+ assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".notFound")).isEmpty();
}
@Then("^the list of messages is empty$")
public void assertListIsEmpty() {
- response.body(ARGUMENTS + ".list", empty());
+ assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".list")).isEmpty();
}
@Then("^the description is \"(.*?)\"$")
public void assertDescription(String description) throws Throwable {
- response.body(ARGUMENTS + ".description", equalTo(description));
+ assertThat(jsonPath.<String>read(ARGUMENTS + ".description")).isEqualTo(description);
}
@Then("^the notFound list should contains \"([^\"]*)\"$")
public void assertNotFoundListContains(String ids) throws Throwable {
- response.body(ARGUMENTS + ".notFound", contains(ids));
+ assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".notFound")).contains(ids);
}
@Then("^the list should contain (\\d+) message$")
public void assertListContains(int numberOfMessages) throws Throwable {
- response.body(ARGUMENTS + ".list", hasSize(numberOfMessages));
+ assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".list")).hasSize(numberOfMessages);
}
@Then("^the id of the message is \"([^\"]*)\"$")
public void assertIdOfTheFirstMessage(String id) throws Throwable {
- response.body(FIRST_MESSAGE + ".id", equalTo(id));
+ assertThat(jsonPath.<String>read(FIRST_MESSAGE + ".id")).isEqualTo(id);
}
@Then("^the threadId of the message is \"([^\"]*)\"$")
public void assertThreadIdOfTheFirstMessage(String threadId) throws Throwable {
- response.body(FIRST_MESSAGE + ".threadId", equalTo(threadId));
+ assertThat(jsonPath.<String>read(FIRST_MESSAGE + ".threadId")).isEqualTo(threadId);
}
@Then("^the subject of the message is \"([^\"]*)\"$")
public void assertSubjectOfTheFirstMessage(String subject) throws Throwable {
- response.body(FIRST_MESSAGE + ".subject", equalTo(subject));
+ assertThat(jsonPath.<String>read(FIRST_MESSAGE + ".subject")).isEqualTo(subject);
}
@Then("^the textBody of the message is \"([^\"]*)\"$")
public void assertTextBodyOfTheFirstMessage(String textBody) throws Throwable {
- response.body(FIRST_MESSAGE + ".textBody", equalTo(StringEscapeUtils.unescapeJava(textBody)));
+ assertThat(jsonPath.<String>read(FIRST_MESSAGE + ".textBody")).isEqualTo(StringEscapeUtils.unescapeJava(textBody));
}
@Then("^the htmlBody of the message is \"([^\"]*)\"$")
public void assertHtmlBodyOfTheFirstMessage(String htmlBody) throws Throwable {
- response.body(FIRST_MESSAGE + ".htmlBody", equalTo(StringEscapeUtils.unescapeJava(htmlBody)));
+ assertThat(jsonPath.<String>read(FIRST_MESSAGE + ".htmlBody")).isEqualTo(StringEscapeUtils.unescapeJava(htmlBody));
}
@Then("^the isUnread of the message is \"([^\"]*)\"$")
public void assertIsUnreadOfTheFirstMessage(String isUnread) throws Throwable {
- response.body(FIRST_MESSAGE + ".isUnread", equalTo(Boolean.valueOf(isUnread)));
+ assertThat(jsonPath.<Boolean>read(FIRST_MESSAGE + ".isUnread")).isEqualTo(Boolean.valueOf(isUnread));
}
@Then("^the preview of the message is \"([^\"]*)\"$")
public void assertPreviewOfTheFirstMessage(String preview) throws Throwable {
- response.body(FIRST_MESSAGE + ".preview", equalTo(StringEscapeUtils.unescapeJava(preview)));
+ assertThat(jsonPath.<String>read(FIRST_MESSAGE + ".preview")).isEqualTo(StringEscapeUtils.unescapeJava(preview));
}
@Then("^the headers of the message contains:$")
public void assertHeadersOfTheFirstMessage(DataTable headers) throws Throwable {
- response.body(FIRST_MESSAGE + ".headers", equalTo(headers.asMap(String.class, String.class)));
+ assertThat(jsonPath.<Map<String, String>>read(FIRST_MESSAGE + ".headers")).isEqualTo(headers.asMap(String.class, String.class));
}
@Then("^the date of the message is \"([^\"]*)\"$")
public void assertDateOfTheFirstMessage(String date) throws Throwable {
- response.body(FIRST_MESSAGE + ".date", equalTo(date));
+ assertThat(jsonPath.<String>read(FIRST_MESSAGE + ".date")).isEqualTo(date);
}
@Then("^the hasAttachment of the message is \"([^\"]*)\"$")
public void assertHasAttachmentOfTheFirstMessage(String hasAttachment) throws Throwable {
- response.body(FIRST_MESSAGE + ".hasAttachment", equalTo(Boolean.valueOf(hasAttachment)));
+ assertThat(jsonPath.<Boolean>read(FIRST_MESSAGE + ".hasAttachment")).isEqualTo(Boolean.valueOf(hasAttachment));
}
@Then("^the list of attachments of the message is empty$")
public void assertAttachmentsOfTheFirstMessageIsEmpty() throws Throwable {
- response.body(ATTACHMENTS, empty());
+ assertThat(jsonPath.<List<Object>>read(ATTACHMENTS)).isEmpty();
}
@Then("^the property \"([^\"]*)\" of the message is null$")
public void assertPropertyIsNull(String property) throws Throwable {
- response.body(FIRST_MESSAGE + "." + property, nullValue());
+ assertThat(jsonPath.<String>read(FIRST_MESSAGE + "." + property + ".date")).isNull();
}
@Then("^the list of attachments of the message contains (\\d+) attachments?$")
public void assertAttachmentsHasSize(int numberOfAttachments) throws Throwable {
- response.body(ATTACHMENTS, hasSize(numberOfAttachments));
+ assertThat(jsonPath.<List<Object>>read(ATTACHMENTS)).hasSize(numberOfAttachments);
}
@Then("^the first attachment is:$")
@@ -320,6 +321,6 @@ public class GetMessagesMethodStepdefs {
private void assertAttachment(String attachment, DataTable attachmentProperties) {
attachmentProperties.asList(TableRow.class)
.stream()
- .forEach(row -> response.body(attachment + "." + row.getKey(), equalTo(row.getValue())));
+ .forEach(entry -> assertThat(jsonPath.<Object>read(attachment + "." + entry.getKey())).isEqualTo(entry.getValue()));
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/88f1dbab/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/MainStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/MainStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/MainStepdefs.java
index 91eba14..a5327ed 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/MainStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/MainStepdefs.java
@@ -19,15 +19,10 @@
package org.apache.james.jmap.methods.integration.cucumber;
-import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
-import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
-
+import org.apache.http.client.utils.URIBuilder;
import org.apache.james.GuiceJamesServer;
import com.google.common.base.Charsets;
-import com.jayway.restassured.RestAssured;
-import com.jayway.restassured.builder.RequestSpecBuilder;
-import com.jayway.restassured.http.ContentType;
import cucumber.runtime.java.guice.ScenarioScoped;
@@ -39,14 +34,15 @@ public class MainStepdefs {
public void init() throws Exception {
jmapServer.start();
- RestAssured.requestSpecification = new RequestSpecBuilder()
- .setContentType(ContentType.JSON)
- .setAccept(ContentType.JSON)
- .setConfig(newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8)))
- .setPort(jmapServer.getJmapPort())
- .build();
+ }
+
- RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
+ public URIBuilder baseUri() {
+ return new URIBuilder()
+ .setScheme("http")
+ .setHost("localhost")
+ .setPort(jmapServer.getJmapPort())
+ .setCharset(Charsets.UTF_8);
}
public void tearDown() {
http://git-wip-us.apache.org/repos/asf/james-project/blob/88f1dbab/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java
index 85b643e..b2fed83 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java
@@ -19,24 +19,27 @@
package org.apache.james.jmap.methods.integration.cucumber;
-import static com.jayway.restassured.RestAssured.given;
-import static com.jayway.restassured.RestAssured.with;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasSize;
+import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayInputStream;
import java.util.Date;
+import java.util.List;
import java.util.stream.IntStream;
import javax.inject.Inject;
import javax.mail.Flags;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.entity.ContentType;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxConstants;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import com.github.fge.lambdas.Throwing;
+import com.jayway.jsonpath.DocumentContext;
+import com.jayway.jsonpath.JsonPath;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
@@ -93,11 +96,11 @@ public class SetMailboxesMethodStepdefs {
" \"#0\"" +
" ]" +
"]";
-
- with()
- .header("Authorization", userStepdefs.tokenByUser.get(username).serialize())
- .body(requestBody)
- .post("/jmap");
+ Request.Post(mainStepdefs.baseUri().setPath("/jmap").build())
+ .addHeader("Authorization", userStepdefs.tokenByUser.get(username).serialize())
+ .bodyString(requestBody, ContentType.APPLICATION_JSON)
+ .execute()
+ .discardContent();
}
@When("^moving mailbox \"([^\"]*)\" to \"([^\"]*)\"$")
@@ -122,10 +125,11 @@ public class SetMailboxesMethodStepdefs {
" ]" +
"]";
- with()
- .header("Authorization", userStepdefs.tokenByUser.get(username).serialize())
- .body(requestBody)
- .post("/jmap");
+ Request.Post(mainStepdefs.baseUri().setPath("/jmap").build())
+ .addHeader("Authorization", userStepdefs.tokenByUser.get(username).serialize())
+ .bodyString(requestBody, ContentType.APPLICATION_JSON)
+ .execute()
+ .discardContent();
}
@Then("^mailbox \"([^\"]*)\" contains (\\d+) messages$")
@@ -133,14 +137,14 @@ public class SetMailboxesMethodStepdefs {
String username = userStepdefs.lastConnectedUser;
Mailbox mailbox = mainStepdefs.jmapServer.serverProbe().getMailbox("#private", username, mailboxName);
String mailboxId = mailbox.getMailboxId().serialize();
- given()
- .header("Authorization", userStepdefs.tokenByUser.get(username).serialize())
- .body("[[\"getMessageList\", {\"filter\":{\"inMailboxes\":[\"" + mailboxId + "\"]}}, \"#0\"]]")
- .when()
- .post("/jmap")
- .then()
- .statusCode(200)
- .body(NAME, equalTo("messageList"))
- .body(ARGUMENTS + ".messageIds", hasSize(messageCount));
+ HttpResponse response = Request.Post(mainStepdefs.baseUri().setPath("/jmap").build())
+ .addHeader("Authorization", userStepdefs.tokenByUser.get(username).serialize())
+ .bodyString("[[\"getMessageList\", {\"filter\":{\"inMailboxes\":[\"" + mailboxId + "\"]}}, \"#0\"]]", ContentType.APPLICATION_JSON)
+ .execute().returnResponse();
+
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
+ DocumentContext jsonPath = JsonPath.parse(response.getEntity().getContent());
+ assertThat(jsonPath.<String>read(NAME)).isEqualTo("messageList");
+ assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".messageIds")).hasSize(messageCount);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/88f1dbab/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UploadStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UploadStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UploadStepdefs.java
index 4d97af4..74dbcc0 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UploadStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UploadStepdefs.java
@@ -19,23 +19,25 @@
package org.apache.james.jmap.methods.integration.cucumber;
-import static com.jayway.restassured.RestAssured.with;
-import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
-import static org.hamcrest.Matchers.equalTo;
-
import java.io.BufferedInputStream;
import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
import javax.inject.Inject;
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.fluent.Executor;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.james.jmap.api.access.AccessToken;
import com.google.common.base.Charsets;
-import com.jayway.restassured.config.EncoderConfig;
-import com.jayway.restassured.config.RestAssuredConfig;
-import com.jayway.restassured.http.ContentType;
-import com.jayway.restassured.response.Response;
-import com.jayway.restassured.specification.RequestSpecification;
+import com.jayway.jsonpath.DocumentContext;
+import com.jayway.jsonpath.JsonPath;
+
+import static org.assertj.core.api.Assertions.assertThat;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
@@ -43,121 +45,108 @@ import cucumber.runtime.java.guice.ScenarioScoped;
@ScenarioScoped
public class UploadStepdefs {
- private static final RestAssuredConfig NO_CHARSET = newConfig().encoderConfig(EncoderConfig.encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false));
private static final String _1M_ZEROED_FILE_BLOB_ID = "3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3";
private static final int _1M = 1024 * 1024;
private static final int _10M = 10 * _1M;
private final UserStepdefs userStepdefs;
- private Response response;
+ private final MainStepdefs mainStepdefs;
+ private final URI uploadUri;
+ private HttpResponse response;
@Inject
- private UploadStepdefs(UserStepdefs userStepdefs) {
+ private UploadStepdefs(UserStepdefs userStepdefs, MainStepdefs mainStepdefs) throws URISyntaxException {
this.userStepdefs = userStepdefs;
+ this.mainStepdefs = mainStepdefs;
+ uploadUri = mainStepdefs.baseUri().setPath("/upload").build();
}
@When("^\"([^\"]*)\" upload a content$")
public void userUploadContent(String username) throws Throwable {
AccessToken accessToken = userStepdefs.tokenByUser.get(username);
- RequestSpecification with = with();
+ Request request = Request.Post(uploadUri)
+ .bodyStream(new BufferedInputStream(new ZeroedInputStream(_1M), _1M), org.apache.http.entity.ContentType.DEFAULT_BINARY);
if (accessToken != null) {
- with.header("Authorization", accessToken.serialize());
+ request.addHeader("Authorization", accessToken.serialize());
}
- response = with
- .config(NO_CHARSET)
- .contentType(ContentType.BINARY)
- .content(new BufferedInputStream(new ZeroedInputStream(_1M), _1M))
- .post("/upload");
+ response = Executor.newInstance(HttpClientBuilder.create().disableAutomaticRetries().build()).execute(request).returnResponse();
}
@When("^\"([^\"]*)\" upload a content without content type$")
public void userUploadContentWithoutContentType(String username) throws Throwable {
AccessToken accessToken = userStepdefs.tokenByUser.get(username);
- RequestSpecification with = with();
+ Request request = Request.Post(uploadUri)
+ .bodyByteArray("some text".getBytes(Charsets.UTF_8));
if (accessToken != null) {
- with.header("Authorization", accessToken.serialize());
+ request.addHeader("Authorization", accessToken.serialize());
}
- response = with
- .config(NO_CHARSET)
- .contentType("")
- .content("some text".getBytes(Charsets.UTF_8))
- .post("/upload");
+ response = request.execute().returnResponse();
}
@When("^\"([^\"]*)\" upload a too big content$")
public void userUploadTooBigContent(String username) throws Throwable {
AccessToken accessToken = userStepdefs.tokenByUser.get(username);
- RequestSpecification with = with();
+ Request request = Request.Post(uploadUri)
+ .bodyStream(new BufferedInputStream(new ZeroedInputStream(_10M), _10M), org.apache.http.entity.ContentType.DEFAULT_BINARY);
if (accessToken != null) {
- with.header("Authorization", accessToken.serialize());
+ request.addHeader("Authorization", accessToken.serialize());
}
- response = with
- .contentType(ContentType.BINARY)
- .content(new BufferedInputStream(new ZeroedInputStream(_10M), _10M))
- .post("/upload");
+ response = request.execute().returnResponse();
}
@When("^\"([^\"]*)\" checks for the availability of the upload endpoint$")
public void optionUpload(String username) throws Throwable {
AccessToken accessToken = userStepdefs.tokenByUser.get(username);
- RequestSpecification with = with();
+ Request request = Request.Options(uploadUri);
if (accessToken != null) {
- with.header("Authorization", accessToken.serialize());
+ request.addHeader("Authorization", accessToken.serialize());
}
- response = with
- .options("/upload");
+ response = request.execute().returnResponse();
}
@Then("^the user should receive an authorized response$")
public void httpAuthorizedStatus() throws Exception {
- response.then()
- .statusCode(200);
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
}
@Then("^the user should receive a created response$")
public void httpCreatedStatus() throws Exception {
- response.then()
- .statusCode(201);
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(201);
}
@Then("^the user should receive bad request response$")
public void httpBadRequestStatus() throws Throwable {
- response.then()
- .statusCode(400);
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(400);
}
@Then("^the user should receive a not authorized response$")
public void httpUnauthorizedStatus() throws Exception {
- response.then()
- .statusCode(401);
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(401);
}
@Then("^the user should receive a request entity too large response$")
public void httpRequestEntityTooBigStatus() throws Exception {
- response.then()
- .statusCode(413);
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(413);
}
@Then("^the user should receive a specified JSON content$")
public void jsonResponse() throws Exception {
- response.then()
- .contentType(ContentType.JSON)
- .body("blobId", equalTo(_1M_ZEROED_FILE_BLOB_ID))
- .body("type", equalTo("application/octet-stream"))
- .body("size", equalTo(_1M));
+ assertThat(response.getHeaders("Content-Type")).extracting(Header::getValue).containsExactly(org.apache.http.entity.ContentType.APPLICATION_JSON.toString());
+ DocumentContext jsonPath = JsonPath.parse(response.getEntity().getContent());
+ assertThat(jsonPath.<String>read("blobId")).isEqualTo(_1M_ZEROED_FILE_BLOB_ID);
+ assertThat(jsonPath.<String>read("type")).isEqualTo("application/octet-stream");
+ assertThat(jsonPath.<Integer>read("size")).isEqualTo(_1M);
}
@Then("^\"([^\"]*)\" should be able to retrieve the content$")
public void contentShouldBeRetrievable(String username) throws Exception {
AccessToken accessToken = userStepdefs.tokenByUser.get(username);
- RequestSpecification with = with();
+ Request request = Request.Get(mainStepdefs.baseUri().setPath("/download/" + _1M_ZEROED_FILE_BLOB_ID).build());
if (accessToken != null) {
- with.header("Authorization", accessToken.serialize());
+ request.addHeader("Authorization", accessToken.serialize());
}
- with
- .get("/download/" + _1M_ZEROED_FILE_BLOB_ID)
- .then()
- .statusCode(200);
+ response = request.execute().returnResponse();
+ httpAuthorizedStatus();
}
public static class ZeroedInputStream extends InputStream {
http://git-wip-us.apache.org/repos/asf/james-project/blob/88f1dbab/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java
index 503fdbf..c805105 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java
@@ -27,7 +27,7 @@ import java.util.Set;
import javax.inject.Inject;
-import org.apache.james.jmap.JmapAuthentication;
+import org.apache.james.jmap.HttpJmapAuthentication;
import org.apache.james.jmap.api.access.AccessToken;
import org.apache.james.mailbox.model.MailboxConstants;
@@ -98,7 +98,7 @@ public class UserStepdefs {
public void connectUser(String username) throws Throwable {
String password = passwordByUser.get(username);
Preconditions.checkState(password != null, "unknown user " + username);
- AccessToken accessToken = JmapAuthentication.authenticateJamesUser(username, password);
+ AccessToken accessToken = HttpJmapAuthentication.authenticateJamesUser(mainStepdefs.baseUri(), username, password);
tokenByUser.put(username, accessToken);
lastConnectedUser = username;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/88f1dbab/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
index ccd7eef..6772e4f 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
@@ -14,8 +14,8 @@ Feature: Download GET
Scenario: Getting an attachment with an unknown blobId
Given "username@domain.tld" mailbox "inbox" contains a message "1" with an attachment "2"
- When "username@domain.tld" downloads "2" with a valid authentication token
- Then the user should not be authorized
+ When "username@domain.tld" downloads "2" with a valid authentication token but a bad blobId
+ Then the user should receive a not found response
Scenario: Getting an attachment previously stored with a desired name
Given "username@domain.tld" mailbox "inbox" contains a message "1" with an attachment "2"
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[2/2] james-project git commit: Merge branch 'JAMES-1795'
Posted by ma...@apache.org.
Merge branch 'JAMES-1795'
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5c7471cd
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5c7471cd
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5c7471cd
Branch: refs/heads/master
Commit: 5c7471cd9f21e1e7a4aad12264daa96c232df7d7
Parents: 662fa4a 88f1dba
Author: Matthieu Baechler <ma...@linagora.com>
Authored: Fri Jul 8 17:49:53 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Fri Jul 8 17:49:53 2016 +0200
----------------------------------------------------------------------
.../jmap-integration-testing-common/pom.xml | 4 +
.../james/jmap/HttpJmapAuthentication.java | 59 ++++++
.../integration/cucumber/DownloadStepdefs.java | 199 ++++++++++---------
.../cucumber/GetMessagesMethodStepdefs.java | 85 ++++----
.../integration/cucumber/MainStepdefs.java | 22 +-
.../cucumber/SetMailboxesMethodStepdefs.java | 48 +++--
.../integration/cucumber/UploadStepdefs.java | 103 +++++-----
.../integration/cucumber/UserStepdefs.java | 4 +-
.../test/resources/cucumber/DownloadGet.feature | 4 +-
9 files changed, 298 insertions(+), 230 deletions(-)
----------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org