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/HttpRequestStatusLineTest.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLineTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLineTest.java index 86000ce..9e1f160 100644 --- a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLineTest.java +++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/batch/HttpRequestStatusLineTest.java @@ -34,71 +34,80 @@ public class HttpRequestStatusLineTest { private String serviceResolutionUri = ""; @Test - public void testAbsolute() throws BatchDeserializerException { - final HttpRequestStatusLine line = parse("http://localhost/odata/Employee?$top=2"); + public void absolute() throws BatchDeserializerException { + final HttpRequestStatusLine line = parse("http://localhost/odata/ESAllPrim?$top=2"); assertEquals("$top=2", line.getRawQueryPath()); - assertEquals("/Employee", line.getRawODataPath()); - assertEquals("http://localhost/odata/Employee?$top=2", line.getRawRequestUri()); + assertEquals("/ESAllPrim", line.getRawODataPath()); + assertEquals(baseUri + "/ESAllPrim?$top=2", line.getRawRequestUri()); assertEquals(baseUri, line.getRawBaseUri()); assertEquals(serviceResolutionUri, line.getRawServiceResolutionUri()); } @Test - public void testAbsoluteWithRelativePath() throws BatchDeserializerException { - final HttpRequestStatusLine line = parse("http://localhost/odata/../../Employee?$top=2"); - assertEquals("/../../Employee", line.getRawODataPath()); + public void absoluteWithRelativePath() throws BatchDeserializerException { + final HttpRequestStatusLine line = parse("http://localhost/odata/../../ESAllPrim?$top=2"); + assertEquals("/../../ESAllPrim", line.getRawODataPath()); assertEquals("$top=2", line.getRawQueryPath()); - assertEquals("http://localhost/odata/../../Employee?$top=2", line.getRawRequestUri()); + assertEquals(baseUri + "/../../ESAllPrim?$top=2", line.getRawRequestUri()); assertEquals(baseUri, line.getRawBaseUri()); assertEquals(serviceResolutionUri, line.getRawServiceResolutionUri()); } @Test - public void testRelativeWithDots() throws BatchDeserializerException { - final HttpRequestStatusLine line = parse("../../Employee?$top=2"); - assertEquals("/../../Employee", line.getRawODataPath()); - assertEquals("$top=2", line.getRawQueryPath()); - assertEquals("http://localhost/odata/../../Employee?$top=2", line.getRawRequestUri()); + public void absolutePath() throws BatchDeserializerException { + final HttpRequestStatusLine line = parse("/odata/ESAllPrim"); + assertEquals("/ESAllPrim", line.getRawODataPath()); + assertEquals(baseUri + "/ESAllPrim", line.getRawRequestUri()); assertEquals(baseUri, line.getRawBaseUri()); assertEquals(serviceResolutionUri, line.getRawServiceResolutionUri()); } @Test - public void testRelative() throws BatchDeserializerException { - final HttpRequestStatusLine line = parse("Employee?$top=2"); + public void relativeWithDots() throws BatchDeserializerException { + final HttpRequestStatusLine line = parse("../../ESAllPrim?$top=2"); + assertEquals("/../../ESAllPrim", line.getRawODataPath()); assertEquals("$top=2", line.getRawQueryPath()); - assertEquals("/Employee", line.getRawODataPath()); - assertEquals("http://localhost/odata/Employee?$top=2", line.getRawRequestUri()); + assertEquals(baseUri + "/../../ESAllPrim?$top=2", line.getRawRequestUri()); assertEquals(baseUri, line.getRawBaseUri()); assertEquals(serviceResolutionUri, line.getRawServiceResolutionUri()); } @Test - public void testRelativeMultipleSegements() throws BatchDeserializerException { - final HttpRequestStatusLine line = parse("Employee/Manager/EmployeeName?$top=2"); + public void relative() throws BatchDeserializerException { + final HttpRequestStatusLine line = parse("ESAllPrim?$top=2"); assertEquals("$top=2", line.getRawQueryPath()); - assertEquals("/Employee/Manager/EmployeeName", line.getRawODataPath()); - assertEquals("http://localhost/odata/Employee/Manager/EmployeeName?$top=2", line.getRawRequestUri()); + assertEquals("/ESAllPrim", line.getRawODataPath()); + assertEquals(baseUri + "/ESAllPrim?$top=2", line.getRawRequestUri()); + assertEquals(baseUri, line.getRawBaseUri()); + assertEquals(serviceResolutionUri, line.getRawServiceResolutionUri()); + } + + @Test + public void relativeMultipleSegments() throws BatchDeserializerException { + final HttpRequestStatusLine line = parse("ESKeyNav(1)/NavPropertyETTwoKeyNavOne/PropertyComp"); + assertEquals("", line.getRawQueryPath()); + assertEquals("/ESKeyNav(1)/NavPropertyETTwoKeyNavOne/PropertyComp", line.getRawODataPath()); + assertEquals(baseUri + "/ESKeyNav(1)/NavPropertyETTwoKeyNavOne/PropertyComp", line.getRawRequestUri()); assertEquals(baseUri, line.getRawBaseUri()); assertEquals(serviceResolutionUri, line.getRawServiceResolutionUri()); } @Test - public void testOtherBaseUri() throws BatchDeserializerException { - parseFail("http://otherhost/odata/Employee?$top=2", MessageKeys.INVALID_BASE_URI); + public void otherBaseUri() throws BatchDeserializerException { + parseFail("http://otherhost/odata/ESAllPrim", MessageKeys.INVALID_BASE_URI); } @Test - public void testInvalidRelative() throws BatchDeserializerException { - parseFail("/Employee?$top=2", MessageKeys.INVALID_URI); + public void invalidRelative() throws BatchDeserializerException { + parseFail("/ESAllPrim", MessageKeys.INVALID_URI); } - HttpRequestStatusLine parse(final String uri) throws BatchDeserializerException { + private HttpRequestStatusLine parse(final String uri) throws BatchDeserializerException { Line statusline = new Line(HttpMethod.GET.name() + SPACE + uri + SPACE + HTTP_VERSION, 0); return new HttpRequestStatusLine(statusline, baseUri, serviceResolutionUri); } - void parseFail(final String uri, final MessageKeys messageKey) { + private void parseFail(final String uri, final MessageKeys messageKey) { try { parse(uri); fail("Expected exception");
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/14278ac1/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java index 1f0d7a3..cf427bf 100644 --- a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java +++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/BatchResponseSerializerTest.java @@ -18,14 +18,17 @@ */ package org.apache.olingo.server.core.serializer; +import static org.junit.Assert.assertArrayEquals; 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.ByteArrayOutputStream; import java.io.InputStream; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Random; import java.util.UUID; @@ -46,48 +49,42 @@ public class BatchResponseSerializerTest { private static final Charset CS_ISO_8859_1 = Charset.forName("iso-8859-1"); @Test - public void testBatchResponse() throws Exception { + public void batchResponse() throws Exception { final List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); - response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.APPLICATION_JSON.toContentTypeString()); + response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.TEXT_PLAIN.toContentTypeString()); response.setContent(IOUtils.toInputStream("Walter Winter" + CRLF)); - - List<ODataResponse> responses = new ArrayList<ODataResponse>(1); - responses.add(response); - parts.add(new ODataResponsePart(responses, false)); + parts.add(new ODataResponsePart(Collections.singletonList(response), false)); ODataResponse changeSetResponse = new ODataResponse(); changeSetResponse.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); changeSetResponse.setHeader(HttpHeader.CONTENT_ID, "1"); - responses = new ArrayList<ODataResponse>(1); - responses.add(changeSetResponse); - parts.add(new ODataResponsePart(responses, true)); + parts.add(new ODataResponsePart(Collections.singletonList(changeSetResponse), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); - final BatchLineReader reader = - new BatchLineReader(content); + final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(24, body.size()); - assertTrue(body.get(line++).contains("--batch_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++)); - assertEquals("Content-Type: application/json" + CRLF, body.get(line++)); + assertEquals("Content-Type: text/plain" + CRLF, body.get(line++)); assertEquals("Content-Length: 15" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("Walter Winter" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--batch_")); - assertTrue(body.get(line++).contains("Content-Type: multipart/mixed; boundary=changeset_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); + assertTrue(body.get(line++).startsWith("Content-Type: multipart/mixed; boundary=changeset_")); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); + assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals("Content-ID: 1" + CRLF, body.get(line++)); @@ -96,54 +93,48 @@ public class BatchResponseSerializerTest { assertEquals("Content-Length: 0" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); - assertTrue(body.get(line++).contains("--batch_")); + assertTrue(body.get(line++).startsWith("--changeset_")); + assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); } @Test - public void testBatchResponseUmlautsUtf8() throws Exception { - final List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + public void batchResponseUmlautsUtf8() throws Exception { + List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); - response.setHeader(HttpHeader.CONTENT_TYPE, - ContentType.APPLICATION_JSON.toContentTypeString() + "; charset=UTF-8"); - response.setContent(IOUtils.toInputStream("Wälter Winter" + CRLF)); - - List<ODataResponse> responses = new ArrayList<ODataResponse>(1); - responses.add(response); - parts.add(new ODataResponsePart(responses, false)); + response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.APPLICATION_JSON.toContentTypeString()); + response.setContent(IOUtils.toInputStream("{\"name\":\"Wälter Winter\"}" + CRLF)); + parts.add(new ODataResponsePart(Collections.singletonList(response), false)); ODataResponse changeSetResponse = new ODataResponse(); changeSetResponse.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); changeSetResponse.setHeader(HttpHeader.CONTENT_ID, "1"); - responses = new ArrayList<ODataResponse>(1); - responses.add(changeSetResponse); - parts.add(new ODataResponsePart(responses, true)); + parts.add(new ODataResponsePart(Collections.singletonList(changeSetResponse), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); - final BatchLineReader reader = - new BatchLineReader(content); + final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(24, body.size()); - assertTrue(body.get(line++).contains("--batch_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++)); - assertEquals("Content-Type: application/json; charset=UTF-8" + CRLF, body.get(line++)); - assertEquals("Content-Length: 16" + CRLF, body.get(line++)); + assertEquals("Content-Type: application/json" + CRLF, body.get(line++)); + assertEquals("Content-Length: 27" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertEquals("Wälter Winter" + CRLF, body.get(line++)); + assertEquals("{\"name\":\"Wälter Winter\"}" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--batch_")); - assertTrue(body.get(line++).contains("Content-Type: multipart/mixed; boundary=changeset_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); + assertTrue(body.get(line++).startsWith("Content-Type: multipart/mixed; boundary=changeset_")); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); + assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals("Content-ID: 1" + CRLF, body.get(line++)); @@ -152,57 +143,50 @@ public class BatchResponseSerializerTest { assertEquals("Content-Length: 0" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); - assertTrue(body.get(line++).contains("--batch_")); + assertTrue(body.get(line++).startsWith("--changeset_")); + assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); } @Test - public void testBatchResponseUmlautsUtf8BodyIsoHeader() throws Exception { - final List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + public void batchResponseUmlautsUtf8BodyIsoHeader() throws Exception { + List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, - ContentType.APPLICATION_JSON.toContentTypeString() + "; charset=UTF-8"); + ContentType.create(ContentType.TEXT_PLAIN, ContentType.PARAMETER_CHARSET, "UTF-8").toContentTypeString()); response.setContent(IOUtils.toInputStream("Wälter Winter" + CRLF)); - - List<ODataResponse> responses = new ArrayList<ODataResponse>(1); - responses.add(response); - parts.add(new ODataResponsePart(responses, false)); + parts.add(new ODataResponsePart(Collections.singletonList(response), false)); ODataResponse changeSetResponse = new ODataResponse(); changeSetResponse.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); changeSetResponse.setHeader(HttpHeader.CONTENT_ID, "1"); - - byte[] umlauts = "äüö".getBytes(CS_ISO_8859_1); - changeSetResponse.setHeader("Custom-Header", new String(umlauts, CS_ISO_8859_1)); - responses = new ArrayList<ODataResponse>(1); - responses.add(changeSetResponse); - parts.add(new ODataResponsePart(responses, true)); + changeSetResponse.setHeader("Custom-Header", new String("äüö".getBytes(CS_ISO_8859_1), CS_ISO_8859_1)); + parts.add(new ODataResponsePart(Collections.singletonList(changeSetResponse), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); - final BatchLineReader reader = - new BatchLineReader(content); + final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(25, body.size()); - assertTrue(body.get(line++).contains("--batch_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++)); - assertEquals("Content-Type: application/json; charset=UTF-8" + CRLF, body.get(line++)); + assertEquals("Content-Type: text/plain;charset=UTF-8" + CRLF, body.get(line++)); assertEquals("Content-Length: 16" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("Wälter Winter" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--batch_")); - assertTrue(body.get(line++).contains("Content-Type: multipart/mixed; boundary=changeset_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); + assertTrue(body.get(line++).startsWith("Content-Type: multipart/mixed; boundary=changeset_")); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); + assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals("Content-ID: 1" + CRLF, body.get(line++)); @@ -212,39 +196,30 @@ public class BatchResponseSerializerTest { assertEquals("Content-Length: 0" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); - assertTrue(body.get(line++).contains("--batch_")); + assertTrue(body.get(line++).startsWith("--changeset_")); + assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); } @Test - public void testBatchResponseUmlautsUtf8BodyAndHeader() throws Exception { - final List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + public void batchResponseUmlautsUtf8BodyAndHeader() throws Exception { + List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); - response.setHeader(HttpHeader.CONTENT_TYPE, - ContentType.APPLICATION_JSON.toContentTypeString() + "; charset=UTF-8"); - response.setContent(IOUtils.toInputStream("Wälter Winter" + CRLF)); - - List<ODataResponse> responses = new ArrayList<ODataResponse>(1); - responses.add(response); - parts.add(new ODataResponsePart(responses, false)); + response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.APPLICATION_JSON.toContentTypeString()); + response.setContent(IOUtils.toInputStream("{\"name\":\"Wälter Winter\"}" + CRLF)); + parts.add(new ODataResponsePart(Collections.singletonList(response), false)); ODataResponse changeSetResponse = new ODataResponse(); changeSetResponse.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); changeSetResponse.setHeader(HttpHeader.CONTENT_ID, "1"); - - // byte[] umlauts = "äüö".getBytes(CS_UTF_8); - // changeSetResponse.setHeader("Custom-Header", new String(umlauts, CS_UTF_8)); changeSetResponse.setHeader("Custom-Header", "äüö"); - responses = new ArrayList<ODataResponse>(1); - responses.add(changeSetResponse); - parts.add(new ODataResponsePart(responses, true)); + parts.add(new ODataResponsePart(Collections.singletonList(changeSetResponse), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); - final BatchLineReader reader = - new BatchLineReader(content); + final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); @@ -256,50 +231,45 @@ public class BatchResponseSerializerTest { } @Test - public void testBatchResponseUmlautsIso() throws Exception { - final List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + public void batchResponseUmlautsIso() throws Exception { + List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, - ContentType.APPLICATION_JSON.toContentTypeString() + "; charset=iso-8859-1"); - byte[] payload = ("Wälter Winter" + CRLF).getBytes("iso-8859-1"); - response.setContent(new ByteArrayInputStream(payload)); - - List<ODataResponse> responses = new ArrayList<ODataResponse>(1); - responses.add(response); - parts.add(new ODataResponsePart(responses, false)); + ContentType.create(ContentType.TEXT_PLAIN, ContentType.PARAMETER_CHARSET, CS_ISO_8859_1.name()) + .toContentTypeString()); + response.setContent(new ByteArrayInputStream(("Wälter Winter" + CRLF).getBytes(CS_ISO_8859_1))); + parts.add(new ODataResponsePart(Collections.singletonList(response), false)); ODataResponse changeSetResponse = new ODataResponse(); changeSetResponse.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); changeSetResponse.setHeader(HttpHeader.CONTENT_ID, "1"); - responses = new ArrayList<ODataResponse>(1); - responses.add(changeSetResponse); - parts.add(new ODataResponsePart(responses, true)); + parts.add(new ODataResponsePart(Collections.singletonList(changeSetResponse), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); - final BatchLineReader reader = - new BatchLineReader(content); + final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(24, body.size()); - assertTrue(body.get(line++).contains("--batch_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++)); - assertEquals("Content-Type: application/json; charset=iso-8859-1" + CRLF, body.get(line++)); + assertEquals("Content-Type: text/plain;charset=ISO-8859-1" + CRLF, body.get(line++)); assertEquals("Content-Length: 15" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("Wälter Winter" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--batch_")); - assertTrue(body.get(line++).contains("Content-Type: multipart/mixed; boundary=changeset_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); + assertTrue(body.get(line++).startsWith("Content-Type: multipart/mixed; boundary=changeset_")); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); + assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals("Content-ID: 1" + CRLF, body.get(line++)); @@ -308,52 +278,47 @@ public class BatchResponseSerializerTest { assertEquals("Content-Length: 0" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); - assertTrue(body.get(line++).contains("--batch_")); + assertTrue(body.get(line++).startsWith("--changeset_")); + assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); } @Test - public void testBatchResponseWithEndingCRLF() throws Exception { - final List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + public void batchResponseWithEndingCRLF() throws Exception { + List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); - response.setHeader(HttpHeader.CONTENT_TYPE, "application/json"); + response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.TEXT_PLAIN.toContentTypeString()); response.setContent(IOUtils.toInputStream("Walter Winter")); - - List<ODataResponse> responses = new ArrayList<ODataResponse>(1); - responses.add(response); - parts.add(new ODataResponsePart(responses, false)); + parts.add(new ODataResponsePart(Collections.singletonList(response), false)); ODataResponse changeSetResponse = new ODataResponse(); changeSetResponse.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); changeSetResponse.setHeader(HttpHeader.CONTENT_ID, "1"); - responses = new ArrayList<ODataResponse>(1); - responses.add(changeSetResponse); - parts.add(new ODataResponsePart(responses, true)); + parts.add(new ODataResponsePart(Collections.singletonList(changeSetResponse), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); - final BatchLineReader reader = - new BatchLineReader(content); + final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(23, body.size()); - assertTrue(body.get(line++).contains("--batch_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++)); - assertEquals("Content-Type: application/json" + CRLF, body.get(line++)); + assertEquals("Content-Type: text/plain" + CRLF, body.get(line++)); assertEquals("Content-Length: 13" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("Walter Winter" + CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--batch_")); - assertTrue(body.get(line++).contains("Content-Type: multipart/mixed; boundary=changeset_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); + assertTrue(body.get(line++).startsWith("Content-Type: multipart/mixed; boundary=changeset_")); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); + assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals("Content-ID: 1" + CRLF, body.get(line++)); @@ -362,108 +327,99 @@ public class BatchResponseSerializerTest { assertEquals("Content-Length: 0" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); - assertTrue(body.get(line++).contains("--batch_")); + assertTrue(body.get(line++).startsWith("--changeset_")); + assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); } @Test - public void testResponse() throws Exception { + public void response() throws Exception { List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); - response.setHeader(HttpHeader.CONTENT_TYPE, "application/json"); + response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.TEXT_PLAIN.toContentTypeString()); response.setContent(IOUtils.toInputStream("Walter Winter")); - - List<ODataResponse> responses = new ArrayList<ODataResponse>(1); - responses.add(response); - parts.add(new ODataResponsePart(responses, false)); + parts.add(new ODataResponsePart(Collections.singletonList(response), false)); final BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); - final BatchLineReader reader = - new BatchLineReader(content); + final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(10, body.size()); - assertTrue(body.get(line++).contains("--batch_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++)); - assertEquals("Content-Type: application/json" + CRLF, body.get(line++)); + assertEquals("Content-Type: text/plain" + CRLF, body.get(line++)); assertEquals("Content-Length: 13" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("Walter Winter" + CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--batch_")); + assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); } @Test - public void testBigResponse() throws Exception { + public void bigResponse() throws Exception { List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + ODataResponse response = new ODataResponse(); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); - response.setHeader(HttpHeader.CONTENT_TYPE, "application/json"); + response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.TEXT_PLAIN.toContentTypeString()); String bigData = generateData(10000); response.setContent(IOUtils.toInputStream(bigData)); - - List<ODataResponse> responses = new ArrayList<ODataResponse>(1); - responses.add(response); - parts.add(new ODataResponsePart(responses, false)); + parts.add(new ODataResponsePart(Collections.singletonList(response), false)); final BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); - final BatchLineReader reader = - new BatchLineReader(content); + final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(10, body.size()); - assertTrue(body.get(line++).contains("--batch_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals("HTTP/1.1 200 OK" + CRLF, body.get(line++)); - assertEquals("Content-Type: application/json" + CRLF, body.get(line++)); + assertEquals("Content-Type: text/plain" + CRLF, body.get(line++)); assertEquals("Content-Length: 10000" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(bigData + CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--batch_")); + assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); } @Test - public void testChangeSetResponse() throws Exception { + public void changeSetResponse() throws Exception { List<ODataResponsePart> parts = new ArrayList<ODataResponsePart>(); + ODataResponse response = new ODataResponse(); response.setHeader(HttpHeader.CONTENT_ID, "1"); response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); - - List<ODataResponse> responses = new ArrayList<ODataResponse>(1); - responses.add(response); - parts.add(new ODataResponsePart(responses, true)); + parts.add(new ODataResponsePart(Collections.singletonList(response), true)); BatchResponseSerializer serializer = new BatchResponseSerializer(); final InputStream content = serializer.serialize(parts, BOUNDARY); assertNotNull(content); - final BatchLineReader reader = - new BatchLineReader(content); + final BatchLineReader reader = new BatchLineReader(content); final List<String> body = reader.toList(); reader.close(); int line = 0; assertEquals(14, body.size()); - assertTrue(body.get(line++).contains("--batch_")); - assertTrue(body.get(line++).contains("Content-Type: multipart/mixed; boundary=changeset_")); + assertEquals("--" + BOUNDARY + CRLF, body.get(line++)); + assertTrue(body.get(line++).startsWith("Content-Type: multipart/mixed; boundary=changeset_")); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); + assertTrue(body.get(line++).startsWith("--changeset_")); assertEquals("Content-Type: application/http" + CRLF, body.get(line++)); assertEquals("Content-Transfer-Encoding: binary" + CRLF, body.get(line++)); assertEquals("Content-ID: 1" + CRLF, body.get(line++)); @@ -472,8 +428,52 @@ public class BatchResponseSerializerTest { assertEquals("Content-Length: 0" + CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); assertEquals(CRLF, body.get(line++)); - assertTrue(body.get(line++).contains("--changeset_")); - assertTrue(body.get(line++).contains("--batch_")); + assertTrue(body.get(line++).startsWith("--changeset_")); + assertEquals("--" + BOUNDARY + "--" + CRLF, body.get(line++)); + } + + @Test + public void binaryResponse() throws Exception { + ODataResponse response = new ODataResponse(); + response.setStatusCode(HttpStatusCode.OK.getStatusCode()); + response.setHeader(HttpHeader.CONTENT_TYPE, ContentType.APPLICATION_OCTET_STREAM.toContentTypeString()); + // 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(Byte.MAX_VALUE - Byte.MIN_VALUE + 1); + out.write(content); + response.setContent(new ByteArrayInputStream(out.toByteArray())); + + InputStream batchResponse = new BatchResponseSerializer().serialize( + Collections.singletonList(new ODataResponsePart(Collections.singletonList(response), false)), + BOUNDARY); + assertNotNull(batchResponse); + + final String beforeExpected = "--" + BOUNDARY + CRLF + + "Content-Type: application/http" + CRLF + + "Content-Transfer-Encoding: binary" + CRLF + + CRLF + + "HTTP/1.1 200 OK" + CRLF + + "Content-Type: application/octet-stream" + CRLF + + "Content-Length: 256" + CRLF + + CRLF; + byte[] beforeContent = new byte[beforeExpected.length()]; + batchResponse.read(beforeContent, 0, beforeExpected.length()); + assertArrayEquals(beforeExpected.getBytes(CS_ISO_8859_1), beforeContent); + + byte[] binaryContent = new byte[Byte.MAX_VALUE - Byte.MIN_VALUE + 1]; + batchResponse.read(binaryContent, 0, binaryContent.length); + assertArrayEquals(content, binaryContent); + + final String afterExpected = CRLF + + "--" + BOUNDARY + "--" + CRLF; + byte[] afterContent = new byte[afterExpected.length()]; + batchResponse.read(afterContent, 0, afterExpected.length()); + assertArrayEquals(afterExpected.getBytes(CS_ISO_8859_1), afterContent); + + assertEquals(-1, batchResponse.read()); } /**
