Skip to content

Commit 6e242fa

Browse files
committed
Add LoggerStub and test that RequestParser calls a Logger
1 parent 95a46b3 commit 6e242fa

File tree

9 files changed

+90
-39
lines changed

9 files changed

+90
-39
lines changed

src/main/java/httpserver/App.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package httpserver;
22

3+
import httpserver.file.FileOperator;
34
import httpserver.file.PathExaminer;
45

56
import java.io.IOException;
@@ -15,13 +16,16 @@ public static void main(String[] args) throws IOException {
1516
String fileDirectory = args[3];
1617

1718
Path root = new PathExaminer().getPath(fileDirectory);
19+
ServerSocket serverSocket = new ServerSocket(port);
1820

1921
ExecutorService pool = Executors.newFixedThreadPool(16);
20-
ServerSocket serverSocket = new ServerSocket(port);
22+
2123
while (true) {
2224
Socket clientSocket = serverSocket.accept();
2325
SocketHandler socketHandler = new SocketHandler(root,
24-
clientSocket.getInputStream(), clientSocket.getOutputStream());
26+
new FileLogger(root, new FileOperator()),
27+
clientSocket.getInputStream(),
28+
clientSocket.getOutputStream());
2529
pool.execute(socketHandler);
2630
}
2731
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package httpserver;
2+
3+
import httpserver.file.FileOperator;
4+
5+
import java.io.IOException;
6+
import java.nio.file.Path;
7+
8+
public class FileLogger implements Logger {
9+
private final FileOperator fileOperator;
10+
private final Path logPath;
11+
12+
public FileLogger(Path logPath, FileOperator fileOperator) {
13+
this.fileOperator = fileOperator;
14+
this.logPath = logPath;
15+
createFileIfDoesntExist(logPath);
16+
}
17+
18+
@Override
19+
public void log(String logString){
20+
byte[] logBytes = (logString + "\r\n").getBytes();
21+
try {
22+
fileOperator.appendToFile(logPath, logBytes);
23+
} catch (IOException e) {
24+
e.printStackTrace();
25+
}
26+
}
27+
28+
private void createFileIfDoesntExist(Path path) {
29+
try {
30+
fileOperator.createFileAtPath(path);
31+
} catch (IOException e) {}
32+
}
33+
}
Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,5 @@
11
package httpserver;
22

