diff --git a/.gitignore b/.gitignore
index 8d6fe30..0b51775 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index bc8d0a3..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/java/http/Main.java b/src/main/java/http/Main.java
index 2970791..d9cd5e0 100644
--- a/src/main/java/http/Main.java
+++ b/src/main/java/http/Main.java
@@ -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);
diff --git a/src/main/java/http/Response/ResponseStatus.java b/src/main/java/http/Response/ResponseStatus.java
index 50ac084..3b3a424 100644
--- a/src/main/java/http/Response/ResponseStatus.java
+++ b/src/main/java/http/Response/ResponseStatus.java
@@ -27,7 +27,7 @@ public byte[] getPhrase() {
return phrase.getBytes();
}
- public String getPhraseAsS() {
+ public String getPhraseAsString() {
return phrase;
}
diff --git a/src/main/java/http/server/ConnectionManager.java b/src/main/java/http/server/ConnectionManager.java
index 84d680a..00ba47e 100644
--- a/src/main/java/http/server/ConnectionManager.java
+++ b/src/main/java/http/server/ConnectionManager.java
@@ -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;
@@ -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 {
diff --git a/src/main/java/http/server/ResponseConstructor.java b/src/main/java/http/server/ResponseConstructor.java
new file mode 100644
index 0000000..5397d99
--- /dev/null
+++ b/src/main/java/http/server/ResponseConstructor.java
@@ -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 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();
+ }
+}
diff --git a/src/main/java/http/server/ResponseWriter.java b/src/main/java/http/server/ResponseWriter.java
index b3fe67c..7e9c7da 100644
--- a/src/main/java/http/server/ResponseWriter.java
+++ b/src/main/java/http/server/ResponseWriter.java
@@ -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 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);
}
}
diff --git a/src/main/java/http/util/ContentType.java b/src/main/java/http/util/ContentType.java
index 98e7310..cdb83a1 100644
--- a/src/main/java/http/util/ContentType.java
+++ b/src/main/java/http/util/ContentType.java
@@ -18,7 +18,7 @@ public byte[] getBytesValue() {
return contentTypeString.getBytes();
}
- public String getValueAsS() {
+ public String getValueAsString() {
return contentTypeString;
}
}
diff --git a/src/main/java/http/util/ProgramArgParser.java b/src/main/java/http/util/ProgramArgParser.java
index 05b1501..aae4261 100644
--- a/src/main/java/http/util/ProgramArgParser.java
+++ b/src/main/java/http/util/ProgramArgParser.java
@@ -11,12 +11,11 @@ public class ProgramArgParser {
private final String portSignifier = "-p";
private final String dirSignifier = "-d";
private HashMap 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);
}
diff --git a/src/test/java/http/Handlers/PatchHandlerTest.java b/src/test/java/http/Handlers/PatchHandlerTest.java
index e0f34c1..b9a827a 100644
--- a/src/test/java/http/Handlers/PatchHandlerTest.java
+++ b/src/test/java/http/Handlers/PatchHandlerTest.java
@@ -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 ETagHeader = new HashMap<>();
@@ -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 {
diff --git a/src/test/java/http/Handlers/PutHandlerTest.java b/src/test/java/http/Handlers/PutHandlerTest.java
index 2e9c726..e6ceed1 100644
--- a/src/test/java/http/Handlers/PutHandlerTest.java
+++ b/src/test/java/http/Handlers/PutHandlerTest.java
@@ -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);
@@ -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);
}
}
\ No newline at end of file
diff --git a/src/test/java/http/server/ResponseConstructorTest.java b/src/test/java/http/server/ResponseConstructorTest.java
new file mode 100644
index 0000000..c6fe27b
--- /dev/null
+++ b/src/test/java/http/server/ResponseConstructorTest.java
@@ -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);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/http/server/ResponseWriterTest.java b/src/test/java/http/server/ResponseWriterTest.java
deleted file mode 100644
index ffb17de..0000000
--- a/src/test/java/http/server/ResponseWriterTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package http.server;
-
-import http.Response.Response;
-import http.Response.ResponseStatus;
-import http.util.ContentType;
-import http.util.IOHelper;
-import org.junit.Test;
-
-import java.io.IOException;
-
-import static junit.framework.TestCase.assertEquals;
-
-public class ResponseWriterTest {
-
- @Test
- public void buildsResponse_simpleGET_NoHeaders() throws IOException {
- ResponseStatus exampleStatus = ResponseStatus.OK;
- ContentType exampleContentType = ContentType.TXT;
- String exampleContents = "file1 contents";
-
- Response mockResponse = makeResponse(exampleStatus,
- exampleContentType, exampleContents.getBytes());
- IOHelper clientIO = new IOHelper("");
-
- String expectedResponse = makeExpectedR(exampleStatus,
- exampleContentType, exampleContents);
-
- ResponseWriter responseWriter = new ResponseWriter();
- responseWriter.write(mockResponse, clientIO.getOut());
-
- assertEquals(expectedResponse, clientIO.getStringOutput());
- }
-
- private Response makeResponse(ResponseStatus status, ContentType contentType, byte[] bodyContents) {
- Response mockResponse = new Response();
- mockResponse.setStatus(status);
- mockResponse.setContentTypeHeader(contentType);
- mockResponse.setBodyContent(bodyContents);
- return mockResponse;
- }
-
- private String makeExpectedR(ResponseStatus status, ContentType contentType, String bodyContents) {
- return ("HTTP/1.1" + " " + status.getPhraseAsS() + "\r\n" + "Content-Type: "
- + contentType.getValueAsS() + "\r\n\r\n" + bodyContents);
- }
-}
\ No newline at end of file
diff --git a/src/test/java/http/util/FileContentConverterTest.java b/src/test/java/http/util/FileContentConverterTest.java
index 4118602..fe8b384 100644
--- a/src/test/java/http/util/FileContentConverterTest.java
+++ b/src/test/java/http/util/FileContentConverterTest.java
@@ -1,5 +1,6 @@
package http.util;
+import http.server.ResponseWriter;
import org.junit.Test;
import java.io.File;
diff --git a/src/test/java/http/util/ProgramArgParserTest.java b/src/test/java/http/util/ProgramArgParserTest.java
index 0f80bde..91e7537 100644
--- a/src/test/java/http/util/ProgramArgParserTest.java
+++ b/src/test/java/http/util/ProgramArgParserTest.java
@@ -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());
}