Home | History | Annotate | Download | only in elonen
      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