public RequestStore parseInitialRequestLine(String line) throws UnsupportedEncodingException { String[] parts = line.split(" "); requestStore.setMethod(parts[0]); requestStore.setRequestUri(parts[1]); requestStore.setProtocolVersion(parts[2]); return requestStore; }
@Test public void itShouldBeAbleToSetTheMimeType() throws IOException { StringReader request = new StringReader("GET /image.gif HTTP/1.1\nHost: www.Superawesome.com\nContent-Length: 45"); BufferedReader in = new BufferedReader(request); RequestStore requestStore = new RequestStore(); RequestParser requestParser = new RequestParser(in, requestStore); requestParser.processRequest(in); assertEquals("image/gif", requestStore.getMimeType()); }
@Test public void itShouldBeAbleToSetTheContentLength() throws IOException { StringReader request = new StringReader("GET / HTTP/1.1\nHost: www.Superawesome.com\nContent-Length: 45"); BufferedReader in = new BufferedReader(request); RequestStore requestStore = new RequestStore(); RequestParser requestParser = new RequestParser(in, requestStore); requestParser.readHeaders(in); Integer length = 45; assertEquals(length, requestStore.getRequestContentLength()); }
@Test public void itShouldBeAbleToGetTheBodyFromTheRequestIfThereIsOne() throws IOException { StringReader request = new StringReader("my = data value1 = hello\n"); BufferedReader in = new BufferedReader(request); RequestStore requestStore = new RequestStore(); RequestParser requestParser = new RequestParser(in, requestStore); Integer length = 24; requestStore.setRequestContentLength(length); String body = "my = data value1 = hello"; assertEquals(body, requestParser.readRequestBody(in, length)); }
@Test public void itShouldParseTheHeadersIntoKeyValuePairs() throws IOException { StringReader request = new StringReader("GET / HTTP/1.1\nHost: www.Superawesome.com\nContent-Length: 45"); BufferedReader in = new BufferedReader(request); RequestStore requestStore = new RequestStore(); RequestParser requestParser = new RequestParser(in, requestStore); ArrayList<String> requestHeaders = requestParser.readHeaders(in); requestParser.parseInitialRequestLine(requestHeaders.remove(0)); requestParser.parseHeadersIntoKeyValuePairs(requestHeaders); assertEquals("www.Superawesome.com", requestStore.getHeaders("Host")); }
@Test public void itShouldBeAbleToSplitTheParamsAtTheAmpersand() { StringReader request = new StringReader("GET / HTTP/1.1\nHost: www.Superawesome.com\n"); BufferedReader in = new BufferedReader(request); RequestStore requestStore = new RequestStore(); RequestParser requestParser = new RequestParser(in, requestStore); String queryStringParams = "my=data&cool=sweet"; requestParser.splitRouteAtAmpersand(queryStringParams); HashMap expected = new HashMap(); expected.put("cool", "sweet"); expected.put("my", "data"); assertEquals(expected, requestStore.getParams()); }
@Test public void itShouldBeAbleToParseTheInitialRequestLine() throws IOException { StringReader request = new StringReader("GET / HTTP/1.1\nHost: www.Superawesome.com"); BufferedReader in = new BufferedReader(request); RequestStore requestStore = new RequestStore(); RequestParser requestParser = new RequestParser(in, requestStore); ArrayList<String> headers = requestParser.readHeaders(in); String initialRequestLine = headers.remove(0); requestParser.parseInitialRequestLine(initialRequestLine); assertEquals("HTTP/1.1", requestStore.getProtocolVersion()); assertEquals("GET", requestStore.getMethod()); assertEquals("/", requestStore.getRequestUri()); }
@Test public void itShouldBeAbleToSetTheStartAndEndOfARange() throws IOException { StringReader request = new StringReader("GET / HTTP/1.1\nHost: www.Superawesome.com\nRange: bytes=0-10"); BufferedReader in = new BufferedReader(request); RequestStore requestStore = new RequestStore(); RequestParser requestParser = new RequestParser(in, requestStore); requestParser.readHeaders(in); Integer startLength = 0; Integer endLength = 10; assertEquals(startLength, requestStore.getStartRange()); assertEquals(endLength, requestStore.getEndRange()); }
@Test public void itShouldBeAbleToParseTheHeadersIntoKeyValuePairs() throws IOException { StringReader request = new StringReader("GET / HTTP/1.1\nHost: www.Superawesome.com"); BufferedReader in = new BufferedReader(request); RequestStore requestStore = new RequestStore(); RequestParser requestParser = new RequestParser(in, requestStore); ArrayList<String> headers = requestParser.readHeaders(in); headers.remove(0); requestParser.parseHeadersIntoKeyValuePairs(headers); HashMap testHeaders = new HashMap(); testHeaders.put("Host", "www.Superawesome.com"); assertEquals(testHeaders, requestStore.getAllHeaders()); }
public boolean checkForQueryStringParams() { String route = requestStore.getRequestUri(); if (route.contains("?")) { return true; } else { return false; } }
public RequestStore processRequest(BufferedReader in) throws IOException { ArrayList<String> requestHeaders = readHeaders(in); parseInitialRequestLine(requestHeaders.remove(0)); if (checkForQueryStringParams()) { processQueryStringParams(); seturiWithDetachedParams(); } parseHeadersIntoKeyValuePairs(requestHeaders); setMimeType(requestStore.getRequestUri()); if (requestStore.getRequestContentLength() != null) { String bodyContent = checkForBlankLines(in) + readRequestBody(in, (requestStore.getRequestContentLength() - 1)); requestStore.setRequestBody(bodyContent); } return requestStore; }
public void splitRouteAtAmpersand(String params) { HashMap<String, String> splitParams = new HashMap<String, String>(); String queryStringParams[] = params.split("&"); int i; for (i = 0; i < queryStringParams.length; i++) { String pairs[] = queryStringParams[i].split("="); splitParams.put(pairs[0], pairs[1]); } requestStore.setParams(splitParams); }
public void processQueryStringParams() throws UnsupportedEncodingException { String params = splitOffQueryStringParams(); if (params.contains("&")) { splitRouteAtAmpersand(params); } else { HashMap<String, String> splitParams = new HashMap<String, String>(); String pairs[] = params.split("="); splitParams.put(decodeRequestUri(pairs[0]), decodeRequestUri(pairs[1])); requestStore.setParams(splitParams); } }
@Test public void itShouldBeAbleToParseARequest() throws IOException { StringReader request = new StringReader( "POST /form HTTP/1.1\nHost: www.Superawesome.com\nContent-Length: 24\n\r\nmy = data value1 = hello\n"); BufferedReader in = new BufferedReader(request); RequestStore requestStore = new RequestStore(); RequestParser requestParser = new RequestParser(in, requestStore); Integer length = 24; requestParser.processRequest(in); assertEquals("POST", requestStore.getMethod()); assertEquals("/form", requestStore.getRequestUri()); assertEquals("HTTP/1.1", requestStore.getProtocolVersion()); assertEquals(length, requestStore.getRequestContentLength()); assertEquals("my = data value1 = hello", requestStore.getRequestBody()); }
public void setRequestContentLength(String line) { String[] parts = line.split(": "); Integer length = Integer.parseInt(parts[1]); requestStore.setRequestContentLength(length); }
public String splitOffQueryStringParams() { String path = requestStore.getRequestUri(); String[] parts = path.split("\\?"); return (parts[1]); }
public void parseHeadersIntoKeyValuePairs(ArrayList<String> headers) { for (String line : headers) { String[] parts = line.split(":"); requestStore.setHeader(parts[0], parts[1].trim()); } }
public void setMimeType(String uri) { MimeTypeExtractor typeExtractor = new MimeTypeExtractor(); String mimeType = typeExtractor.extractType(uri); requestStore.setMimeType(mimeType); }
public void seturiWithDetachedParams() { String pairs[] = requestStore.getRequestUri().split("\\?"); requestStore.setRequestUri(pairs[0]); }
public void setRequestRanges(String line) { String[] parts = line.split("="); String[] rangeNumbers = parts[1].split("-"); requestStore.setStartRange(Integer.parseInt(rangeNumbers[0])); requestStore.setEndRange(Integer.parseInt(rangeNumbers[1])); }