3-
import httpserver.file.FileOperator;
4-
5-
import java.io.IOException;
6-
import java.nio.file.Path;
7-
8-
public class Logger {
9-
private final FileOperator fileOperator;
10-
private final Path logPath;
11-
12-
public Logger(Path logPath, FileOperator fileOperator) {
13-
this.fileOperator = fileOperator;
14-
this.logPath = logPath;
15-
createFileIfDoesntExist(logPath);
16-
}
17-
18-
public void log(String logString) throws IOException {
19-
byte[] logBytes = (logString + "\r\n").getBytes();
20-
fileOperator.appendToFile(logPath, logBytes);
21-
}
22-
23-
private void createFileIfDoesntExist(Path path) {
24-
try {
25-
fileOperator.createFileAtPath(path);
26-
} catch (IOException e) {}
27-
}
3+
public interface Logger {
4+
void log(String logString);
285
}

src/main/java/httpserver/RequestParser.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,19 @@
77
import java.util.HashMap;
88

99
public class RequestParser {
10+
private final Logger logger;
11+
12+
public RequestParser(Logger logger) {
13+
this.logger = logger;
14+
}
15+
1016
public Request parse(InputStream inputStream) throws IOException {
1117
BufferedReader in = new BufferedReader( new InputStreamReader(inputStream));
1218

13-
String[] requestParams = in.readLine().split(" ");
19+
String firstLine = in.readLine();
20+
logger.log(firstLine);
21+
22+
String[] requestParams = firstLine.split(" ");
1423
HashMap<String, String> headers = parseHeaders(in);
1524

1625
return new Request(requestParams[0], requestParams[1], headers);

src/main/java/httpserver/SocketHandler.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010

1111
public class SocketHandler implements Runnable {
1212
private final Path root;
13+
private final Logger logger;
1314
private final InputStream inputStream;
1415
private final OutputStream outputStream;
1516

16-
public SocketHandler(Path root, InputStream inputStream, OutputStream outputStream) {
17+
public SocketHandler(Path root, Logger logger, InputStream inputStream, OutputStream outputStream) {
1718
this.root = root;
19+
this.logger = logger;
1820
this.inputStream = inputStream;
1921
this.outputStream = outputStream;
2022
}
@@ -23,7 +25,7 @@ public void run() {
2325
Response response;
2426

2527
try {
26-
Request request = new RequestParser().parse(inputStream);
28+
Request request = new RequestParser(logger).parse(inputStream);
2729
response = new GeneralResponder().respond(root, request);
2830
} catch (Exception e) {
2931
response = new NotFoundResponse();

src/test/java/httpserver/LoggerTest.java renamed to src/test/java/httpserver/FileLoggerTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import httpserver.file.FileOperator;
44
import org.junit.Test;
55

6-
import java.io.File;
76
import java.nio.file.Path;
87
import java.nio.file.Paths;
98
import java.nio.file.StandardOpenOption;
@@ -14,30 +13,30 @@
1413
import static java.nio.file.Files.exists;
1514
import static org.junit.Assert.*;
1615

17-
public class LoggerTest {
16+
public class FileLoggerTest {
1817
@Test
1918
public void createsLogFileOnConstructDoesntOverwrite() throws Exception {
2019
Path logPath = Paths.get(tempDir().toString(), "logs");
2120

22-
new Logger(logPath, new FileOperator());
21+
new FileLogger(logPath, new FileOperator());
2322

2423
assertTrue(exists(logPath));
2524

2625
write(logPath, "fake log line\r\n".getBytes(),
2726
StandardOpenOption.APPEND);
2827

29-
new Logger(logPath, new FileOperator());
28+
new FileLogger(logPath, new FileOperator());
3029

3130
assertEquals("fake log line\r\n", new String(readAllBytes(logPath)));
3231
}
3332

3433
@Test
3534
public void onLogCallsFileOperatorAppendWithPathAndPayload() throws Exception {
3635
Path logPath = Paths.get(tempDir().toString(), "logs");
37-
Logger logger = new Logger(logPath, new FileOperator());
36+
FileLogger fileLogger = new FileLogger(logPath, new FileOperator());
3837

39-
logger.log("POST example");
40-
logger.log("HEAD example");
38+
fileLogger.log("POST example");
39+
fileLogger.log("HEAD example");
4140

4241
assertEquals("POST example\r\nHEAD example\r\n", new String(readAllBytes(logPath)));
4342
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package httpserver;
2+
3+
public class LoggerStub implements Logger {
4+
public String logCalledWith;
5+
6+
public LoggerStub() {
7+
this.logCalledWith = null;
8+
}
9+
10+
@Override
11+
public void log(String logString) {
12+
logCalledWith = logString;
13+
return;
14+
}
15+
}

src/test/java/httpserver/RequestParserTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111

1212
public class RequestParserTest {
1313
private final RequestParser requestParser;
14+
private final LoggerStub loggerStub;
1415

1516
public RequestParserTest() {
16-
this.requestParser = new RequestParser();
17+
this.loggerStub = new LoggerStub();
18+
this.requestParser = new RequestParser(loggerStub);
1719
}
1820

1921
@Test
@@ -46,6 +48,14 @@ public void parsesHeaderWithExtraWhitespace() throws Exception {
4648
assertEquals("example", headers.get("Extra-space"));
4749
}
4850

51+
@Test
52+
public void callsLogOnLogger() throws Exception {
53+
InputStream inputStream = new ByteArrayInputStream("GET /text-file.txt HTTP/1.1\r\n\r\n".getBytes());
54+
requestParser.parse(inputStream);
55+
56+
assertEquals("GET /text-file.txt HTTP/1.1", loggerStub.logCalledWith);
57+
}
58+
4959
private Request requestForInput(String input) throws IOException {
5060
InputStream inputStream = new ByteArrayInputStream(input.getBytes());
5161
return requestParser.parse(inputStream);

src/test/java/httpserver/SocketHandlerTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package httpserver;
22

3+
import httpserver.file.FileOperator;
34
import org.junit.Test;
45

56
import java.io.*;
@@ -96,8 +97,9 @@ public void returns405ForUnsupportedMethod() throws Exception {
9697
private String stringOutputForRequestBytes(byte[] request) throws IOException {
9798
InputStream inputStream = new ByteArrayInputStream(request);
9899
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
100+
FileLogger fileLogger = new FileLogger(root, new FileOperator());
99101

100-
SocketHandler socketHandler = new SocketHandler(root, inputStream, outputStream);
102+
SocketHandler socketHandler = new SocketHandler(root, fileLogger, inputStream, outputStream);
101103
socketHandler.run();
102104

103105
return outputStream.toString();

0 commit comments

Comments
 (0)