http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/14278ac1/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java
----------------------------------------------------------------------
diff --git
a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java
b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java
index 059b32f..1c218ad 100644
---
a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java
+++
b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/BatchRequestParserTest.java
@@ -18,12 +18,8 @@
*/
package org.apache.olingo.server.core.deserializer.batch;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@@ -36,947 +32,857 @@ import
org.apache.olingo.server.api.deserializer.batch.BatchDeserializerExceptio
import
org.apache.olingo.server.api.deserializer.batch.BatchDeserializerException.MessageKeys;
import org.apache.olingo.server.api.deserializer.batch.BatchOptions;
import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart;
+import org.junit.Assert;
import org.junit.Test;
public class BatchRequestParserTest {
private static final String SERVICE_ROOT = "http://localhost/odata";
+ private static final String PROPERTY_URI = "ESAllPrim(32767)/PropertyString";
+ private static final String HTTP_VERSION = " HTTP/1.1";
private static final String CRLF = "\r\n";
private static final String BOUNDARY = "batch_8194-cf13-1f56";
- private static final String MIME_HEADERS = "Content-Type: application/http"
+ CRLF
- + "Content-Transfer-Encoding: binary" + CRLF;
- private static final String GET_REQUEST = ""
- + MIME_HEADERS
+ private static final String CHANGESET_BOUNDARY = "changeset_f980-1cb6-94dd";
+ private static final String MULTIPART_MIXED = "multipart/mixed";
+ private static final String APPLICATION_HTTP = "application/http";
+ private static final String APPLICATION_JSON = "application/json";
+ private static final String APPLICATION_OCTET_STREAM =
"application/octet-stream";
+ private static final String MIME_HEADERS = HttpHeader.CONTENT_TYPE + ": " +
APPLICATION_HTTP + CRLF
+ + HttpHeader.ODATA_VERSION + ": 4.0" + CRLF;
+ private static final String ACCEPT_HEADER = HttpHeader.ACCEPT + ": "
+ + APPLICATION_JSON + ";q=0.9, application/xml;q=0.8,
application/atom+xml;q=0.8, */*;q=0.1" + CRLF;
+ private static final String GET_REQUEST = MIME_HEADERS
+ CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
+ + HttpMethod.GET + " " + PROPERTY_URI + HTTP_VERSION + CRLF
+ CRLF
+ CRLF;
@Test
- public void test() throws Exception {
- final InputStream in = readFile("/batchWithPost.batch");
- final List<BatchRequestPart> batchRequestParts = parse(in);
+ public void basic() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + MIME_HEADERS
+ + CRLF
+ + HttpMethod.GET + " " + PROPERTY_URI + "?$format=json" + HTTP_VERSION
+ CRLF
+ + HttpHeader.ACCEPT_LANGUAGE + ":en-US,en;q=0.7,en-GB;q=0.9" + CRLF
+ + CRLF
+ + CRLF
+ + "--" + BOUNDARY +CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ + MIME_HEADERS
+ + HttpHeader.CONTENT_ID + ": changeRequest1" + CRLF
+ + CRLF
+ + HttpMethod.PUT + " " + PROPERTY_URI + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": 100000" + CRLF
+ + ACCEPT_HEADER
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ + CRLF
+ + "{\"value\":\"⬠MODIFIED\"}" + CRLF
+ + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ + CRLF
+ + "--" + BOUNDARY + CRLF
+ + MIME_HEADERS
+ + CRLF
+ + HttpMethod.GET + " " + PROPERTY_URI + "?$format=json" + HTTP_VERSION
+ CRLF
+ + CRLF
+ + CRLF
+ + "--" + BOUNDARY + "--";
+ final List<BatchRequestPart> batchRequestParts = parse(batch);
+
+ Assert.assertNotNull(batchRequestParts);
+ Assert.assertFalse(batchRequestParts.isEmpty());
- assertNotNull(batchRequestParts);
- assertFalse(batchRequestParts.isEmpty());
+ for (final BatchRequestPart object : batchRequestParts) {
+ Assert.assertEquals(1, object.getRequests().size());
+ final ODataRequest request = object.getRequests().get(0);
+ Assert.assertEquals(SERVICE_ROOT, request.getRawBaseUri());
+ Assert.assertEquals("/" + PROPERTY_URI, request.getRawODataPath());
- for (BatchRequestPart object : batchRequestParts) {
if (!object.isChangeSet()) {
- assertEquals(1, object.getRequests().size());
- ODataRequest retrieveRequest = object.getRequests().get(0);
- assertEquals(HttpMethod.GET, retrieveRequest.getMethod());
+ Assert.assertEquals(HttpMethod.GET, request.getMethod());
- if (retrieveRequest.getHeaders(HttpHeader.ACCEPT_LANGUAGE) != null) {
- assertEquals(3,
retrieveRequest.getHeaders(HttpHeader.ACCEPT_LANGUAGE).size());
+ if (request.getHeaders(HttpHeader.ACCEPT_LANGUAGE) != null) {
+ Assert.assertEquals(3,
request.getHeaders(HttpHeader.ACCEPT_LANGUAGE).size());
}
- assertEquals(SERVICE_ROOT, retrieveRequest.getRawBaseUri());
- assertEquals("/Employees('2')/EmployeeName",
retrieveRequest.getRawODataPath());
-
assertEquals("http://localhost/odata/Employees('2')/EmployeeName?$format=json",
retrieveRequest
- .getRawRequestUri());
- assertEquals("$format=json", retrieveRequest.getRawQueryPath());
+ Assert.assertEquals(SERVICE_ROOT + "/" + PROPERTY_URI +
"?$format=json", request.getRawRequestUri());
+ Assert.assertEquals("$format=json", request.getRawQueryPath());
+
} else {
- List<ODataRequest> requests = object.getRequests();
- for (ODataRequest request : requests) {
-
- assertEquals(HttpMethod.PUT, request.getMethod());
- assertEquals("100000", request.getHeader(HttpHeader.CONTENT_LENGTH));
- assertEquals("application/json;odata=verbose",
request.getHeader(HttpHeader.CONTENT_TYPE));
-
- List<String> acceptHeader = request.getHeaders(HttpHeader.ACCEPT);
- assertEquals(3, request.getHeaders(HttpHeader.ACCEPT).size());
- assertEquals("application/atomsvc+xml;q=0.8", acceptHeader.get(0));
- assertEquals("*/*;q=0.1", acceptHeader.get(2));
-
- assertEquals("http://localhost/odata/Employees('2')/EmployeeName",
request.getRawRequestUri());
- assertEquals("http://localhost/odata", request.getRawBaseUri());
- assertEquals("/Employees('2')/EmployeeName",
request.getRawODataPath());
- assertEquals("", request.getRawQueryPath()); // No query parameter
- }
+ Assert.assertEquals(HttpMethod.PUT, request.getMethod());
+ Assert.assertEquals("100000",
request.getHeader(HttpHeader.CONTENT_LENGTH));
+ Assert.assertEquals(APPLICATION_JSON,
request.getHeader(HttpHeader.CONTENT_TYPE));
+
+ final List<String> acceptHeader =
request.getHeaders(HttpHeader.ACCEPT);
+ Assert.assertEquals(4, request.getHeaders(HttpHeader.ACCEPT).size());
+ Assert.assertEquals("application/atom+xml;q=0.8", acceptHeader.get(2));
+ Assert.assertEquals("*/*;q=0.1", acceptHeader.get(3));
+
+ Assert.assertEquals(SERVICE_ROOT + "/" + PROPERTY_URI,
request.getRawRequestUri());
+ Assert.assertEquals("", request.getRawQueryPath()); // No query
parameter
+
+ Assert.assertEquals("{\"value\":\"⬠MODIFIED\"}" + CRLF,
IOUtils.toString(request.getBody()));
}
}
}
@Test
- public void testImageInContent() throws Exception {
- final InputStream contentInputStream = readFile("/batchWithContent.batch");
- final String content = IOUtils.toString(contentInputStream);
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET Employees?$filter=Age%20gt%2040 HTTP/1.1" + CRLF
- + "Accept: application/atomsvc+xml;q=0.8,
application/json;odata=verbose;q=0.5, */*;q=0.1" + CRLF
- + "MaxDataServiceVersion: 2.0" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void imageInContent() throws Exception {
+ final String content =
IOUtils.toString(readFile("/batchWithContent.batch"));
+ final String batch = "--" + BOUNDARY + CRLF
+ + GET_REQUEST
+ + "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
- + "content-type: Application/http" + CRLF
- + "content-transfer-encoding: Binary" + CRLF
- + "Content-ID: 1" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ + MIME_HEADERS
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "POST Employees HTTP/1.1" + CRLF
- + "Content-length: 100000" + CRLF
- + "Content-type: application/octet-stream" + CRLF
+ + HttpMethod.POST + " ESMedia" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": 100000" + CRLF
+ + HttpHeader.CONTENT_TYPE + ": image/jpeg" + CRLF
+ + "Content-Transfer-Encoding: base64" + CRLF
+ CRLF
+ content
+ CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> BatchRequestParts = parse(batch);
- for (BatchRequestPart part : BatchRequestParts) {
+ for (final BatchRequestPart part : BatchRequestParts) {
+ Assert.assertEquals(1, part.getRequests().size());
+ final ODataRequest request = part.getRequests().get(0);
if (!part.isChangeSet()) {
- assertEquals(1, part.getRequests().size());
- final ODataRequest retrieveRequest = part.getRequests().get(0);
-
- assertEquals(HttpMethod.GET, retrieveRequest.getMethod());
- assertEquals("http://localhost/odata/Employees?$filter=Age%20gt%2040",
retrieveRequest.getRawRequestUri());
- assertEquals("http://localhost/odata",
retrieveRequest.getRawBaseUri());
- assertEquals("/Employees", retrieveRequest.getRawODataPath());
- assertEquals("$filter=Age%20gt%2040",
retrieveRequest.getRawQueryPath());
+ Assert.assertEquals(HttpMethod.GET, request.getMethod());
+ Assert.assertEquals(SERVICE_ROOT + "/" + PROPERTY_URI,
request.getRawRequestUri());
+ Assert.assertEquals(SERVICE_ROOT, request.getRawBaseUri());
+ Assert.assertEquals("/" + PROPERTY_URI, request.getRawODataPath());
} else {
- final List<ODataRequest> requests = part.getRequests();
- for (ODataRequest request : requests) {
- assertEquals(HttpMethod.POST, request.getMethod());
- assertEquals("100000", request.getHeader(HttpHeader.CONTENT_LENGTH));
- assertEquals("1", request.getHeader(HttpHeader.CONTENT_ID));
- assertEquals("application/octet-stream",
request.getHeader(HttpHeader.CONTENT_TYPE));
-
- final InputStream body = request.getBody();
- assertEquals(content, IOUtils.toString(body));
- }
+ Assert.assertEquals(HttpMethod.POST, request.getMethod());
+ Assert.assertEquals("100000",
request.getHeader(HttpHeader.CONTENT_LENGTH));
+ Assert.assertEquals("1", request.getHeader(HttpHeader.CONTENT_ID));
+ Assert.assertEquals("image/jpeg",
request.getHeader(HttpHeader.CONTENT_TYPE));
+ Assert.assertEquals(content, IOUtils.toString(request.getBody()));
}
}
}
@Test
- public void testPostWithoutBody() throws Exception {
- final String batch = CRLF
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
- + CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ public void binaryContent() throws Exception {
+ // binary content, not a valid UTF-8 representation of a string
+ byte[] content = new byte[Byte.MAX_VALUE - Byte.MIN_VALUE + 1];
+ for (int i = Byte.MIN_VALUE; i <= Byte.MAX_VALUE; i++) {
+ content[i - Byte.MIN_VALUE] = (byte) i;
+ }
+ ByteArrayOutputStream out = new ByteArrayOutputStream(500);
+ out.write(("--" + BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: changeRequest1" + CRLF
- + CRLF
- + "POST Employees('2') HTTP/1.1" + CRLF
- + "Content-Length: 100" + CRLF
- + "Content-Type: application/octet-stream" + CRLF
- + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
- final List<BatchRequestPart> batchRequestParts = parse(batch);
-
- for (BatchRequestPart object : batchRequestParts) {
- if (object.isChangeSet()) {
- final List<ODataRequest> requests = object.getRequests();
-
- for (ODataRequest request : requests) {
- assertEquals(HttpMethod.POST, request.getMethod());
- assertEquals("100", request.getHeader(HttpHeader.CONTENT_LENGTH));
- assertEquals("application/octet-stream",
request.getHeader(HttpHeader.CONTENT_TYPE));
- assertNotNull(request.getBody());
- }
- }
- }
+ + HttpMethod.POST + " ESMedia" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_OCTET_STREAM + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": " + (Byte.MAX_VALUE - Byte.MIN_VALUE
+ 1) + CRLF
+ + CRLF).getBytes());
+ out.write(content);
+ out.write((CRLF
+ + "--" + BOUNDARY + "--").getBytes());
+ final List<BatchRequestPart> parts = parse(new
ByteArrayInputStream(out.toByteArray()), true);
+ Assert.assertEquals(1, parts.size());
+ Assert.assertEquals(1, parts.get(0).getRequests().size());
+ InputStream body = parts.get(0).getRequests().get(0).getBody();
+ Assert.assertNotNull(body);
+ Assert.assertArrayEquals(content, IOUtils.toByteArray(body));
}
@Test
- public void testAbsoluteUri() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
+ public void postWithoutBody() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
+ + HttpHeader.CONTENT_ID + ": changeRequest1" + CRLF
+ CRLF
- + "GET http://localhost/odata/Employees('1')/EmployeeName?$top=1
HTTP/1.1" + CRLF
+ + HttpMethod.POST + " ESAllPrim" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": 100" + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_OCTET_STREAM + CRLF
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
-
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ + CRLF
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> batchRequestParts = parse(batch);
- assertEquals(1, batchRequestParts.size());
- final BatchRequestPart part = batchRequestParts.get(0);
-
- assertEquals(1, part.getRequests().size());
- final ODataRequest request = part.getRequests().get(0);
-
- assertEquals("/Employees('1')/EmployeeName", request.getRawODataPath());
- assertEquals("$top=1", request.getRawQueryPath());
- assertEquals("http://localhost/odata/Employees('1')/EmployeeName?$top=1",
request.getRawRequestUri());
- assertEquals("http://localhost/odata", request.getRawBaseUri());
+ Assert.assertEquals(1, batchRequestParts.size());
+ Assert.assertTrue(batchRequestParts.get(0).isChangeSet());
+ Assert.assertEquals(1, batchRequestParts.get(0).getRequests().size());
+ final ODataRequest request = batchRequestParts.get(0).getRequests().get(0);
+ Assert.assertEquals(HttpMethod.POST, request.getMethod());
+ Assert.assertEquals("100", request.getHeader(HttpHeader.CONTENT_LENGTH));
+ Assert.assertEquals(APPLICATION_OCTET_STREAM,
request.getHeader(HttpHeader.CONTENT_TYPE));
+ Assert.assertNotNull(request.getBody());
+ Assert.assertEquals(-1, request.getBody().read());
}
@Test
public void boundaryParameterWithQuotes() throws Exception {
- final String contentType = "multipart/mixed;
boundary=\"batch_1.2+34:2j)0?\"";
- final String boundary = BatchParserCommon.getBoundary(contentType, 0);
- final String batch = ""
- + "--batch_1.2+34:2j)0?" + CRLF
+ final String boundary = "batch_1.2+34:2j)0?";
+ final String batch = "--" + boundary + CRLF
+ GET_REQUEST
- + "--batch_1.2+34:2j)0?--";
- final BatchParser parser = new BatchParser();
- final BatchOptions batchOptions =
BatchOptions.with().isStrict(true).rawBaseUri(SERVICE_ROOT).build();
- final List<BatchRequestPart> batchRequestParts =
- parser.parseBatchRequest(IOUtils.toInputStream(batch), boundary,
batchOptions);
-
- assertNotNull(batchRequestParts);
- assertFalse(batchRequestParts.isEmpty());
- }
-
- @Test
- public void testBatchWithInvalidContentType() throws Exception {
- final String invalidContentType =
"multipart;boundary=batch_1740-bb84-2f7f";
-
- try {
- BatchParserCommon.getBoundary(invalidContentType, 0);
- fail();
- } catch (BatchDeserializerException e) {
- assertMessageKey(e,
BatchDeserializerException.MessageKeys.INVALID_CONTENT_TYPE);
- }
- }
-
- @Test
- public void testContentTypeCharset() throws Exception {
- final String contentType = "multipart/mixed;
charset=UTF-8;boundary=batch_14d1-b293-b99a";
- final String boundary = BatchParserCommon.getBoundary(contentType, 0);
-
- assertEquals("batch_14d1-b293-b99a", boundary);
- }
-
- @Test
- public void batchWithoutBoundaryParameter() throws Exception {
- final String invalidContentType = "multipart/mixed";
-
- try {
- BatchParserCommon.getBoundary(invalidContentType, 0);
- fail();
- } catch (BatchDeserializerException e) {
- assertMessageKey(e,
BatchDeserializerException.MessageKeys.MISSING_BOUNDARY_DELIMITER);
- }
- }
-
- @Test
- public void boundaryParameterWithoutQuote() throws Exception {
- final String invalidContentType =
"multipart/mixed;boundary=batch_1740-bb:84-2f7f";
+ + "--" + boundary + "--";
+ final List<BatchRequestPart> batchRequestParts = new
BatchParser().parseBatchRequest(
+ IOUtils.toInputStream(batch),
+ boundary,
+ BatchOptions.with().isStrict(true).rawBaseUri(SERVICE_ROOT).build());
- try {
- BatchParserCommon.getBoundary(invalidContentType, 0);
- fail();
- } catch (BatchDeserializerException e) {
- assertMessageKey(e,
BatchDeserializerException.MessageKeys.INVALID_BOUNDARY);
- }
+ Assert.assertNotNull(batchRequestParts);
+ Assert.assertFalse(batchRequestParts.isEmpty());
}
@Test
- public void testWrongBoundaryString() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f5" + CRLF
+ public void wrongBoundaryString() throws Exception {
+ final String batch = "--batch_8194-cf13-1f5" + CRLF
+ GET_REQUEST
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> parts = parse(batch);
- assertEquals(0, parts.size());
+ Assert.assertEquals(0, parts.size());
}
@Test
- public void testMissingHttpVersion() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: application/http" + CRLF
- + "Content-Transfer-Encoding:binary" + CRLF
+ public void missingHttpVersion() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + MIME_HEADERS
+ CRLF
- + "GET Employees?$format=json" + CRLF
- + "Host: localhost:8080" + CRLF
+ + HttpMethod.GET + " ESAllPrim?$format=json" + CRLF
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_STATUS_LINE);
}
@Test
- public void testMissingHttpVersion2() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: application/http" + CRLF
- + "Content-Transfer-Encoding:binary" + CRLF
+ public void missingHttpVersion2() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + MIME_HEADERS
+ CRLF
- + "GET Employees?$format=json " + CRLF
- + "Host: localhost:8080" + CRLF
+ + HttpMethod.GET + " ESAllPrim?$format=json " + CRLF
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_HTTP_VERSION);
}
@Test
- public void testMissingHttpVersion3() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: application/http" + CRLF
- + "Content-Transfer-Encoding:binary" + CRLF
+ public void missingHttpVersion3() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + MIME_HEADERS
+ CRLF
- + "GET Employees?$format=json SMTP:3.1" + CRLF
- + "Host: localhost:8080" + CRLF
+ + HttpMethod.GET + " ESAllPrim?$format=json SMTP:3.1" + CRLF
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_HTTP_VERSION);
}
@Test
- public void testBoundaryWithoutHyphen() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
+ public void boundaryWithoutHyphen() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ GET_REQUEST
- + "batch_8194-cf13-1f56" + CRLF
+ + BOUNDARY + CRLF
+ GET_REQUEST
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_CONTENT);
}
@Test
- public void testNoBoundaryString() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
+ public void noBoundaryString() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ GET_REQUEST
// + no boundary string
+ GET_REQUEST
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_CONTENT);
}
@Test
- public void testBatchBoundaryEqualsChangeSetBoundary() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed;boundary=batch_8194-cf13-1f56" + CRLF
+ public void batchBoundaryEqualsChangeSetBoundary() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + ";boundary=" +
BOUNDARY + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56" + CRLF
+ + "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "PUT Employees('2')/EmployeeName HTTP/1.1" + CRLF
- + "Accept: application/atomsvc+xml;q=0.8,
application/json;odata=verbose;q=0.5, */*;q=0.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "MaxDataServiceVersion: 2.0" + CRLF
+ + HttpMethod.PUT + " " + PROPERTY_URI + HTTP_VERSION + CRLF
+ + ACCEPT_HEADER
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Frederic Fall MODIFIED\"}" + CRLF
+ + "{\"value\":\"MODIFIED\"}" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--"
+ + "--" + BOUNDARY + "--"
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_BLANK_LINE);
}
@Test
- public void testNoContentType() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Transfer-Encoding: binary" + CRLF
+ public void noContentType() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.ODATA_VERSION + ": 4.0" + CRLF
+ CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
+ + HttpMethod.GET + " " + PROPERTY_URI + HTTP_VERSION + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CONTENT_TYPE);
}
@Test
public void mimeHeaderContentType() throws Exception {
- final String batch = "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: text/plain" + CRLF
- + "Content-Transfer-Encoding: binary" + CRLF
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": text/plain" + CRLF
+ CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
+ + HttpMethod.GET + " " + PROPERTY_URI + HTTP_VERSION + CRLF
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.UNEXPECTED_CONTENT_TYPE);
}
@Test
- public void testMimeHeaderEncoding() throws Exception {
- String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: application/http" + CRLF
+ public void mimeHeaderEncoding() throws Exception {
+ String batch = "--" + BOUNDARY + CRLF
+ + MIME_HEADERS
+ "Content-Transfer-Encoding: 8bit" + CRLF
+ CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
+ + HttpMethod.GET + " " + PROPERTY_URI + HTTP_VERSION + CRLF
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_CONTENT_TRANSFER_ENCODING);
}
@Test
- public void testGetRequestMissingCRLF() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
+ public void getRequestMissingCRLF() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
+ + HttpMethod.GET + " " + PROPERTY_URI + HTTP_VERSION + CRLF
// + CRLF // Belongs to the GET request
- + CRLF // Belongs to the
- + "--batch_8194-cf13-1f56--";
+ + CRLF // Belongs to the boundary
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_BLANK_LINE);
}
@Test
- public void testMethodsForIndividualRequests() throws Exception {
- final String batch = "--batch_8194-cf13-1f56" + CRLF
+ public void methodsForIndividualRequests() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "POST Employees HTTP/1.1" + CRLF
- + "Content-Type: application/json" + CRLF
+ + HttpMethod.POST + " ESAllPrim" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{ \"Name\": \"Foo\" }"
+ + "{ \"PropertyString\": \"Foo\" }"
+ CRLF
- + "--batch_8194-cf13-1f56" + CRLF
+ + "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "DELETE Employees('1') HTTP/1.1" + CRLF
+ + HttpMethod.DELETE + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56" + CRLF
+ + "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "PATCH Employees('1') HTTP/1.1" + CRLF
- + "Content-Type: application/json" + CRLF
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{ \"Name\": \"Foo\" }" + CRLF
- + "--batch_8194-cf13-1f56" + CRLF
+ + "{ \"PropertyString\": \"Foo\" }" + CRLF
+ + "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "PUT Employees('1') HTTP/1.1" + CRLF
- + "Content-Type: application/json" + CRLF
+ + HttpMethod.PUT + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{ \"Name\": \"Foo\" }" + CRLF
- + "--batch_8194-cf13-1f56" + CRLF
+ + "{ \"PropertyString\": \"Foo\" }" + CRLF
+ + "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "GET Employees('1') HTTP/1.1" + CRLF
- + "Accept: application/json" + CRLF
+ + HttpMethod.GET + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + ACCEPT_HEADER
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
- List<BatchRequestPart> requests = parse(batch);
- assertEquals(HttpMethod.POST,
requests.get(0).getRequests().get(0).getMethod());
- assertEquals("/Employees",
requests.get(0).getRequests().get(0).getRawODataPath());
- assertEquals("{ \"Name\": \"Foo\" }",
IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
+ final List<BatchRequestPart> requests = parse(batch);
- requests = parse(batch);
- assertEquals(HttpMethod.DELETE,
requests.get(1).getRequests().get(0).getMethod());
- assertEquals("/Employees('1')",
requests.get(1).getRequests().get(0).getRawODataPath());
+ Assert.assertEquals(HttpMethod.POST,
requests.get(0).getRequests().get(0).getMethod());
+ Assert.assertEquals("/ESAllPrim",
requests.get(0).getRequests().get(0).getRawODataPath());
+ Assert.assertEquals("{ \"PropertyString\": \"Foo\" }",
+ IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
- requests = parse(batch);
- assertEquals(HttpMethod.PATCH,
requests.get(2).getRequests().get(0).getMethod());
- assertEquals("{ \"Name\": \"Foo\" }",
IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
- assertEquals("/Employees('1')",
requests.get(2).getRequests().get(0).getRawODataPath());
+ Assert.assertEquals(HttpMethod.DELETE,
requests.get(1).getRequests().get(0).getMethod());
+ Assert.assertEquals("/ESAllPrim(32767)",
requests.get(1).getRequests().get(0).getRawODataPath());
- requests = parse(batch);
- assertEquals(HttpMethod.PUT,
requests.get(3).getRequests().get(0).getMethod());
- assertEquals("{ \"Name\": \"Foo\" }",
IOUtils.toString(requests.get(0).getRequests().get(0).getBody()));
- assertEquals("/Employees('1')",
requests.get(3).getRequests().get(0).getRawODataPath());
+ Assert.assertEquals(HttpMethod.PATCH,
requests.get(2).getRequests().get(0).getMethod());
+ Assert.assertEquals("/ESAllPrim(32767)",
requests.get(2).getRequests().get(0).getRawODataPath());
+ Assert.assertEquals("{ \"PropertyString\": \"Foo\" }",
+ IOUtils.toString(requests.get(2).getRequests().get(0).getBody()));
- requests = parse(batch);
- assertEquals(HttpMethod.GET,
requests.get(4).getRequests().get(0).getMethod());
- assertEquals("/Employees('1')",
requests.get(4).getRequests().get(0).getRawODataPath());
+ Assert.assertEquals(HttpMethod.PUT,
requests.get(3).getRequests().get(0).getMethod());
+ Assert.assertEquals("/ESAllPrim(32767)",
requests.get(3).getRequests().get(0).getRawODataPath());
+ Assert.assertEquals("{ \"PropertyString\": \"Foo\" }",
+ IOUtils.toString(requests.get(3).getRequests().get(0).getBody()));
+ Assert.assertEquals(HttpMethod.GET,
requests.get(4).getRequests().get(0).getMethod());
+ Assert.assertEquals("/ESAllPrim(32767)",
requests.get(4).getRequests().get(0).getRawODataPath());
}
@Test
- public void testNoBoundaryFound() throws Exception {
- final String batch = "batch_8194-cf13-1f56" + CRLF
+ public void noBoundaryFound() throws Exception {
+ final String batch = BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "POST Employees('1')/EmployeeName HTTP/1.1" + CRLF
+ + HttpMethod.POST + " ESAllPrim" + HTTP_VERSION + CRLF
+ CRLF;
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CLOSE_DELIMITER);
}
@Test
- public void testEmptyRequest() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56--";
+ public void emptyRequest() throws Exception {
+ final String batch = "--" + BOUNDARY + "--";
- final List<BatchRequestPart> parts = parse(batch);
- assertEquals(0, parts.size());
+ Assert.assertEquals(0, parse(batch).size());
}
@Test
- public void testBadRequest() throws Exception {
+ public void badRequest() throws Exception {
final String batch = "This is a bad request. There is no syntax and also
no semantic";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CLOSE_DELIMITER);
}
@Test
- public void testNoMethod() throws Exception {
- final String batch = "--batch_8194-cf13-1f56" + CRLF
+ public void noMethod() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + /* GET */"Employees('1')/EmployeeName HTTP/1.1" + CRLF
+ + /* HttpMethod.GET + " " + */ PROPERTY_URI + HTTP_VERSION + CRLF
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_STATUS_LINE);
}
@Test
- public void testInvalidMethodForChangeset() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void invalidMethodForChangeset() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-Id: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "GET Employees('2')/EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "MaxDataServiceVersion: 2.0" + CRLF
+ + HttpMethod.GET + " " + PROPERTY_URI + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd--"
+ + "--" + CHANGESET_BOUNDARY + "--"
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_CHANGESET_METHOD);
}
@Test
- public void testInvalidChangeSetBoundary() throws Exception {
- final String batch = "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed;boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void invalidChangeSetBoundary() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + ";boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94d"/* +"d" */+ CRLF
+ + "--" + CHANGESET_BOUNDARY.substring(0, CHANGESET_BOUNDARY.length() -
1) + CRLF
+ MIME_HEADERS
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "POST Employees('2') HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "MaxDataServiceVersion: 2.0" + CRLF
+ + HttpMethod.POST + " ESAllPrim" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> parts = parse(batch);
- assertEquals(1, parts.size());
+ Assert.assertEquals(1, parts.size());
final BatchRequestPart part = parts.get(0);
- assertTrue(part.isChangeSet());
- assertEquals(0, part.getRequests().size());
+ Assert.assertTrue(part.isChangeSet());
+ Assert.assertEquals(0, part.getRequests().size());
}
@Test
public void nestedChangeset() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed;boundary=changeset_f980-1cb6-94dd" +
CRLF
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + ";boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
- + "Content-Transfer-Encoding: binary" + CRLF
- + "Content-Type: multipart/mixed;boundary=changeset_f980-1cb6-94dd2" +
CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED +
";boundary=changeset_f980-1cb6-94dd2" + CRLF
+ CRLF
+ "--changeset_f980-1cb6-94dd2" + CRLF
+ MIME_HEADERS
- + "Content-Id: 1" + CRLF
- + CRLF
- + "POST Employees('2') HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF +
"MaxDataServiceVersion: 2.0" + CRLF
- + "Content-Id: 2"
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + HttpMethod.POST + " ESAllPrim" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ + HttpHeader.CONTENT_ID + ": 2" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.UNEXPECTED_CONTENT_TYPE);
}
@Test
- public void testMissingContentTransferEncoding() throws Exception {
- final String batch = "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed;boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void missingContentType() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + ";boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
- + "Content-Id: 1" + CRLF
- + "Content-Type: application/http" + CRLF
- // + "Content-Transfer-Encoding: binary" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ // + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_HTTP + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "POST Employees('2') HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "MaxDataServiceVersion: 2.0" + CRLF
+ + HttpMethod.POST + " ESAllPrim" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ + "--" + BOUNDARY + "--";
- parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CONTENT_TRANSFER_ENCODING);
+ parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CONTENT_TYPE);
}
@Test
- public void testMissingContentType() throws Exception {
- final String batch = "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed;boundary=changeset_f980-1cb6-94dd" +
CRLF
- + CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
- + "Content-Id: 1"
- // + "Content-Type: application/http" + CRLF
- + "Content-Transfer-Encoding: binary" + CRLF
- + CRLF
- + "POST Employees('2') HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "MaxDataServiceVersion: 2.0" + CRLF
- + CRLF
- + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
- + "--batch_8194-cf13-1f56--";
+ public void noCloseDelimiter() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + GET_REQUEST;
- parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CONTENT_TYPE);
+ parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CLOSE_DELIMITER);
}
@Test
- public void testNoCloseDelimiter() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
+ public void noCloseDelimiter2() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ GET_REQUEST;
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CLOSE_DELIMITER);
}
@Test
- public void testNoCloseDelimiter2() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF;
+ public void noCloseDelimiter3() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + GET_REQUEST
+ + "--" + BOUNDARY + "-"/* no hyphen */;
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CLOSE_DELIMITER);
}
@Test
- public void testUriWithAbsolutePath() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET /odata/Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "Host: http://localhost" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
+ public void absoluteUri() throws Exception {
+ final List<BatchRequestPart> batchRequestParts = parse(
+ createBatchWithGetRequest(SERVICE_ROOT + "/ESAllPrim?$top=1", null));
- parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_URI);
- }
+ Assert.assertEquals(1, batchRequestParts.size());
+ final BatchRequestPart part = batchRequestParts.get(0);
- @Test
- public void testUriWithAbsolutePathMissingHostHeader() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET /odata/Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
+ Assert.assertEquals(1, part.getRequests().size());
+ final ODataRequest request = part.getRequests().get(0);
- parseInvalidBatchBody(batch, MessageKeys.INVALID_URI);
+ Assert.assertEquals("/ESAllPrim", request.getRawODataPath());
+ Assert.assertEquals("$top=1", request.getRawQueryPath());
+ Assert.assertEquals(SERVICE_ROOT + "/ESAllPrim?$top=1",
request.getRawRequestUri());
+ Assert.assertEquals(SERVICE_ROOT, request.getRawBaseUri());
}
@Test
- public void testUriWithAbsolutePathOtherHost() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET /odata/Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "Host: http://localhost2" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
+ public void uriWithAbsolutePath() throws Exception {
+ final List<BatchRequestPart> batchRequestParts = parse(
+ createBatchWithGetRequest("/odata/" + PROPERTY_URI, "Host:
localhost"));
+ final BatchRequestPart part = batchRequestParts.get(0);
+ Assert.assertEquals(1, part.getRequests().size());
+ final ODataRequest request = part.getRequests().get(0);
+ Assert.assertEquals("/" + PROPERTY_URI, request.getRawODataPath());
+ Assert.assertEquals(SERVICE_ROOT + "/" + PROPERTY_URI,
request.getRawRequestUri());
+ }
- parseInvalidBatchBody(batch, MessageKeys.INVALID_URI);
+ @Test
+ public void uriWithAbsolutePathMissingHostHeader() throws Exception {
+ final List<BatchRequestPart> batchRequestParts = parse(
+ createBatchWithGetRequest("/odata/" + PROPERTY_URI, null));
+ final BatchRequestPart part = batchRequestParts.get(0);
+ Assert.assertEquals(1, part.getRequests().size());
+ final ODataRequest request = part.getRequests().get(0);
+ Assert.assertEquals("/" + PROPERTY_URI, request.getRawODataPath());
+ Assert.assertEquals(SERVICE_ROOT + "/" + PROPERTY_URI,
request.getRawRequestUri());
}
@Test
- public void testUriWithAbsolutePathWrongPath() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET /myservice/Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "Host: http://localhost" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
+ public void uriWithAbsolutePathTwoHostHeaders() throws Exception {
+ parseInvalidBatchBody(createBatchWithGetRequest("/odata/" + PROPERTY_URI,
+ "Host: localhost" + CRLF + "Host: localhost:80"),
+ BatchDeserializerException.MessageKeys.INVALID_HOST);
+ }
- parseInvalidBatchBody(batch, MessageKeys.INVALID_URI);
+ @Test
+ public void uriWithAbsolutePathOtherHost() throws Exception {
+ parseInvalidBatchBody(createBatchWithGetRequest("/odata/" + PROPERTY_URI,
"Host: localhost2"),
+ BatchDeserializerException.MessageKeys.INVALID_HOST);
}
@Test
- public void testNoCloseDelimiter3() throws Exception {
- final String batch = "--batch_8194-cf13-1f56" + CRLF + GET_REQUEST +
"--batch_8194-cf13-1f56-"/* no hyphen */;
+ public void uriWithAbsolutePathOtherPort() throws Exception {
+ parseInvalidBatchBody(createBatchWithGetRequest("/odata/" + PROPERTY_URI,
"Host: localhost:90"),
+ BatchDeserializerException.MessageKeys.INVALID_HOST);
+ }
- parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.MISSING_CLOSE_DELIMITER);
+ @Test
+ public void uriWithWrongAbsolutePath() throws Exception {
+ parseInvalidBatchBody(createBatchWithGetRequest("/myservice/" +
PROPERTY_URI, "Host: localhost"),
+ BatchDeserializerException.MessageKeys.INVALID_URI);
}
@Test
- public void testNegativeContentLengthChangeSet() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void negativeContentLengthChangeSet() throws Exception {
+ parse("--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 1" + CRLF
- + "Content-Length: -2" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": -2" + CRLF
+ CRLF
- + "PUT EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "Content-Id: 1" + CRLF
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"PropertyString\":\"new\"}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
-
- parse(batch);
+ + "--" + BOUNDARY + "--");
}
@Test
- public void testNegativeContentLengthRequest() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void negativeContentLengthRequest() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "PUT EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "Content-Id: 1" + CRLF
- + "Content-Length: 2" + CRLF
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": -2" + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"PropertyString\":\"new\"}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
- parse(batch);
+ parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_CONTENT_LENGTH);
}
@Test
- public void testContentLengthGreatherThanBodyLength() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void contentLengthGreatherThanBodyLength() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "PUT Employee/Name HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "Content-Length: 100000" + CRLF
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": 100000" + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"PropertyString\":\"new\"}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> batchRequestParts = parse(batch);
- assertNotNull(batchRequestParts);
+ Assert.assertNotNull(batchRequestParts);
+ Assert.assertEquals(1, batchRequestParts.size());
- for (BatchRequestPart multipart : batchRequestParts) {
- if (multipart.isChangeSet()) {
- assertEquals(1, multipart.getRequests().size());
+ final BatchRequestPart part = batchRequestParts.get(0);
+ Assert.assertTrue(part.isChangeSet());
+ Assert.assertEquals(1, part.getRequests().size());
- final ODataRequest request = multipart.getRequests().get(0);
- assertEquals("{\"EmployeeName\":\"Peter Fall\"}",
IOUtils.toString(request.getBody()));
- }
- }
+ final ODataRequest request = part.getRequests().get(0);
+ Assert.assertEquals("{\"PropertyString\":\"new\"}",
IOUtils.toString(request.getBody()));
}
@Test
- public void testContentLengthSmallerThanBodyLength() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void contentLengthSmallerThanBodyLength() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "PUT EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "Content-Length: 10" + CRLF
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": 10" + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"PropertyString\":\"new\"}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> batchRequestParts = parse(batch);
- assertNotNull(batchRequestParts);
+ Assert.assertNotNull(batchRequestParts);
+ Assert.assertEquals(1, batchRequestParts.size());
- for (BatchRequestPart multipart : batchRequestParts) {
- if (multipart.isChangeSet()) {
- assertEquals(1, multipart.getRequests().size());
+ final BatchRequestPart part = batchRequestParts.get(0);
+ Assert.assertTrue(part.isChangeSet());
+ Assert.assertEquals(1, part.getRequests().size());
- final ODataRequest request = multipart.getRequests().get(0);
- assertEquals("{\"Employee", IOUtils.toString(request.getBody()));
- }
- }
+ final ODataRequest request = part.getRequests().get(0);
+ Assert.assertEquals("{\"Property", IOUtils.toString(request.getBody()));
}
@Test
public void nonNumericContentLength() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "PUT EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "Content-Length: 10abc" + CRLF
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": 10abc" + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"PropertyString\":\"new\"}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_CONTENT_LENGTH);
}
@Test
- public void testNonStrictParser() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed;boundary=changeset_8194-cf13-1f56" +
CRLF
- + "--changeset_8194-cf13-1f56" + CRLF
+ public void nonStrictParser() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + ";boundary=" +
CHANGESET_BOUNDARY + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: myRequest" + CRLF
- + "PUT Employees('2')/EmployeeName HTTP/1.1" + CRLF
- + "Accept: application/atomsvc+xml;q=0.8,
application/json;odata=verbose;q=0.5, */*;q=0.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "MaxDataServiceVersion: 2.0" + CRLF
- + "{\"EmployeeName\":\"Frederic Fall MODIFIED\"}" + CRLF
- + "--changeset_8194-cf13-1f56--" + CRLF
- + "--batch_8194-cf13-1f56--";
+ + HttpHeader.CONTENT_ID + ": myRequest" + CRLF
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + ACCEPT_HEADER
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ + "{\"PropertyString\":\"new\"}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> requests = parse(batch, false);
- assertNotNull(requests);
- assertEquals(1, requests.size());
+ Assert.assertNotNull(requests);
+ Assert.assertEquals(1, requests.size());
final BatchRequestPart part = requests.get(0);
- assertTrue(part.isChangeSet());
- assertNotNull(part.getRequests());
- assertEquals(1, part.getRequests().size());
+ Assert.assertTrue(part.isChangeSet());
+ Assert.assertNotNull(part.getRequests());
+ Assert.assertEquals(1, part.getRequests().size());
final ODataRequest changeRequest = part.getRequests().get(0);
- assertEquals("{\"EmployeeName\":\"Frederic Fall MODIFIED\"}",
- IOUtils.toString(changeRequest.getBody()));
- assertEquals("application/json;odata=verbose",
changeRequest.getHeader(HttpHeader.CONTENT_TYPE));
- assertEquals(HttpMethod.PUT, changeRequest.getMethod());
+ Assert.assertEquals("{\"PropertyString\":\"new\"}",
IOUtils.toString(changeRequest.getBody()));
+ Assert.assertEquals(APPLICATION_JSON,
changeRequest.getHeader(HttpHeader.CONTENT_TYPE));
+ Assert.assertEquals(HttpMethod.PATCH, changeRequest.getMethod());
}
@Test
- public void testNonStrictParserMoreCRLF() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed;boundary=changeset_8194-cf13-1f56" +
CRLF
- + "--changeset_8194-cf13-1f56" + CRLF
+ public void nonStrictParserMoreCRLF() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + ";boundary=" +
CHANGESET_BOUNDARY + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
+ CRLF // Only one CRLF allowed
- + "PUT Employees('2')/EmployeeName HTTP/1.1" + CRLF
- + "Accept: application/atomsvc+xml;q=0.8,
application/json;odata=verbose;q=0.5, */*;q=0.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "MaxDataServiceVersion: 2.0" + CRLF
- + "{\"EmployeeName\":\"Frederic Fall MODIFIED\"}" + CRLF
- + "--changeset_8194-cf13-1f56--" + CRLF
- + "--batch_8194-cf13-1f56--";
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + ACCEPT_HEADER
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ + "{\"PropertyString\":\"new\"}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ + "--" + BOUNDARY + "--";
parseInvalidBatchBody(batch,
BatchDeserializerException.MessageKeys.INVALID_STATUS_LINE, false);
}
@Test
- public void testContentId() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
+ public void contentId() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "GET Employees HTTP/1.1" + CRLF
- + "accept:
*/*,application/atom+xml,application/atomsvc+xml,application/xml" + CRLF
- + "Content-Id: BBB" + CRLF
+ + HttpMethod.GET + " ESAllPrim" + HTTP_VERSION + CRLF
+ + ACCEPT_HEADER
+ + HttpHeader.CONTENT_ID + ": BBB" + CRLF
+ CRLF + CRLF
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ + "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-Id: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "POST Employees HTTP/1.1" + CRLF
- + "Content-type: application/octet-stream" + CRLF
+ + HttpMethod.POST + " ESMedia" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": image/png" + CRLF
+ + "Content-Transfer-Encoding: base64" + CRLF
+ CRLF
- +
"/9j/4AAQSkZJRgABAQEBLAEsAAD/4RM0RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAA"
+ CRLF
+ +
"iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAABmJLR0QA/wD/AP+gvaeTAAAAH0lE"
+ +
"QVQokWNgGHmA8S4FmpkosXngNDP+PzdANg+cZgBqiQK5mkdWWgAAAABJRU5ErkJggg==" + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "PUT $1/EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
- + "Content-Id: 2" + CRLF
+ + HttpMethod.PUT + " $1/PropertyInt16" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ + HttpHeader.CONTENT_ID + ": 2" + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"value\":5}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> batchRequestParts = parse(batch);
- assertNotNull(batchRequestParts);
+ Assert.assertNotNull(batchRequestParts);
for (BatchRequestPart multipart : batchRequestParts) {
if (!multipart.isChangeSet()) {
- assertEquals(1, multipart.getRequests().size());
- final ODataRequest retrieveRequest = multipart.getRequests().get(0);
-
- assertEquals("BBB", retrieveRequest.getHeader(HttpHeader.CONTENT_ID));
+ Assert.assertEquals(1, multipart.getRequests().size());
+ Assert.assertEquals("BBB",
multipart.getRequests().get(0).getHeader(HttpHeader.CONTENT_ID));
} else {
for (ODataRequest request : multipart.getRequests()) {
if (HttpMethod.POST.equals(request.getMethod())) {
- assertEquals("1", request.getHeader(HttpHeader.CONTENT_ID));
+ Assert.assertEquals("1", request.getHeader(HttpHeader.CONTENT_ID));
} else if (HttpMethod.PUT.equals(request.getMethod())) {
- assertEquals("2", request.getHeader(HttpHeader.CONTENT_ID));
- assertEquals("/$1/EmployeeName", request.getRawODataPath());
- assertEquals("http://localhost/odata/$1/EmployeeName",
request.getRawRequestUri());
+ Assert.assertEquals("2", request.getHeader(HttpHeader.CONTENT_ID));
+ Assert.assertEquals("/$1/PropertyInt16",
request.getRawODataPath());
+ Assert.assertEquals(SERVICE_ROOT + "/$1/PropertyInt16",
request.getRawRequestUri());
}
}
}
@@ -984,189 +890,183 @@ public class BatchRequestParserTest {
}
@Test
- public void testNoContentId() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
+ public void noContentId() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "GET Employees HTTP/1.1" + CRLF
- + "accept:
*/*,application/atom+xml,application/atomsvc+xml,application/xml" + CRLF
- + CRLF + CRLF
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ + HttpMethod.GET + " ESMedia" + HTTP_VERSION + CRLF
+ + ACCEPT_HEADER
+ + CRLF
+ + CRLF
+ + "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-Id: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "POST Employees HTTP/1.1" + CRLF
- + "Content-type: application/octet-stream" + CRLF
+ + HttpMethod.POST + " ESMedia" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": image/png" + CRLF
+ + "Content-Transfer-Encoding: base64" + CRLF
+ CRLF
- +
"/9j/4AAQSkZJRgABAQEBLAEsAAD/4RM0RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAA"
+ CRLF
+ +
"iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAABmJLR0QA/wD/AP+gvaeTAAAAH0lE"
+ +
"QVQokWNgGHmA8S4FmpkosXngNDP+PzdANg+cZgBqiQK5mkdWWgAAAABJRU5ErkJggg==" + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-Id: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "PUT $1/EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
+ + HttpMethod.PUT + " $1/PropertyInt16" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"value\":5}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parse(batch);
}
@Test
- public void testPreamble() throws Exception {
- final String batch = ""
- + "This is a preamble and must be ignored" + CRLF
+ public void preamble() throws Exception {
+ final String batch = "This is a preamble and must be ignored" + CRLF
+ CRLF
+ CRLF
+ "----1242" + CRLF
- + "--batch_8194-cf13-1f56" + CRLF
+ + "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "GET Employees HTTP/1.1" + CRLF
- + "accept:
*/*,application/atom+xml,application/atomsvc+xml,application/xml" + CRLF
- + "Content-Id: BBB" + CRLF
+ + HttpMethod.GET + " ESAllPrim" + HTTP_VERSION + CRLF
+ + ACCEPT_HEADER
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ + "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
+ "This is a preamble and must be ignored" + CRLF
+ CRLF
+ CRLF
+ "----1242" + CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-Id: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "POST Employees HTTP/1.1" + CRLF
- + "Content-type: application/octet-stream" + CRLF
+ + HttpMethod.POST + " ESMedia" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": image/png" + CRLF
+ + "Content-Transfer-Encoding: base64" + CRLF
+ CRLF
- +
"/9j/4AAQSkZJRgABAQEBLAEsAAD/4RM0RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAA"
+ CRLF
+ +
"iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAABmJLR0QA/wD/AP+gvaeTAAAAH0lE"
+ +
"QVQokWNgGHmA8S4FmpkosXngNDP+PzdANg+cZgBqiQK5mkdWWgAAAABJRU5ErkJggg==" + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 2" + CRLF
+ + HttpHeader.CONTENT_ID + ": 2" + CRLF
+ CRLF
- + "PUT $1/EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
+ + HttpMethod.PUT + " $1/PropertyInt16" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"value\":5}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> batchRequestParts = parse(batch);
- assertNotNull(batchRequestParts);
- assertEquals(2, batchRequestParts.size());
+ Assert.assertNotNull(batchRequestParts);
+ Assert.assertEquals(2, batchRequestParts.size());
final BatchRequestPart getRequestPart = batchRequestParts.get(0);
- assertEquals(1, getRequestPart.getRequests().size());
+ Assert.assertEquals(1, getRequestPart.getRequests().size());
final ODataRequest getRequest = getRequestPart.getRequests().get(0);
- assertEquals(HttpMethod.GET, getRequest.getMethod());
+ Assert.assertEquals(HttpMethod.GET, getRequest.getMethod());
final BatchRequestPart changeSetPart = batchRequestParts.get(1);
- assertEquals(2, changeSetPart.getRequests().size());
-
assertEquals("/9j/4AAQSkZJRgABAQEBLAEsAAD/4RM0RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAA"
- + CRLF,
+ Assert.assertEquals(2, changeSetPart.getRequests().size());
+
Assert.assertEquals("iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAABmJLR0QA/wD/AP+gvaeTAAAAH0lE"
+ +
"QVQokWNgGHmA8S4FmpkosXngNDP+PzdANg+cZgBqiQK5mkdWWgAAAABJRU5ErkJggg==" + CRLF,
IOUtils.toString(changeSetPart.getRequests().get(0).getBody()));
- assertEquals("{\"EmployeeName\":\"Peter Fall\"}",
- IOUtils.toString(changeSetPart.getRequests().get(1).getBody()));
+ Assert.assertEquals("{\"value\":5}",
IOUtils.toString(changeSetPart.getRequests().get(1).getBody()));
}
@Test
- public void testContentTypeCaseInsensitive() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: muLTiParT/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void contentTypeCaseInsensitive() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 1" + CRLF
- + "Content-Length: 200" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ + HttpHeader.CONTENT_LENGTH + ": 200" + CRLF
+ CRLF
- + "PUT EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"PropertyString\":\"new\"}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
parse(batch);
}
@Test
- public void testContentTypeBoundaryCaseInsensitive() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; bOunDaRy=changeset_f980-1cb6-94dd" +
CRLF
+ public void contentTypeBoundaryCaseInsensitive() throws Exception {
+ final String batch = "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; bOunDaRy=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "PUT EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
+ + HttpMethod.PATCH + " ESAllPrim(32767)" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"PropertyString\":\"new\"}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
+ + "--" + BOUNDARY + "--";
final List<BatchRequestPart> batchRequestParts = parse(batch);
- assertNotNull(batchRequestParts);
- assertEquals(1, batchRequestParts.size());
- assertTrue(batchRequestParts.get(0).isChangeSet());
- assertEquals(1, batchRequestParts.get(0).getRequests().size());
+ Assert.assertNotNull(batchRequestParts);
+ Assert.assertEquals(1, batchRequestParts.size());
+ Assert.assertTrue(batchRequestParts.get(0).isChangeSet());
+ Assert.assertEquals(1, batchRequestParts.get(0).getRequests().size());
}
@Test
- public void testEpilog() throws Exception {
- String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET Employees HTTP/1.1" + CRLF
- + "accept:
*/*,application/atom+xml,application/atomsvc+xml,application/xml" + CRLF
- + "Content-Id: BBB" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56" + CRLF
- + "Content-Type: multipart/mixed; boundary=changeset_f980-1cb6-94dd" +
CRLF
+ public void epilog() throws Exception {
+ String batch = "--" + BOUNDARY + CRLF
+ + GET_REQUEST
+ + "--" + BOUNDARY + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + MULTIPART_MIXED + "; boundary=" +
CHANGESET_BOUNDARY + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-Id: 1" + CRLF
+ + HttpHeader.CONTENT_ID + ": 1" + CRLF
+ CRLF
- + "POST Employees HTTP/1.1" + CRLF
- + "Content-type: application/octet-stream" + CRLF
+ + HttpMethod.POST + " ESMedia" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": image/png" + CRLF
+ + "Content-Transfer-Encoding: base64" + CRLF
+ CRLF
- +
"/9j/4AAQSkZJRgABAQEBLAEsAAD/4RM0RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAA"
+ CRLF
+ +
"iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAABmJLR0QA/wD/AP+gvaeTAAAAH0lE"
+ +
"QVQokWNgGHmA8S4FmpkosXngNDP+PzdANg+cZgBqiQK5mkdWWgAAAABJRU5ErkJggg==" + CRLF
+ CRLF
- + "--changeset_f980-1cb6-94dd" + CRLF
+ + "--" + CHANGESET_BOUNDARY + CRLF
+ MIME_HEADERS
- + "Content-ID: 2" + CRLF
+ + HttpHeader.CONTENT_ID + ": 2" + CRLF
+ CRLF
- + "PUT $1/EmployeeName HTTP/1.1" + CRLF
- + "Content-Type: application/json;odata=verbose" + CRLF
+ + HttpMethod.PUT + " $1/PropertyInt16" + HTTP_VERSION + CRLF
+ + HttpHeader.CONTENT_TYPE + ": " + APPLICATION_JSON + CRLF
+ CRLF
- + "{\"EmployeeName\":\"Peter Fall\"}" + CRLF
- + "--changeset_f980-1cb6-94dd--" + CRLF
+ + "{\"value\":5}" + CRLF
+ + "--" + CHANGESET_BOUNDARY + "--" + CRLF
+ CRLF
+ "This is an epilog and must be ignored" + CRLF
+ CRLF
+ CRLF
+ "----1242"
+ CRLF
- + "--batch_8194-cf13-1f56--"
+ + "--" + BOUNDARY + "--"
+ CRLF
+ "This is an epilog and must be ignored" + CRLF
+ CRLF
@@ -1174,163 +1074,110 @@ public class BatchRequestParserTest {
+ "----1242";
final List<BatchRequestPart> batchRequestParts = parse(batch);
- assertNotNull(batchRequestParts);
- assertEquals(2, batchRequestParts.size());
+ Assert.assertNotNull(batchRequestParts);
+ Assert.assertEquals(2, batchRequestParts.size());
BatchRequestPart getRequestPart = batchRequestParts.get(0);
- assertEquals(1, getRequestPart.getRequests().size());
+ Assert.assertEquals(1, getRequestPart.getRequests().size());
ODataRequest getRequest = getRequestPart.getRequests().get(0);
- assertEquals(HttpMethod.GET, getRequest.getMethod());
+ Assert.assertEquals(HttpMethod.GET, getRequest.getMethod());
BatchRequestPart changeSetPart = batchRequestParts.get(1);
- assertEquals(2, changeSetPart.getRequests().size());
-
assertEquals("/9j/4AAQSkZJRgABAQEBLAEsAAD/4RM0RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAA"
- + CRLF,
+ Assert.assertEquals(2, changeSetPart.getRequests().size());
+
Assert.assertEquals("iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAABmJLR0QA/wD/AP+gvaeTAAAAH0lE"
+ +
"QVQokWNgGHmA8S4FmpkosXngNDP+PzdANg+cZgBqiQK5mkdWWgAAAABJRU5ErkJggg==" + CRLF,
IOUtils.toString(changeSetPart.getRequests().get(0).getBody()));
- assertEquals("{\"EmployeeName\":\"Peter Fall\"}",
+ Assert.assertEquals("{\"value\":5}",
IOUtils.toString(changeSetPart.getRequests().get(1).getBody()));
}
@Test
- public void testLargeBatch() throws Exception {
- final InputStream in = readFile("/batchLarge.batch");
- parse(in);
+ public void largeBatch() throws Exception {
+ parse(readFile("/batchLarge.batch"), true);
}
@Test
- public void forbiddenHeaderAuthorization() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "Authorization: Basic QWxhZdsdsddsduIHNlc2FtZQ==" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
+ public void forbiddenHeaderWWWAuthenticate() throws Exception {
+ parseBatchWithForbiddenHeader(HttpHeader.WWW_AUTHENTICATE + ": Basic
realm=\"simple\"");
+ }
- parseInvalidBatchBody(batch, MessageKeys.FORBIDDEN_HEADER);
+ @Test
+ public void forbiddenHeaderAuthorization() throws Exception {
+ parseBatchWithForbiddenHeader(HttpHeader.AUTHORIZATION + ": Basic
QWxhZdsdsddsduIHNlc2FtZQ==");
}
@Test
public void forbiddenHeaderExpect() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "Expect: 100-continue" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
-
- parseInvalidBatchBody(batch, MessageKeys.FORBIDDEN_HEADER);
+ parseBatchWithForbiddenHeader(HttpHeader.EXPECT + ": 100-continue");
}
@Test
public void forbiddenHeaderFrom() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "From: [email protected]" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
-
- parseInvalidBatchBody(batch, MessageKeys.FORBIDDEN_HEADER);
+ parseBatchWithForbiddenHeader(HttpHeader.FROM + ": [email protected]");
}
@Test
public void forbiddenHeaderRange() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "Range: 200-256" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
-
- parseInvalidBatchBody(batch, MessageKeys.FORBIDDEN_HEADER);
+ parseBatchWithForbiddenHeader(HttpHeader.RANGE + ": 200-256");
}
@Test
public void forbiddenHeaderMaxForwards() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
- + MIME_HEADERS
- + CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "Max-Forwards: 3" + CRLF
- + CRLF
- + CRLF
- + "--batch_8194-cf13-1f56--";
-
- parseInvalidBatchBody(batch, MessageKeys.FORBIDDEN_HEADER);
+ parseBatchWithForbiddenHeader(HttpHeader.MAX_FORWARDS + ": 3");
}
@Test
public void forbiddenHeaderTE() throws Exception {
- final String batch = ""
- + "--batch_8194-cf13-1f56" + CRLF
+ parseBatchWithForbiddenHeader(HttpHeader.TE + ": deflate");
+ }
+
+ private void parseBatchWithForbiddenHeader(final String header) {
+ parseInvalidBatchBody(createBatchWithGetRequest(PROPERTY_URI, header),
MessageKeys.FORBIDDEN_HEADER);
+ }
+
+ private String createBatchWithGetRequest(final String url, final String
additionalHeader) {
+ return "--" + BOUNDARY + CRLF
+ MIME_HEADERS
+ CRLF
- + "GET Employees('1')/EmployeeName HTTP/1.1" + CRLF
- + "TE: deflate" + CRLF
+ + HttpMethod.GET + " " + url + HTTP_VERSION + CRLF
+ + (additionalHeader == null ? "" : (additionalHeader + CRLF))
+ CRLF
+ CRLF
- + "--batch_8194-cf13-1f56--";
-
- parseInvalidBatchBody(batch, MessageKeys.FORBIDDEN_HEADER);
+ + "--" + BOUNDARY + "--";
}
- private List<BatchRequestPart> parse(final InputStream in, final boolean
isStrict) throws Exception {
- final BatchParser parser = new BatchParser();
- final BatchOptions options =
BatchOptions.with().isStrict(isStrict).rawBaseUri(SERVICE_ROOT).build();
+ private List<BatchRequestPart> parse(final InputStream in, final boolean
isStrict)
+ throws BatchDeserializerException {
final List<BatchRequestPart> batchRequestParts =
- parser.parseBatchRequest(in, BOUNDARY, options);
-
- assertNotNull(batchRequestParts);
-
+ new BatchParser().parseBatchRequest(in, BOUNDARY,
+
BatchOptions.with().isStrict(isStrict).rawBaseUri(SERVICE_ROOT).build());
+ Assert.assertNotNull(batchRequestParts);
return batchRequestParts;
}
- private List<BatchRequestPart> parse(final InputStream in) throws Exception {
- return parse(in, true);
- }
-
- private List<BatchRequestPart> parse(final String batch) throws Exception {
+ private List<BatchRequestPart> parse(final String batch) throws
BatchDeserializerException {
return parse(batch, true);
}
- private List<BatchRequestPart> parse(final String batch, final boolean
isStrict) throws Exception {
+ private List<BatchRequestPart> parse(final String batch, final boolean
isStrict) throws BatchDeserializerException {
return parse(IOUtils.toInputStream(batch), isStrict);
}
- private void parseInvalidBatchBody(final String batch, final MessageKeys
key, final boolean isStrict)
- throws Exception {
- final BatchParser parser = new BatchParser();
- final BatchOptions options =
BatchOptions.with().isStrict(isStrict).rawBaseUri(SERVICE_ROOT).build();
+ private void parseInvalidBatchBody(final String batch, final MessageKeys
key, final boolean isStrict) {
try {
- parser.parseBatchRequest(IOUtils.toInputStream(batch), BOUNDARY,
options);
- fail("No exception thrown. Expect: " + key.toString());
+ new BatchParser().parseBatchRequest(IOUtils.toInputStream(batch),
BOUNDARY,
+
BatchOptions.with().isStrict(isStrict).rawBaseUri(SERVICE_ROOT).build());
+ Assert.fail("No exception thrown. Expected: " + key);
} catch (BatchDeserializerException e) {
- assertMessageKey(e, key);
+ Assert.assertEquals(key, e.getMessageKey());
}
}
- private void parseInvalidBatchBody(final String batch, final MessageKeys
key) throws Exception {
+ private void parseInvalidBatchBody(final String batch, final MessageKeys
key) {
parseInvalidBatchBody(batch, key, true);
}
- private void assertMessageKey(final BatchDeserializerException e, final
MessageKeys key) {
- assertEquals(key, e.getMessageKey());
- }
-
- private InputStream readFile(final String fileName) throws Exception {
+ private InputStream readFile(final String fileName) throws IOException {
final InputStream in = ClassLoader.class.getResourceAsStream(fileName);
if (in == null) {
throw new IOException("Requested file '" + fileName + "' was not
found.");