1 package fi.iki.elonen; 2 3 import org.junit.Test; 4 5 import java.io.ByteArrayOutputStream; 6 import java.util.List; 7 8 import static junit.framework.Assert.*; 9 10 public class HttpHeadRequestTest extends HttpServerTest { 11 @Override 12 public void setUp() { 13 super.setUp(); 14 String responseBody = "Success!"; 15 testServer.response = new NanoHTTPD.Response(responseBody); 16 } 17 18 @Test 19 public void testHeadRequestDoesntSendBackResponseBody() throws Exception { 20 ByteArrayOutputStream outputStream = invokeServer("HEAD " + URI + " HTTP/1.1"); 21 22 String[] expected = { 23 "HTTP/1.1 200 OK", 24 "Content-Type: text/html", 25 "Date: .*", 26 "Connection: keep-alive", 27 "Content-Length: 8", 28 "" 29 }; 30 31 assertResponse(outputStream, expected); 32 } 33 34 @Test 35 public void testEmptyHeadersSuppliedToServeMethodFromSimpleWorkingGetRequest() { 36 invokeServer("HEAD " + URI + " HTTP/1.1"); 37 assertNotNull(testServer.parms); 38 assertNotNull(testServer.header); 39 assertNotNull(testServer.files); 40 assertNotNull(testServer.uri); 41 } 42 43 @Test 44 public void testSingleUserAgentHeaderSuppliedToServeMethodFromSimpleWorkingGetRequest() { 45 String userAgent = "jUnit 4.8.2 Unit Test"; 46 invokeServer("HEAD " + URI + " HTTP/1.1\nUser-Agent: " + userAgent + "\n"); 47 assertEquals(userAgent, testServer.header.get("user-agent")); 48 assertEquals(NanoHTTPD.Method.HEAD, testServer.method); 49 assertEquals(URI, testServer.uri); 50 } 51 52 @Test 53 public void testMultipleHeaderSuppliedToServeMethodFromSimpleWorkingGetRequest() { 54 String userAgent = "jUnit 4.8.2 Unit Test"; 55 String accept = "text/html"; 56 invokeServer("HEAD " + URI + " HTTP/1.1\nUser-Agent: " + userAgent + "\nAccept: " + accept); 57 assertEquals(userAgent, testServer.header.get("user-agent")); 58 assertEquals(accept, testServer.header.get("accept")); 59 } 60 61 @Test 62 public void testSingleGetParameter() { 63 invokeServer("HEAD " + URI + "?foo=bar HTTP/1.1"); 64 assertEquals("bar", testServer.parms.get("foo")); 65 } 66 67 @Test 68 public void testSingleGetParameterWithNoValue() { 69 invokeServer("HEAD " + URI + "?foo HTTP/1.1"); 70 assertEquals("", testServer.parms.get("foo")); 71 } 72 73 @Test 74 public void testMultipleGetParameters() { 75 invokeServer("HEAD " + URI + "?foo=bar&baz=zot HTTP/1.1"); 76 assertEquals("bar", testServer.parms.get("foo")); 77 assertEquals("zot", testServer.parms.get("baz")); 78 } 79 80 @Test 81 public void testMultipleGetParametersWithMissingValue() { 82 invokeServer("HEAD " + URI + "?foo=&baz=zot HTTP/1.1"); 83 assertEquals("", testServer.parms.get("foo")); 84 assertEquals("zot", testServer.parms.get("baz")); 85 } 86 87 @Test 88 public void testMultipleGetParametersWithMissingValueAndRequestHeaders() { 89 invokeServer("HEAD " + URI + "?foo=&baz=zot HTTP/1.1\nAccept: text/html"); 90 assertEquals("", testServer.parms.get("foo")); 91 assertEquals("zot", testServer.parms.get("baz")); 92 assertEquals("text/html", testServer.header.get("accept")); 93 } 94 95 @Test 96 public void testDecodingParametersWithSingleValue() { 97 invokeServer("HEAD " + URI + "?foo=bar&baz=zot HTTP/1.1"); 98 assertEquals("foo=bar&baz=zot", testServer.queryParameterString); 99 assertTrue(testServer.decodedParamters.get("foo") instanceof List); 100 assertEquals(1, testServer.decodedParamters.get("foo").size()); 101 assertEquals("bar", testServer.decodedParamters.get("foo").get(0)); 102 assertTrue(testServer.decodedParamters.get("baz") instanceof List); 103 assertEquals(1, testServer.decodedParamters.get("baz").size()); 104 assertEquals("zot", testServer.decodedParamters.get("baz").get(0)); 105 } 106 107 @Test 108 public void testDecodingParametersWithSingleValueAndMissingValue() { 109 invokeServer("HEAD " + URI + "?foo&baz=zot HTTP/1.1"); 110 assertEquals("foo&baz=zot", testServer.queryParameterString); 111 assertTrue(testServer.decodedParamters.get("foo") instanceof List); 112 assertEquals(0, testServer.decodedParamters.get("foo").size()); 113 assertTrue(testServer.decodedParamters.get("baz") instanceof List); 114 assertEquals(1, testServer.decodedParamters.get("baz").size()); 115 assertEquals("zot", testServer.decodedParamters.get("baz").get(0)); 116 } 117 118 @Test 119 public void testDecodingFieldWithEmptyValueAndFieldWithMissingValueGiveDifferentResults() { 120 invokeServer("HEAD " + URI + "?foo&bar= HTTP/1.1"); 121 assertTrue(testServer.decodedParamters.get("foo") instanceof List); 122 assertEquals(0, testServer.decodedParamters.get("foo").size()); 123 assertTrue(testServer.decodedParamters.get("bar") instanceof List); 124 assertEquals(1, testServer.decodedParamters.get("bar").size()); 125 assertEquals("", testServer.decodedParamters.get("bar").get(0)); 126 } 127 128 @Test 129 public void testDecodingSingleFieldRepeated() { 130 invokeServer("HEAD " + URI + "?foo=bar&foo=baz HTTP/1.1"); 131 assertTrue(testServer.decodedParamters.get("foo") instanceof List); 132 assertEquals(2, testServer.decodedParamters.get("foo").size()); 133 assertEquals("bar", testServer.decodedParamters.get("foo").get(0)); 134 assertEquals("baz", testServer.decodedParamters.get("foo").get(1)); 135 } 136 137 @Test 138 public void testDecodingMixtureOfParameters() { 139 invokeServer("HEAD " + URI + "?foo=bar&foo=baz&zot&zim= HTTP/1.1"); 140 assertTrue(testServer.decodedParamters.get("foo") instanceof List); 141 assertEquals(2, testServer.decodedParamters.get("foo").size()); 142 assertEquals("bar", testServer.decodedParamters.get("foo").get(0)); 143 assertEquals("baz", testServer.decodedParamters.get("foo").get(1)); 144 assertTrue(testServer.decodedParamters.get("zot") instanceof List); 145 assertEquals(0, testServer.decodedParamters.get("zot").size()); 146 assertTrue(testServer.decodedParamters.get("zim") instanceof List); 147 assertEquals(1, testServer.decodedParamters.get("zim").size()); 148 assertEquals("", testServer.decodedParamters.get("zim").get(0)); 149 } 150 151 @Test 152 public void testDecodingParametersFromParameterMap() { 153 invokeServer("HEAD " + URI + "?foo=bar&foo=baz&zot&zim= HTTP/1.1"); 154 assertEquals(testServer.decodedParamters, testServer.decodedParamtersFromParameter); 155 } 156 // -------------------------------------------------------------------------------------------------------- // 157 158 } 159