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 2015/07/19 09:03:48 UTC
olingo-odata2 git commit: [OLINGO-733] Code clean up and more tests
Repository: olingo-odata2
Updated Branches:
refs/heads/OLINGO-733_BatchFix 243f707b3 -> cc70e8a39
[OLINGO-733] Code clean up and more tests
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/cc70e8a3
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/cc70e8a3
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/cc70e8a3
Branch: refs/heads/OLINGO-733_BatchFix
Commit: cc70e8a390c590409fa3cf952320cab7c53f0f23
Parents: 243f707
Author: mibo <mi...@mirb.de>
Authored: Sun Jul 19 08:17:13 2015 +0200
Committer: mibo <mi...@mirb.de>
Committed: Sun Jul 19 08:17:13 2015 +0200
----------------------------------------------------------------------
.../olingo/odata2/core/ODataResponseImpl.java | 2 -
.../core/batch/BatchChangeSetPartImpl.java | 13 +-
.../olingo/odata2/core/batch/BatchHelper.java | 35 +---
.../odata2/core/batch/BatchResponseWriter.java | 27 ++-
.../odata2/core/batch/v2/BatchParser.java | 1 -
.../v2/BufferedReaderIncludingLineEndings.java | 35 ----
.../olingo/odata2/core/ODataResponseTest.java | 2 -
.../core/batch/BatchRequestWriterITTest.java | 59 +++++--
.../core/batch/BatchResponseWriterITTest.java | 171 +++++++++++++++++++
.../core/batch/BatchResponseWriterTest.java | 39 ++---
10 files changed, 262 insertions(+), 122 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataResponseImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataResponseImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataResponseImpl.java
index dbfe46a..0bf58ee 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataResponseImpl.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataResponseImpl.java
@@ -20,14 +20,12 @@ package org.apache.olingo.odata2.core;
import java.io.Closeable;
import java.io.IOException;
-import java.io.InputStream;
import java.util.HashMap;
import java.util.Set;
import org.apache.olingo.odata2.api.commons.HttpHeaders;
import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
import org.apache.olingo.odata2.api.processor.ODataResponse;
-import org.apache.olingo.odata2.core.batch.BatchHelper;
/**
*
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchChangeSetPartImpl.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchChangeSetPartImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchChangeSetPartImpl.java
index 1c12a42..b1d83ab 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchChangeSetPartImpl.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchChangeSetPartImpl.java
@@ -18,19 +18,14 @@
******************************************************************************/
package org.apache.olingo.odata2.core.batch;
+import org.apache.olingo.odata2.api.client.batch.BatchChangeSetPart;
+
import java.nio.charset.Charset;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Locale;
import java.util.Map;
-import org.apache.olingo.odata2.api.client.batch.BatchChangeSetPart;
-import org.apache.olingo.odata2.api.commons.HttpHeaders;
-import org.apache.olingo.odata2.core.commons.ContentType;
-
public class BatchChangeSetPartImpl extends BatchChangeSetPart {
- private static final Charset DEFAULT_CHARSET = Charset.forName("utf-8");
- private static final String CONTENT_TYPE = "content-type";
private String method;
private Map<String, String> headers = new HashMap<String, String>();
private String body;
@@ -98,10 +93,6 @@ public class BatchChangeSetPartImpl extends BatchChangeSetPart {
@Override
public BatchChangeSetPartBuilder headers(final Map<String, String> headers) {
-// this.headers = new HashMap<String, String>(headers.size());
-// for (Map.Entry<String, String> entry : headers.entrySet()) {
-// this.headers.put(entry.getKey().toLowerCase(Locale.ENGLISH), entry.getValue());
-// }
this.headers = headers;
return this;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchHelper.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchHelper.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchHelper.java
index 4b7434e..41ad0be 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchHelper.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchHelper.java
@@ -18,6 +18,12 @@
******************************************************************************/
package org.apache.olingo.odata2.core.batch;
+import org.apache.olingo.odata2.api.client.batch.BatchChangeSetPart;
+import org.apache.olingo.odata2.api.commons.HttpHeaders;
+import org.apache.olingo.odata2.api.processor.ODataResponse;
+import org.apache.olingo.odata2.core.commons.ContentType;
+import org.apache.olingo.odata2.core.exception.ODataRuntimeException;
+
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -28,17 +34,9 @@ import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;
import java.nio.charset.Charset;
-import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
-import org.apache.olingo.odata2.api.client.batch.BatchChangeSetPart;
-import org.apache.olingo.odata2.api.commons.HttpHeaders;
-import org.apache.olingo.odata2.api.processor.ODataResponse;
-import org.apache.olingo.odata2.core.ODataResponseImpl;
-import org.apache.olingo.odata2.core.commons.ContentType;
-import org.apache.olingo.odata2.core.exception.ODataRuntimeException;
-
public class BatchHelper {
public static final String BINARY_ENCODING = "binary";
@@ -62,27 +60,6 @@ public class BatchHelper {
}
}
- public static String convertToString(ODataResponseImpl oDataResponse) {
- Object entity = oDataResponse.getEntity();
-
- if(entity == null) {
- return null;
- } else if(entity instanceof String) {
- return (String) entity;
- } else if(entity instanceof byte[]) {
- String contentHeader = oDataResponse.getContentHeader();
- Charset charset = getCharset(contentHeader);
- return convertByteArray((byte[]) entity, charset);
- } else if(entity instanceof InputStream) {
- String contentHeader = oDataResponse.getContentHeader();
- Charset charset = getCharset(contentHeader);
- Body b = new Body(oDataResponse);
- return convertByteArray(b.getContent(), charset);
- }
- throw new ODataRuntimeException("Unable to convert ODataResponse entity of type '" +
- entity.getClass() + "' to String.");
- }
-
public static Charset extractCharset(Map<String, String> headers) {
String contentType = null;
for (Map.Entry<String, String> s : headers.entrySet()) {
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java
index bff2f03..7ca0260 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/BatchResponseWriter.java
@@ -31,26 +31,37 @@ public class BatchResponseWriter {
private static final String COLON = ":";
private static final String SP = " ";
private static final String CRLF = "\r\n";
+ private final boolean writeEntityAsInputStream;
private BatchHelper.BodyBuilder writer = new BatchHelper.BodyBuilder();
-// private static final Charset DEFAULT_CHARSET = BatchHelper.DEFAULT_CHARSET;
- private final boolean writeEntityAsUtf8String;
+ /**
+ * Creates a BatchResponseWriter which write the <code>entity</code> as a String with
+ * default charset (see BatchHelper.DEFAULT_CHARSET).
+ */
public BatchResponseWriter() {
- this(true);
+ this(false);
}
- public BatchResponseWriter(boolean writeEntityAsUtf8String) {
- this.writeEntityAsUtf8String = writeEntityAsUtf8String;
+ /**
+ * Creates a BatchResponseWriter
+ *
+ * @param writeEntityAsInputStream
+ * if <code>true</code> the <code>entity</code> is set a InputStream.
+ * if <code>false</code> the <code>entity</code> is set a String with
+ * default charset (see BatchHelper.DEFAULT_CHARSET).
+ */
+ public BatchResponseWriter(boolean writeEntityAsInputStream) {
+ this.writeEntityAsInputStream = writeEntityAsInputStream;
}
public ODataResponse writeResponse(final List<BatchResponsePart> batchResponseParts) throws BatchException {
String boundary = BatchHelper.generateBoundary("batch");
appendResponsePart(batchResponseParts, boundary);
final Object batchResponseBody;
- if(writeEntityAsUtf8String) {
- batchResponseBody = writer.getContentAsString(BatchHelper.DEFAULT_CHARSET);
- } else {
+ if(writeEntityAsInputStream) {
batchResponseBody = writer.getContentAsStream();
+ } else {
+ batchResponseBody = writer.getContentAsString(BatchHelper.DEFAULT_CHARSET);
}
return ODataResponse.entity(batchResponseBody).status(HttpStatusCodes.ACCEPTED)
.header(HttpHeaders.CONTENT_TYPE, HttpContentType.MULTIPART_MIXED + "; boundary=" + boundary)
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParser.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParser.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParser.java
index c1c2713..f872627 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParser.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BatchParser.java
@@ -20,7 +20,6 @@ package org.apache.olingo.odata2.core.batch.v2;
import java.io.IOException;
import java.io.InputStream;
-import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java
index a8a8af9..d9a216c 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/batch/v2/BufferedReaderIncludingLineEndings.java
@@ -226,39 +226,4 @@ public class BufferedReaderIncludingLineEndings {
return String.valueOf(state);
}
}
-
-
-// @Override
-// public int hashCode() {
-// final int prime = 31;
-// int result = 1;
-// result = prime * result + ((content == null) ? 0 : content.hashCode());
-// result = prime * result + lineNumber;
-// return result;
-// }
-//
-// @Override
-// public boolean equals(final Object obj) {
-// if (this == obj) {
-// return true;
-// }
-// if (obj == null) {
-// return false;
-// }
-// if (getClass() != obj.getClass()) {
-// return false;
-// }
-// Line other = (Line) obj;
-// if (content == null) {
-// if (other.content != null) {
-// return false;
-// }
-// } else if (!content.equals(other.content)) {
-// return false;
-// }
-// if (lineNumber != other.lineNumber) {
-// return false;
-// }
-// return true;
-// }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java
index 25c65b5..f5fe501 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataResponseTest.java
@@ -24,7 +24,6 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashSet;
@@ -32,7 +31,6 @@ import java.util.HashSet;
import org.apache.olingo.odata2.api.commons.HttpContentType;
import org.apache.olingo.odata2.api.commons.HttpHeaders;
import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
-import org.apache.olingo.odata2.api.exception.ODataException;
import org.apache.olingo.odata2.api.processor.ODataResponse;
import org.apache.olingo.odata2.testutil.fit.BaseTest;
import org.apache.olingo.odata2.testutil.helper.StringHelper;
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterITTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterITTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterITTest.java
index afcf26b..1faf807 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterITTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchRequestWriterITTest.java
@@ -42,6 +42,7 @@ import org.apache.olingo.odata2.api.processor.ODataRequest;
import org.apache.olingo.odata2.core.PathInfoImpl;
import org.apache.olingo.odata2.core.batch.v2.BatchParser;
import org.apache.olingo.odata2.core.batch.v2.BufferedReaderIncludingLineEndings;
+import org.apache.olingo.odata2.testutil.helper.StringHelper;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -128,6 +129,53 @@ public class BatchRequestWriterITTest {
}
@Test
+ public void testChangeSetIso() throws Exception {
+ 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("000").build();
+ batch.add(request);
+
+ Map<String, String> changeSetHeaders = new HashMap<String, String>();
+ String charset = "iso-8859-1";
+ changeSetHeaders.put("content-type", "application/json; charset=" + charset);
+ String body = "äöü/9j/4AAQSkZJRgABAQEBLAEsAAD/4RM0RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEA";
+ BatchChangeSetPart changeRequest = BatchChangeSetPart.method(POST)
+ .uri("Employees")
+ .body(body)
+ .headers(changeSetHeaders)
+ .contentId("111")
+ .build();
+ BatchChangeSet changeSet = BatchChangeSet.newBuilder().build();
+ changeSet.add(changeRequest);
+ batch.add(changeSet);
+ BatchRequestWriter writer = new BatchRequestWriter();
+ InputStream stream = writer.writeBatchRequest(batch, BOUNDARY);
+
+ final List<BatchRequestPart> parsedRequestParts = parseBatchRequest(stream);
+ assertEquals(2, parsedRequestParts.size());
+
+ // Get Request
+ final BatchRequestPart partGet = parsedRequestParts.get(0);
+ assertFalse(partGet.isChangeSet());
+ assertEquals(1, partGet.getRequests().size());
+ final ODataRequest oDataRequestGet = partGet.getRequests().get(0);
+ assertEquals("Employees", oDataRequestGet.getPathInfo().getODataSegments().get(0).getPath());
+ assertEquals("application/json", oDataRequestGet.getAcceptHeaders().get(0));
+
+ // Change set
+ final BatchRequestPart partChangeSet = parsedRequestParts.get(1);
+ assertTrue(partChangeSet.isChangeSet());
+ assertEquals(1, partChangeSet.getRequests().size());
+ final ODataRequest oDataRequestPost = partChangeSet.getRequests().get(0);
+ assertEquals("Employees", oDataRequestGet.getPathInfo().getODataSegments().get(0).getPath());
+ assertEquals("111", oDataRequestPost.getRequestHeaderValue(BatchHelper.MIME_HEADER_CONTENT_ID));
+ assertEquals(body, streamToString(oDataRequestPost.getBody()));
+ assertEquals("application/json; charset=" + charset,
+ oDataRequestPost.getRequestHeaderValue(HttpHeaders.CONTENT_TYPE));
+ }
+
+ @Test
public void testTwoChangeSets() throws Exception {
List<BatchPart> batch = new ArrayList<BatchPart>();
@@ -229,15 +277,6 @@ public class BatchRequestWriterITTest {
}
private String streamToString(final InputStream in) throws IOException {
- final BufferedReaderIncludingLineEndings reader = new BufferedReaderIncludingLineEndings(in);
- final StringBuilder builder = new StringBuilder();
- String line;
-
- while ((line = reader.readLine()) != null) {
- builder.append(line);
- }
-
- reader.close();
- return builder.toString();
+ return StringHelper.toStream(in).asString();
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterITTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterITTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterITTest.java
index df84f39..23ab4ea 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterITTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterITTest.java
@@ -31,6 +31,7 @@ import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
import org.apache.olingo.odata2.api.processor.ODataResponse;
import org.apache.olingo.odata2.core.batch.v2.BatchParser;
import org.apache.olingo.odata2.core.commons.ContentType;
+import org.apache.olingo.odata2.testutil.helper.StringHelper;
import org.junit.Test;
public class BatchResponseWriterITTest {
@@ -176,4 +177,174 @@ public class BatchResponseWriterITTest {
assertEquals("4", parserResponse.getHeaders().get(HttpHeaders.CONTENT_LENGTH));
assertEquals("Test", parserResponse.getBody());
}
+
+ @Test
+ public void testChangeSetUtf() throws Exception {
+ List<BatchResponsePart> parts = new ArrayList<BatchResponsePart>();
+ String charset= "utf-8";
+ StringHelper.Stream stream = StringHelper.toStream("Wälter Wünter", charset);
+ ODataResponse response = ODataResponse.entity(stream.asStream())
+ .status(HttpStatusCodes.OK)
+ .contentHeader("application/json; charset=" + charset)
+ .build();
+ List<ODataResponse> responses = new ArrayList<ODataResponse>(1);
+ responses.add(response);
+ parts.add(BatchResponsePart.responses(responses).changeSet(false).build());
+
+ ODataResponse changeSetResponse =
+ ODataResponse.status(HttpStatusCodes.NO_CONTENT).header(BatchHelper.MIME_HEADER_CONTENT_ID, "1").build();
+ responses = new ArrayList<ODataResponse>(2);
+ ODataResponse changeSetResponseEntity =
+ ODataResponse.status(HttpStatusCodes.OK).contentHeader(ContentType.APPLICATION_JSON.toContentTypeString())
+ .header(BatchHelper.MIME_HEADER_CONTENT_ID, "2")
+ .entity("Test\r\n").build();
+ ODataResponse changeSetResponseEntity2 =
+ ODataResponse.status(HttpStatusCodes.OK).contentHeader(ContentType.APPLICATION_JSON.toContentTypeString())
+ .header(BatchHelper.MIME_HEADER_CONTENT_ID, "2")
+ .entity("Test\n").build();
+ ODataResponse changeSetResponseEntity3 =
+ ODataResponse.status(HttpStatusCodes.OK).contentHeader(ContentType.APPLICATION_JSON.toContentTypeString())
+ .header(BatchHelper.MIME_HEADER_CONTENT_ID, "2")
+ .entity("Test").build();
+ responses.add(changeSetResponse);
+ responses.add(changeSetResponseEntity);
+ responses.add(changeSetResponseEntity2);
+ responses.add(changeSetResponseEntity3);
+
+ parts.add(BatchResponsePart.responses(responses).changeSet(true).build());
+
+ BatchResponseWriter writer = new BatchResponseWriter(true);
+ ODataResponse batchResponse = writer.writeResponse(parts);
+
+ assertEquals(202, batchResponse.getStatus().getStatusCode());
+ StringHelper.Stream responseStream = StringHelper.toStream(batchResponse.getEntityAsStream());
+ String body = responseStream.asString(charset);
+
+ // Get boundary
+ int lineEndingIndex = body.indexOf("\r\n");
+ String boundary = body.substring(2, lineEndingIndex);
+
+ // Parse response and test outputs
+ final BatchParser parser = new BatchParser("multipart/mixed;boundary=" + boundary, true);
+ List<BatchSingleResponse> parserResponses = parser.parseBatchResponse(responseStream.asStream());
+ assertEquals(5, parserResponses.size());
+
+ BatchSingleResponse parserResponse = parserResponses.get(0);
+ assertEquals("200", parserResponse.getStatusCode());
+ assertEquals("OK", parserResponse.getStatusInfo());
+ assertEquals("application/json; charset=" + charset, parserResponse.getHeaders().get(HttpHeaders.CONTENT_TYPE));
+ assertEquals("15", parserResponse.getHeaders().get(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("Wälter Wünter", parserResponse.getBody());
+
+ parserResponse = parserResponses.get(1);
+ assertEquals("204", parserResponse.getStatusCode());
+ assertEquals("1", parserResponse.getContentId());
+ assertEquals("No Content", parserResponse.getStatusInfo());
+
+ parserResponse = parserResponses.get(2);
+ assertEquals("200", parserResponse.getStatusCode());
+ assertEquals("OK", parserResponse.getStatusInfo());
+ assertEquals("application/json", parserResponse.getHeaders().get(HttpHeaders.CONTENT_TYPE));
+ assertEquals("6", parserResponse.getHeaders().get(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("Test\r\n", parserResponse.getBody());
+
+ parserResponse = parserResponses.get(3);
+ assertEquals("200", parserResponse.getStatusCode());
+ assertEquals("OK", parserResponse.getStatusInfo());
+ assertEquals("application/json", parserResponse.getHeaders().get(HttpHeaders.CONTENT_TYPE));
+ assertEquals("5", parserResponse.getHeaders().get(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("Test\n", parserResponse.getBody());
+
+ parserResponse = parserResponses.get(4);
+ assertEquals("200", parserResponse.getStatusCode());
+ assertEquals("OK", parserResponse.getStatusInfo());
+ assertEquals("application/json", parserResponse.getHeaders().get(HttpHeaders.CONTENT_TYPE));
+ assertEquals("4", parserResponse.getHeaders().get(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("Test", parserResponse.getBody());
+ }
+
+ @Test
+ public void testChangeSetIso() throws Exception {
+ List<BatchResponsePart> parts = new ArrayList<BatchResponsePart>();
+ String charset= "iso-8859-1";
+ StringHelper.Stream stream = StringHelper.toStream("Wälter Wünter", charset);
+ ODataResponse response = ODataResponse.entity(stream.asStream())
+ .status(HttpStatusCodes.OK)
+ .contentHeader("application/json; charset=" + charset)
+ .build();
+ List<ODataResponse> responses = new ArrayList<ODataResponse>(1);
+ responses.add(response);
+ parts.add(BatchResponsePart.responses(responses).changeSet(false).build());
+
+ ODataResponse changeSetResponse =
+ ODataResponse.status(HttpStatusCodes.NO_CONTENT).header(BatchHelper.MIME_HEADER_CONTENT_ID, "1").build();
+ responses = new ArrayList<ODataResponse>(2);
+ ODataResponse changeSetResponseEntity =
+ ODataResponse.status(HttpStatusCodes.OK).contentHeader(ContentType.APPLICATION_JSON.toContentTypeString())
+ .header(BatchHelper.MIME_HEADER_CONTENT_ID, "2")
+ .entity("Test\r\n").build();
+ ODataResponse changeSetResponseEntity2 =
+ ODataResponse.status(HttpStatusCodes.OK).contentHeader(ContentType.APPLICATION_JSON.toContentTypeString())
+ .header(BatchHelper.MIME_HEADER_CONTENT_ID, "2")
+ .entity("Test\n").build();
+ ODataResponse changeSetResponseEntity3 =
+ ODataResponse.status(HttpStatusCodes.OK).contentHeader(ContentType.APPLICATION_JSON.toContentTypeString())
+ .header(BatchHelper.MIME_HEADER_CONTENT_ID, "2")
+ .entity("Test").build();
+ responses.add(changeSetResponse);
+ responses.add(changeSetResponseEntity);
+ responses.add(changeSetResponseEntity2);
+ responses.add(changeSetResponseEntity3);
+
+ parts.add(BatchResponsePart.responses(responses).changeSet(true).build());
+
+ BatchResponseWriter writer = new BatchResponseWriter(true);
+ ODataResponse batchResponse = writer.writeResponse(parts);
+
+ assertEquals(202, batchResponse.getStatus().getStatusCode());
+ StringHelper.Stream responseStream = StringHelper.toStream(batchResponse.getEntityAsStream());
+ String body = responseStream.asString(charset);
+
+ // Get boundary
+ int lineEndingIndex = body.indexOf("\r\n");
+ String boundary = body.substring(2, lineEndingIndex);
+
+ // Parse response and test outputs
+ final BatchParser parser = new BatchParser("multipart/mixed;boundary=" + boundary, true);
+ List<BatchSingleResponse> parserResponses = parser.parseBatchResponse(responseStream.asStream());
+ assertEquals(5, parserResponses.size());
+
+ BatchSingleResponse parserResponse = parserResponses.get(0);
+ assertEquals("200", parserResponse.getStatusCode());
+ assertEquals("OK", parserResponse.getStatusInfo());
+ assertEquals("application/json; charset=" + charset, parserResponse.getHeaders().get(HttpHeaders.CONTENT_TYPE));
+ assertEquals("13", parserResponse.getHeaders().get(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("Wälter Wünter", parserResponse.getBody());
+
+ parserResponse = parserResponses.get(1);
+ assertEquals("204", parserResponse.getStatusCode());
+ assertEquals("1", parserResponse.getContentId());
+ assertEquals("No Content", parserResponse.getStatusInfo());
+
+ parserResponse = parserResponses.get(2);
+ assertEquals("200", parserResponse.getStatusCode());
+ assertEquals("OK", parserResponse.getStatusInfo());
+ assertEquals("application/json", parserResponse.getHeaders().get(HttpHeaders.CONTENT_TYPE));
+ assertEquals("6", parserResponse.getHeaders().get(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("Test\r\n", parserResponse.getBody());
+
+ parserResponse = parserResponses.get(3);
+ assertEquals("200", parserResponse.getStatusCode());
+ assertEquals("OK", parserResponse.getStatusInfo());
+ assertEquals("application/json", parserResponse.getHeaders().get(HttpHeaders.CONTENT_TYPE));
+ assertEquals("5", parserResponse.getHeaders().get(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("Test\n", parserResponse.getBody());
+
+ parserResponse = parserResponses.get(4);
+ assertEquals("200", parserResponse.getStatusCode());
+ assertEquals("OK", parserResponse.getStatusInfo());
+ assertEquals("application/json", parserResponse.getHeaders().get(HttpHeaders.CONTENT_TYPE));
+ assertEquals("4", parserResponse.getHeaders().get(HttpHeaders.CONTENT_LENGTH));
+ assertEquals("Test", parserResponse.getBody());
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/cc70e8a3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
index 40c0789..128f2c8 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/batch/BatchResponseWriterTest.java
@@ -18,18 +18,6 @@
******************************************************************************/
package org.apache.olingo.odata2.core.batch;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.olingo.odata2.api.batch.BatchException;
import org.apache.olingo.odata2.api.batch.BatchResponsePart;
import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
import org.apache.olingo.odata2.api.exception.ODataException;
@@ -39,6 +27,14 @@ import org.apache.olingo.odata2.core.batch.v2.Line;
import org.apache.olingo.odata2.testutil.helper.StringHelper;
import org.junit.Test;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
public class BatchResponseWriterTest {
private static final String CRLF = "\r\n";
@@ -64,11 +60,7 @@ public class BatchResponseWriterTest {
assertEquals(202, batchResponse.getStatus().getStatusCode());
assertNotNull(batchResponse.getEntity());
-// StringHelper.Stream stream = StringHelper.toStream((InputStream) batchResponse.getEntity());
-// String body = stream.toString();
-// BufferedReaderIncludingLineEndings reader =
-// new BufferedReaderIncludingLineEndings(new InputStreamReader(new ByteArrayInputStream(body.getBytes())));
BufferedReaderIncludingLineEndings reader =
new BufferedReaderIncludingLineEndings(batchResponse.getEntityAsStream());
List<Line> lines = reader.toLineList();
@@ -96,7 +88,7 @@ public class BatchResponseWriterTest {
assertEquals(CRLF, lines.get(index++).toString());
assertEquals(CRLF, lines.get(index++).toString());
assertTrue(lines.get(index++).toString().startsWith("--changeset"));
- assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index).toString().startsWith("--batch"));
}
@Test
@@ -129,7 +121,7 @@ public class BatchResponseWriterTest {
assertEquals("Content-Length: 13" + CRLF, lines.get(index++).toString());
assertEquals(CRLF, lines.get(index++).toString());
assertEquals("Walter Winter" + CRLF, lines.get(index++).toString());
- assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index).toString().startsWith("--batch"));
}
@Test
@@ -163,7 +155,7 @@ public class BatchResponseWriterTest {
assertEquals(CRLF, lines.get(index++).toString());
assertEquals(CRLF, lines.get(index++).toString());
assertTrue(lines.get(index++).toString().startsWith("--changeset"));
- assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index).toString().startsWith("--batch"));
}
@Test
@@ -201,7 +193,7 @@ public class BatchResponseWriterTest {
assertEquals("Content-Length: 13" + CRLF, lines.get(index++).toString());
assertEquals(CRLF, lines.get(index++).toString());
assertEquals("Walter Winter" + CRLF, lines.get(index++).toString());
- assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index).toString().startsWith("--batch"));
}
@Test
@@ -209,7 +201,6 @@ public class BatchResponseWriterTest {
List<BatchResponsePart> parts = new ArrayList<BatchResponsePart>();
StringHelper.Stream stream = StringHelper.toStream("Wälter Winter", "iso-8859-1");
ODataResponse response =
-// ODataResponse.entity(stream.asString("iso-8859-1"))
ODataResponse.entity(stream.asStream())
.contentHeader("application/json; charset=iso-8859-1")
.status(HttpStatusCodes.OK)
@@ -217,7 +208,7 @@ public class BatchResponseWriterTest {
List<ODataResponse> responses = new ArrayList<ODataResponse>(1);
responses.add(response);
parts.add(BatchResponsePart.responses(responses).changeSet(false).build());
- BatchResponseWriter writer = new BatchResponseWriter(false);
+ BatchResponseWriter writer = new BatchResponseWriter(true);
ODataResponse batchResponse = writer.writeResponse(parts);
assertEquals(202, batchResponse.getStatus().getStatusCode());
@@ -238,7 +229,7 @@ public class BatchResponseWriterTest {
assertEquals("Content-Length: 13" + CRLF, lines.get(index++).toString());
assertEquals(CRLF, lines.get(index++).toString());
assertEquals("Wälter Winter" + CRLF, lines.get(index++).toString());
- assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index).toString().startsWith("--batch"));
}
@Test
@@ -276,6 +267,6 @@ public class BatchResponseWriterTest {
assertEquals("Content-Length: 14" + CRLF, lines.get(index++).toString());
assertEquals(CRLF, lines.get(index++).toString());
assertEquals("Wälter Winter" + CRLF, lines.get(index++).toString());
- assertTrue(lines.get(index++).toString().startsWith("--batch"));
+ assertTrue(lines.get(index).toString().startsWith("--batch"));
}
}