You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/10/14 20:35:24 UTC
[37/39] git commit: [OLINGO-453] Batch request writer bug fix
[OLINGO-453] Batch request writer bug fix
Signed-off-by: Christian Amend <ch...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/24119a78
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/24119a78
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/24119a78
Branch: refs/heads/Olingo-129_PocJpaDataStore
Commit: 24119a786547f7b8a406b5147b3bb282b663bd6d
Parents: 86c4ddc
Author: Christian Holzer <c....@sap.com>
Authored: Tue Oct 14 13:52:49 2014 +0200
Committer: Christian Amend <ch...@apache.org>
Committed: Tue Oct 14 14:01:56 2014 +0200
----------------------------------------------------------------------
.../odata2/core/batch/BatchRequestWriter.java | 30 +++++------
.../odata2/core/batch/BatchRequestTest.java | 16 +-----
.../core/batch/BatchRequestWriterTest.java | 52 +++++++++++++++++++-
3 files changed, 67 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/24119a78/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java
index a7ddfa1..9ec21cd 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchRequestWriter.java
@@ -37,7 +37,7 @@ public class BatchRequestWriter {
private static final String COLON = ":";
private static final String SP = " ";
- private static final String LF = "\r\n";
+ private static final String CRLF = "\r\n";
public static final String BOUNDARY_PREAMBLE = "changeset";
public static final String HTTP_1_1 = "HTTP/1.1";
private String batchBoundary;
@@ -50,7 +50,7 @@ public class BatchRequestWriter {
throw new IllegalArgumentException();
}
for (BatchPart batchPart : batchParts) {
- writer.append("--").append(boundary).append(LF);
+ writer.append("--").append(boundary).append(CRLF);
if (batchPart instanceof BatchChangeSet) {
appendChangeSet((BatchChangeSet) batchPart);
} else if (batchPart instanceof BatchQueryPart) {
@@ -58,8 +58,10 @@ public class BatchRequestWriter {
appendRequestBodyPart(request.getMethod(), request.getUri(), null, request.getHeaders(),
request.getContentId());
}
+
+ writer.append(CRLF); // CRLF belongs to the boundary delimiter or boundary closing delimiter
}
- writer.append(LF).append("--").append(boundary).append("--");
+ writer.append("--").append(boundary).append("--");
InputStream batchRequestBody;
batchRequestBody = new ByteArrayInputStream(BatchHelper.getBytes(writer.toString()));
return batchRequestBody;
@@ -71,41 +73,41 @@ public class BatchRequestWriter {
boundary = BatchHelper.generateBoundary(BOUNDARY_PREAMBLE);
}
writer.append(HttpHeaders.CONTENT_TYPE).append(COLON).append(SP).append(
- HttpContentType.MULTIPART_MIXED + "; boundary=" + boundary).append(LF);
+ HttpContentType.MULTIPART_MIXED + "; boundary=" + boundary).append(CRLF);
for (BatchChangeSetPart request : batchChangeSet.getChangeSetParts()) {
- writer.append(LF).append("--").append(boundary).append(LF);
+ writer.append(CRLF).append("--").append(boundary).append(CRLF);
appendRequestBodyPart(request.getMethod(), request.getUri(), request.getBody(), request.getHeaders(), request
.getContentId());
}
- writer.append(LF).append("--").append(boundary).append("--").append(LF);
+ writer.append(CRLF).append("--").append(boundary).append("--").append(CRLF);
}
private void appendRequestBodyPart(final String method, final String uri, final String body,
final Map<String, String> headers, final String contentId) {
boolean isContentLengthPresent = false;
writer.append(HttpHeaders.CONTENT_TYPE).append(COLON).append(SP).append(HttpContentType.APPLICATION_HTTP)
- .append(LF);
+ .append(CRLF);
writer.append(BatchHelper.HTTP_CONTENT_TRANSFER_ENCODING).append(COLON).append(SP)
- .append(BatchHelper.BINARY_ENCODING).append(LF);
+ .append(BatchHelper.BINARY_ENCODING).append(CRLF);
if (contentId != null) {
- writer.append(BatchHelper.HTTP_CONTENT_ID).append(COLON).append(SP).append(contentId).append(LF);
+ writer.append(BatchHelper.HTTP_CONTENT_ID).append(COLON).append(SP).append(contentId).append(CRLF);
}
String contentLength = getHeaderValue(headers, HttpHeaders.CONTENT_LENGTH);
if (contentLength != null && !contentLength.isEmpty()) {
isContentLengthPresent = true;
}
- writer.append(LF);
+ writer.append(CRLF);
writer.append(method).append(SP).append(uri).append(SP).append(HTTP_1_1);
- writer.append(LF);
+ writer.append(CRLF);
if (!isContentLengthPresent && body != null && !body.isEmpty()) {
writer.append(HttpHeaders.CONTENT_LENGTH).append(COLON).append(SP).append(BatchHelper.getBytes(body).length)
- .append(LF);
+ .append(CRLF);
}
appendHeader(headers);
+ writer.append(CRLF);
if (body != null && !body.isEmpty()) {
- writer.append(LF);
writer.append(body);
}
}
@@ -113,7 +115,7 @@ public class BatchRequestWriter {
private void appendHeader(final Map<String, String> headers) {
for (Map.Entry<String, String> headerMap : headers.entrySet()) {
String name = headerMap.getKey();
- writer.append(name).append(COLON).append(SP).append(headerMap.getValue()).append(LF);
+ writer.append(name).append(COLON).append(SP).append(headerMap.getValue()).append(CRLF);
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/24119a78/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java
index 116bfd7..f526920 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestTest.java
@@ -41,7 +41,6 @@ import org.apache.olingo.odata2.api.ep.EntityProviderBatchProperties;
import org.apache.olingo.odata2.core.PathInfoImpl;
import org.apache.olingo.odata2.core.batch.v2.BatchParser;
import org.apache.olingo.odata2.testutil.helper.StringHelper;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -132,19 +131,6 @@ public class BatchRequestTest {
}
@Test
- /*
- * --batch_123
- * Content-Type: application/http
- * Content-Transfer-Encoding: binary
- * Content-Id: 000
- *
- * GET Employees HTTP/1.1
- * Accept: application/json <- Missing CRLF => Even ABAP can`t understand this request
- * --batch_123
- * ...
- * ....
- */
- @Ignore
public void testBatchWithGetAndPost() throws BatchException, IOException {
List<BatchPart> batch = new ArrayList<BatchPart>();
Map<String, String> headers = new HashMap<String, String>();
@@ -176,7 +162,7 @@ public class BatchRequestTest {
assertTrue(requestBody.contains("GET Employees HTTP/1.1"));
assertTrue(requestBody.contains("POST Employees HTTP/1.1"));
assertTrue(requestBody.contains(body));
- assertEquals(23, batchRequestStream.linesCount());
+ assertEquals(25, batchRequestStream.linesCount());
String contentType = "multipart/mixed; boundary=" + BOUNDARY;
BatchParser parser = new BatchParser(contentType, parseProperties, true);
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/24119a78/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java
index 051e1da..e8f7cd4 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -34,6 +35,8 @@ import org.apache.olingo.odata2.api.client.batch.BatchChangeSet;
import org.apache.olingo.odata2.api.client.batch.BatchChangeSetPart;
import org.apache.olingo.odata2.api.client.batch.BatchPart;
import org.apache.olingo.odata2.api.client.batch.BatchQueryPart;
+import org.apache.olingo.odata2.core.batch.v2.BufferedReaderIncludingLineEndings;
+import org.apache.olingo.odata2.core.batch.v2.BufferedReaderIncludingLineEndings.Line;
import org.apache.olingo.odata2.testutil.helper.StringHelper;
import org.junit.Test;
@@ -43,6 +46,7 @@ public class BatchRequestWriterTest {
private static final String GET = "GET";
private static final String PUT = "PUT";
private static final String BOUNDARY = "batch_123";
+ private static final Object CRLF = "\r\n";
private void checkMimeHeaders(final String requestBody) {
assertTrue(requestBody.contains("Content-Type: application/http"));
@@ -67,7 +71,7 @@ public class BatchRequestWriterTest {
assertTrue(requestBody.contains("--batch_"));
assertTrue(requestBody.contains("GET Employees HTTP/1.1"));
checkHeaders(headers, requestBody);
- assertEquals(8, StringHelper.countLines(requestBody));
+ assertEquals(9, StringHelper.countLines(requestBody));
}
@Test
@@ -122,7 +126,7 @@ public class BatchRequestWriterTest {
BatchRequestWriter writer = new BatchRequestWriter();
InputStream batchRequest = writer.writeBatchRequest(batch, BOUNDARY);
- String requestBody = StringHelper.inputStreamToString(batchRequest);
+ String requestBody = StringHelper.inputStreamToString(batchRequest, true);
assertNotNull(batchRequest);
checkMimeHeaders(requestBody);
@@ -134,6 +138,50 @@ public class BatchRequestWriterTest {
}
@Test
+ public void testGetRequest() throws IOException {
+ List<BatchPart> batch = new ArrayList<BatchPart>();
+
+ Map<String, String> headers = new HashMap<String, String>();
+ headers.put("Accept", "application/json");
+ BatchPart request = BatchQueryPart.method(GET).uri("Employees").headers(headers).contentId("123").build();
+
+ batch.add(request);
+ batch.add(request);
+
+ BatchRequestWriter writer = new BatchRequestWriter();
+ InputStream batchRequest = writer.writeBatchRequest(batch, BOUNDARY);
+
+ BufferedReaderIncludingLineEndings reader =
+ new BufferedReaderIncludingLineEndings(new InputStreamReader(batchRequest));
+ List<Line> lines = reader.toList();
+ reader.close();
+
+ int line = 0;
+ assertEquals("--" + BOUNDARY + CRLF, lines.get(line++).toString());
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(line++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(line++).toString());
+ assertEquals("Content-Id: 123" + CRLF, lines.get(line++).toString());
+ assertEquals(CRLF, lines.get(line++).toString());
+ assertEquals("GET Employees HTTP/1.1" + CRLF, lines.get(line++).toString());
+ assertEquals("Accept: application/json" + CRLF, lines.get(line++).toString());
+ assertEquals(CRLF, lines.get(line++).toString()); // Belongs to the GET request [OData Protocol - 2.2.7.2.1]
+
+ assertEquals(CRLF, lines.get(line++).toString()); // Belongs conceptually to the boundary [RFC 2046 - 5.1.1]
+ assertEquals("--" + BOUNDARY + CRLF, lines.get(line++).toString());
+ assertEquals("Content-Type: application/http" + CRLF, lines.get(line++).toString());
+ assertEquals("Content-Transfer-Encoding: binary" + CRLF, lines.get(line++).toString());
+ assertEquals("Content-Id: 123" + CRLF, lines.get(line++).toString());
+ assertEquals(CRLF, lines.get(line++).toString());
+ assertEquals("GET Employees HTTP/1.1" + CRLF, lines.get(line++).toString());
+ assertEquals("Accept: application/json" + CRLF, lines.get(line++).toString());
+ assertEquals(CRLF, lines.get(line++).toString()); // Belongs to the GET request [OData Protocol - 2.2.7.2.1]
+
+ assertEquals(CRLF, lines.get(line++).toString()); // Belongs conceptually to the boundary [RFC 2046 - 5.1.1]
+ assertEquals("--" + BOUNDARY + "--", lines.get(line++).toString());
+ assertEquals(19, lines.size());
+ }
+
+ @Test
public void testChangeSetWithContentIdReferencing() throws BatchException, IOException {
List<BatchPart> batch = new ArrayList<BatchPart>();