summaryrefslogtreecommitdiffstats
path: root/simple/simple-http/src/test/java/org/simpleframework/http/core/TransferTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'simple/simple-http/src/test/java/org/simpleframework/http/core/TransferTest.java')
-rw-r--r--simple/simple-http/src/test/java/org/simpleframework/http/core/TransferTest.java195
1 files changed, 195 insertions, 0 deletions
diff --git a/simple/simple-http/src/test/java/org/simpleframework/http/core/TransferTest.java b/simple/simple-http/src/test/java/org/simpleframework/http/core/TransferTest.java
new file mode 100644
index 0000000..0d0d73d
--- /dev/null
+++ b/simple/simple-http/src/test/java/org/simpleframework/http/core/TransferTest.java
@@ -0,0 +1,195 @@
+package org.simpleframework.http.core;
+
+import java.io.IOException;
+
+import org.simpleframework.http.core.Conversation;
+import org.simpleframework.http.core.ResponseEncoder;
+
+import junit.framework.TestCase;
+
+public class TransferTest extends TestCase {
+
+ public void testTransferEncoding() throws IOException {
+ MockChannel channel = new MockChannel(null);
+ MockObserver monitor = new MockObserver();
+ MockRequest request = new MockRequest();
+ MockResponse response = new MockResponse();
+ Conversation support = new Conversation(request, response);
+ ResponseEncoder transfer = new ResponseEncoder(monitor, response, support, channel);
+
+ // Start a HTTP/1.1 conversation
+ request.setMajor(1);
+ request.setMinor(1);
+ transfer.start();
+
+ assertEquals(response.getValue("Connection"), "keep-alive");
+ assertEquals(response.getValue("Transfer-Encoding"), "chunked");
+ assertEquals(response.getValue("Content-Length"), null);
+ assertEquals(response.getContentLength(), -1);
+ assertTrue(response.isCommitted());
+
+ channel = new MockChannel(null);
+ monitor = new MockObserver();
+ request = new MockRequest();
+ response = new MockResponse();
+ support = new Conversation(request, response);
+ transfer = new ResponseEncoder(monitor, response, support, channel);
+
+ // Start a HTTP/1.0 conversation
+ request.setMajor(1);
+ request.setMinor(0);
+ transfer.start();
+
+ assertEquals(response.getValue("Connection"), "close");
+ assertEquals(response.getValue("Transfer-Encoding"), null);
+ assertEquals(response.getValue("Content-Length"), null);
+ assertEquals(response.getContentLength(), -1);
+ assertTrue(response.isCommitted());
+ }
+
+ public void testContentLength() throws IOException {
+ MockChannel channel = new MockChannel(null);
+ MockObserver monitor = new MockObserver();
+ MockRequest request = new MockRequest();
+ MockResponse response = new MockResponse();
+ Conversation support = new Conversation(request, response);
+ ResponseEncoder transfer = new ResponseEncoder(monitor, response, support, channel);
+
+ // Start a HTTP/1.1 conversation
+ request.setMajor(1);
+ request.setMinor(1);
+ transfer.start(1024);
+
+ assertEquals(response.getValue("Connection"), "keep-alive");
+ assertEquals(response.getValue("Content-Length"), "1024");
+ assertEquals(response.getValue("Transfer-Encoding"), null);
+ assertEquals(response.getContentLength(), 1024);
+ assertTrue(response.isCommitted());
+
+ channel = new MockChannel(null);
+ monitor = new MockObserver();
+ request = new MockRequest();
+ response = new MockResponse();
+ support = new Conversation(request, response);
+ transfer = new ResponseEncoder(monitor, response, support, channel);
+
+ // Start a HTTP/1.0 conversation
+ request.setMajor(1);
+ request.setMinor(0);
+ transfer.start(1024);
+
+ assertEquals(response.getValue("Connection"), "close");
+ assertEquals(response.getValue("Content-Length"), "1024");
+ assertEquals(response.getValue("Transfer-Encoding"), null);
+ assertEquals(response.getContentLength(), 1024);
+ assertTrue(response.isCommitted());
+
+ channel = new MockChannel(null);
+ monitor = new MockObserver();
+ request = new MockRequest();
+ response = new MockResponse();
+ support = new Conversation(request, response);
+ transfer = new ResponseEncoder(monitor, response, support, channel);
+
+ // Start a HTTP/1.0 conversation
+ request.setMajor(1);
+ request.setMinor(1);
+ response.setValue("Content-Length", "2048");
+ response.setValue("Connection", "close");
+ response.setValue("Transfer-Encoding", "chunked");
+ transfer.start(1024);
+
+ assertEquals(response.getValue("Connection"), "close");
+ assertEquals(response.getValue("Content-Length"), "1024"); // should be 1024
+ assertEquals(response.getValue("Transfer-Encoding"), null);
+ assertEquals(response.getContentLength(), 1024);
+ assertTrue(response.isCommitted());
+ }
+
+ public void testHeadMethodWithConnectionClose() throws IOException {
+ MockChannel channel = new MockChannel(null);
+ MockObserver monitor = new MockObserver();
+ MockRequest request = new MockRequest();
+ MockResponse response = new MockResponse();
+ Conversation support = new Conversation(request, response);
+ ResponseEncoder transfer = new ResponseEncoder(monitor, response, support, channel);
+
+ request.setMajor(1);
+ request.setMinor(0);
+ request.setMethod("HEAD");
+ request.setValue("Connection", "keep-alive");
+ response.setContentLength(1024);
+ response.setValue("Connection", "close");
+
+ transfer.start();
+
+ assertEquals(response.getValue("Connection"), "close");
+ assertEquals(response.getValue("Content-Length"), "1024"); // should be 1024
+ assertEquals(response.getValue("Transfer-Encoding"), null);
+ assertEquals(response.getContentLength(), 1024);
+ }
+
+ public void testHeadMethodWithSomethingWritten() throws IOException {
+ MockChannel channel = new MockChannel(null);
+ MockObserver monitor = new MockObserver();
+ MockRequest request = new MockRequest();
+ MockResponse response = new MockResponse();
+ Conversation support = new Conversation(request, response);
+ ResponseEncoder transfer = new ResponseEncoder(monitor, response, support, channel);
+
+ request.setMajor(1);
+ request.setMinor(1);
+ request.setMethod("HEAD");
+ request.setValue("Connection", "keep-alive");
+ response.setContentLength(1024);
+
+ transfer.start(512);
+
+ assertEquals(response.getValue("Connection"), "keep-alive");
+ assertEquals(response.getValue("Content-Length"), "512"); // should be 512
+ assertEquals(response.getValue("Transfer-Encoding"), null);
+ assertEquals(response.getContentLength(), 512);
+ }
+
+ public void testHeadMethodWithNoContentLength() throws IOException {
+ MockChannel channel = new MockChannel(null);
+ MockObserver monitor = new MockObserver();
+ MockRequest request = new MockRequest();
+ MockResponse response = new MockResponse();
+ Conversation support = new Conversation(request, response);
+ ResponseEncoder transfer = new ResponseEncoder(monitor, response, support, channel);
+
+ request.setMajor(1);
+ request.setMinor(1);
+ request.setMethod("HEAD");
+ request.setValue("Connection", "keep-alive");
+
+ transfer.start();
+
+ assertEquals(response.getValue("Connection"), "keep-alive");
+ assertEquals(response.getValue("Content-Length"), null);
+ assertEquals(response.getValue("Transfer-Encoding"), "chunked");
+ assertEquals(response.getContentLength(), -1);
+ }
+
+ public void testHeadMethodWithNoContentLengthAndSomethingWritten() throws IOException {
+ MockChannel channel = new MockChannel(null);
+ MockObserver monitor = new MockObserver();
+ MockRequest request = new MockRequest();
+ MockResponse response = new MockResponse();
+ Conversation support = new Conversation(request, response);
+ ResponseEncoder transfer = new ResponseEncoder(monitor, response, support, channel);
+
+ request.setMajor(1);
+ request.setMinor(1);
+ request.setMethod("HEAD");
+ request.setValue("Connection", "keep-alive");
+
+ transfer.start(32);
+
+ assertEquals(response.getValue("Connection"), "keep-alive");
+ assertEquals(response.getValue("Content-Length"), "32");
+ assertEquals(response.getValue("Transfer-Encoding"), null);
+ assertEquals(response.getContentLength(), 32);
+ }
+}