Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/*
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
Expand Down
7 changes: 0 additions & 7 deletions .idea/misc.xml

This file was deleted.

6 changes: 0 additions & 6 deletions .idea/vcs.xml

This file was deleted.

3 changes: 1 addition & 2 deletions src/main/java/http/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
public class Main {

public static void main(String[] args) throws IOException {
int defaultPort = 5000;
ProgramArgParser programArgParser = new ProgramArgParser(args, defaultPort);
ProgramArgParser programArgParser = new ProgramArgParser(args);

Logger logger = new Logger();
RequestRouter requestRouter = new RequestRouter(programArgParser.getRootPath(), logger);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/http/Response/ResponseStatus.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public byte[] getPhrase() {
return phrase.getBytes();
}

public String getPhraseAsS() {
public String getPhraseAsString() {
return phrase;
}

Expand Down
11 changes: 6 additions & 5 deletions src/main/java/http/server/ConnectionManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import http.Handlers.RequestRouter;
import http.Request.Request;
import http.Request.RequestParser;
import http.Response.Response;
import http.util.Logger;

import java.io.IOException;
Expand All @@ -12,26 +11,28 @@
public class ConnectionManager {

private RequestParser requestParser;
private ResponseWriter responseWriter;
private ResponseConstructor responseConstructor;
private RequestRouter requestRouter;
private Logger logger;
private ResponseWriter responseWriter;

public ConnectionManager(RequestRouter requestRouter, Logger logger) {
this.requestRouter = requestRouter;
this.logger = logger;
requestParser = new RequestParser();
responseConstructor = new ResponseConstructor();
responseWriter = new ResponseWriter();
}

public void respondTo(Socket clientConnection) throws IOException {
responseWriter.write(getReponse(clientConnection), clientConnection.getOutputStream());
responseWriter.writeToSocket(getResponse(clientConnection), clientConnection.getOutputStream());
clientConnection.close();
}

private Response getReponse(Socket clientConnection) throws IOException {
private byte[] getResponse(Socket clientConnection) throws IOException {
Request request = getRequest(clientConnection);
writeToLog(request);
return requestRouter.handle(request);
return responseConstructor.construct(requestRouter.handle(request));
}

private Request getRequest(Socket clientConnection) throws IOException {
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/http/server/ResponseConstructor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package http.server;

import http.Response.Response;
import http.Response.ResponseHeader;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Map;

public class ResponseConstructor {

public byte[] construct(Response response) throws IOException {
ByteArrayOutputStream responseStream = new ByteArrayOutputStream();
responseStream.write(response.getHttpVersion());
responseStream.write(" ".getBytes());
responseStream.write(response.getStatus().getPhrase());
responseStream.write("\r\n".getBytes());

for (Map.Entry<ResponseHeader, byte[]> entry : response.getHeaders().entrySet()) {
responseStream.write(entry.getKey().getLabel());
responseStream.write(": ".getBytes());
responseStream.write(entry.getValue());
responseStream.write("\r\n".getBytes());
}

responseStream.write("\r\n".getBytes());
responseStream.write(response.getBodyContent());
return responseStream.toByteArray();
}
}
26 changes: 1 addition & 25 deletions src/main/java/http/server/ResponseWriter.java
Original file line number Diff line number Diff line change
@@ -1,35 +1,11 @@
package http.server;

import http.Response.Response;
import http.Response.ResponseHeader;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;

public class ResponseWriter {

public void write(Response response, OutputStream clientResponseOutput) throws IOException {
ByteArrayOutputStream responseStream = new ByteArrayOutputStream();
responseStream.write(response.getHttpVersion());
responseStream.write(" ".getBytes());
responseStream.write(response.getStatus().getPhrase());
responseStream.write("\r\n".getBytes());

for (Map.Entry<ResponseHeader, byte[]> entry : response.getHeaders().entrySet()) {
responseStream.write(entry.getKey().getLabel());
responseStream.write(": ".getBytes());
responseStream.write(entry.getValue());
responseStream.write("\r\n".getBytes());
}

responseStream.write("\r\n".getBytes());
responseStream.write(response.getBodyContent());
writeToSocket(responseStream.toByteArray(), clientResponseOutput);
}

private void writeToSocket(byte[] response, OutputStream clientResponseOutput) throws IOException {
public void writeToSocket(byte[] response, OutputStream clientResponseOutput) throws IOException {
clientResponseOutput.write(response);
}
}
2 changes: 1 addition & 1 deletion src/main/java/http/util/ContentType.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public byte[] getBytesValue() {
return contentTypeString.getBytes();
}

public String getValueAsS() {
public String getValueAsString() {
return contentTypeString;
}
}
5 changes: 2 additions & 3 deletions src/main/java/http/util/ProgramArgParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,11 @@ public class ProgramArgParser {
private final String portSignifier = "-p";
private final String dirSignifier = "-d";
private HashMap<String, String> programParameters;
private int defaultPort;
private int defaultPort = 5000;

public ProgramArgParser(String[] programArgs, int defaultPort) {
public ProgramArgParser(String[] programArgs) {
addSignifiers(Arrays.asList(portSignifier, dirSignifier));
programParameters = new HashMap<>();
this.defaultPort = defaultPort;
parse(programArgs);
}

Expand Down
6 changes: 3 additions & 3 deletions src/test/java/http/Handlers/PatchHandlerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public void givenPatchRequestWithNoEtag_setPreconditionFailedResponse() throws I

@Test
public void givenPathRequestWithCorrectEtag_patchFileAndSetNoContentResponse() throws NoSuchAlgorithmException, IOException {
overwriteDataToFile("some stuff".getBytes(), fullTestPath);
overwriteDataToFile("some stuff".getBytes());

String SHAData = createSHA1();
HashMap<String, String> ETagHeader = new HashMap<>();
Expand All @@ -55,8 +55,8 @@ public void givenPathRequestWithCorrectEtag_patchFileAndSetNoContentResponse() t
assertArrayEquals("patched content".getBytes(), fileContentConverter.getFullContents(testPatchFile));
}

private void overwriteDataToFile(byte[] content, String path) throws IOException {
Files.write(Paths.get(path), content);
private void overwriteDataToFile(byte[] content) throws IOException {
Files.write(Paths.get("src/test/resources/testPatchFile.txt"), content);
}

private String createSHA1() throws NoSuchAlgorithmException, IOException {
Expand Down
6 changes: 3 additions & 3 deletions src/test/java/http/Handlers/PutHandlerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public void givenPutRequestForNonExistentFile_createFileAndSetCreatedResponse()

@Test
public void givenPutRequestForExistingFile_updateFileAndSetOKResponse() throws IOException {
overwriteDataToFile("some words".getBytes(), fullTestPath);
overwriteDataToFile("some words".getBytes());

String updatedContents = "Updated text";
Request request = new Request(HTTPVerb.PUT, resourcePath, emptyHeaders, updatedContents);
Expand All @@ -54,7 +54,7 @@ private void deleteTestFileIfExists() throws IOException {
}
}

private void overwriteDataToFile(byte[] content, String path) throws IOException {
Files.write(Paths.get(path), content);
private void overwriteDataToFile(byte[] content) throws IOException {
Files.write(Paths.get("src/test/resources/newFile.txt"), content);
}
}
34 changes: 34 additions & 0 deletions src/test/java/http/server/ResponseConstructorTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package http.server;

import http.Response.Response;
import http.Response.ResponseStatus;
import http.util.ContentType;
import org.junit.Test;

import java.io.IOException;

import static org.junit.Assert.assertArrayEquals;

public class ResponseConstructorTest {

@Test
public void constructsResponse() throws IOException {
ResponseStatus exampleStatus = ResponseStatus.OK;
ContentType exampleContentType = ContentType.TXT;
String exampleContents = "any contents";

Response mockResponse = new Response();
mockResponse.setStatus(exampleStatus);
mockResponse.setContentTypeHeader(exampleContentType);
mockResponse.setBodyContent(exampleContents.getBytes());

String expectedResponse = ("HTTP/1.1" + " " + exampleStatus.getPhraseAsString()
+ "\r\n" + "Content-Type: " + exampleContentType.getValueAsString()
+ "\r\n\r\n" + exampleContents);

ResponseConstructor responseConstructor = new ResponseConstructor();
byte[] actualResponse = responseConstructor.construct(mockResponse);

assertArrayEquals(expectedResponse.getBytes(), actualResponse);
}
}
46 changes: 0 additions & 46 deletions src/test/java/http/server/ResponseWriterTest.java

This file was deleted.

1 change: 1 addition & 0 deletions src/test/java/http/util/FileContentConverterTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package http.util;

import http.server.ResponseWriter;
import org.junit.Test;

import java.io.File;
Expand Down
36 changes: 5 additions & 31 deletions src/test/java/http/util/ProgramArgParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,48 +6,22 @@

public class ProgramArgParserTest {

@Test
public void givenPortNumberArg_setPort() {
String portArg = "5000";
int port = Integer.parseInt(portArg);
String[] programArgs = {"-p", portArg};

int defaultPort = 5000;
ProgramArgParser programArgParser = new ProgramArgParser(programArgs, defaultPort);

assertEquals(port, programArgParser.getPort());
}

@Test
public void givenDirArg_setRootDir() {
String dirArg = "src/test/resources/";
String[] programArgs = {"-d", dirArg};

int defaultPort = 5000;
ProgramArgParser programArgParser = new ProgramArgParser(programArgs, defaultPort);

assertEquals(dirArg, programArgParser.getRootPath());
}

@Test
public void givenPortAndDirArgs_setBoth() {
String portArg = "5000";
int port = Integer.parseInt(portArg);
String dirArg = "src/test/resources/";
String[] programArgs = {"-p", portArg, "-d", dirArg};

int defaultPort = 5000;
ProgramArgParser programArgParser = new ProgramArgParser(programArgs, defaultPort);
ProgramArgParser programArgParser = new ProgramArgParser(programArgs);

assertEquals(port, programArgParser.getPort());
assertEquals(Integer.parseInt(portArg), programArgParser.getPort());
assertEquals(dirArg, programArgParser.getRootPath());
}

@Test
public void givenNoPort_setDefault() {
String[] programArgs = {};
int defaultPort = 5000;
ProgramArgParser programArgParser = new ProgramArgParser(programArgs, defaultPort);
public void givenNoPort_defaultExists() {
String[] emptyArgs = {};
ProgramArgParser programArgParser = new ProgramArgParser(emptyArgs);

assertEquals(5000, programArgParser.getPort());
}
Expand Down