From c519e02d3061cbff8cdff157948d3b682fe8240e Mon Sep 17 00:00:00 2001 From: Dae-Hwa Date: Wed, 8 Sep 2021 18:45:53 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20RequestHeader=EC=97=90=EC=84=9C=20C?= =?UTF-8?q?ontentLength=20=EB=B0=94=EB=A1=9C=20=EA=B0=80=EC=A0=B8=EC=98=A4?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/webserver/RequestHandler.java | 3 +- .../java/webserver/http/header/Header.java | 4 + .../java/webserver/RequestHandlerTest.java | 15 +- .../http/header/RequestHeaderTest.java | 253 ++++++++++-------- 4 files changed, 155 insertions(+), 120 deletions(-) diff --git a/src/main/java/webserver/RequestHandler.java b/src/main/java/webserver/RequestHandler.java index 473cb85..f99c7a1 100644 --- a/src/main/java/webserver/RequestHandler.java +++ b/src/main/java/webserver/RequestHandler.java @@ -43,8 +43,7 @@ public void run() { RequestHeader requestHeader = RequestHeader.from(requestMessages.toString()); - int contentLength = Integer.parseInt(requestHeader.getAttributes().getOrDefault("Content-Length", "0")); - String requestBody = IOUtils.readData(br, contentLength); + String requestBody = IOUtils.readData(br, requestHeader.getContentLength()); requestMessages.add(System.lineSeparator() + requestBody); diff --git a/src/main/java/webserver/http/header/Header.java b/src/main/java/webserver/http/header/Header.java index 377bbc9..244eed7 100644 --- a/src/main/java/webserver/http/header/Header.java +++ b/src/main/java/webserver/http/header/Header.java @@ -47,4 +47,8 @@ public byte[] getBytes() { } protected abstract String getStatusLine(); + + public int getContentLength() { + return Integer.parseInt(attributes.getOrDefault("Content-Length", "0")); + } } diff --git a/src/test/java/webserver/RequestHandlerTest.java b/src/test/java/webserver/RequestHandlerTest.java index c4be1b9..04d60c0 100644 --- a/src/test/java/webserver/RequestHandlerTest.java +++ b/src/test/java/webserver/RequestHandlerTest.java @@ -4,14 +4,16 @@ import model.User; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.*; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.net.BindException; import java.net.ServerSocket; import java.net.Socket; @@ -25,7 +27,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; -import static webserver.FileForTest.*; +import static webserver.FileForTest.FORM_HTML; +import static webserver.FileForTest.INDEX_HTML; class RequestHandlerTest { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -394,7 +397,7 @@ static Stream loginHandler() { .setName("test") .setEmail("test@test") .build(), - new HashMap() {{ + new HashMap() {{ put("userId", "test"); put("password", "test"); put("name", "test"); @@ -411,7 +414,7 @@ static Stream loginHandler() { .setName("test") .setEmail("test@test") .build(), - new HashMap() {{ + new HashMap() {{ put("userId", "wrongId"); put("password", "test"); put("name", "test"); @@ -428,7 +431,7 @@ static Stream loginHandler() { .setName("test") .setEmail("test@test") .build(), - new HashMap() {{ + new HashMap() {{ put("userId", "test"); put("password", "wrongPassword"); put("name", "test"); diff --git a/src/test/java/webserver/http/header/RequestHeaderTest.java b/src/test/java/webserver/http/header/RequestHeaderTest.java index 5b83ae5..ff39d0a 100644 --- a/src/test/java/webserver/http/header/RequestHeaderTest.java +++ b/src/test/java/webserver/http/header/RequestHeaderTest.java @@ -27,39 +27,39 @@ void getAttributes(String headerText, Map expectedAttributes) { static Stream getAttributes() { return Stream.of( Arguments.of("GET / HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: none" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + - System.lineSeparator(), - new LinkedHashMap() {{ - put("Host", "localhost:8080"); - put("Connection", "keep-alive"); - put("Cache-Control", "max-age=0"); - put("sec-ch-ua", "\"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\""); - put("sec-ch-ua-mobile", "?0"); - put("Upgrade-Insecure-Requests", "1"); - put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"); - put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); - put("Sec-Fetch-Site", "none"); - put("Sec-Fetch-Mode", "navigate"); - put("Sec-Fetch-User", "?1"); - put("Sec-Fetch-Dest", "document"); - put("Accept-Encoding", "gzip, deflate, br"); - put("Accept-Language", "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7"); - put("Cookie", "Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443"); - }} + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: none" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + + System.lineSeparator(), + new LinkedHashMap() {{ + put("Host", "localhost:8080"); + put("Connection", "keep-alive"); + put("Cache-Control", "max-age=0"); + put("sec-ch-ua", "\"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\""); + put("sec-ch-ua-mobile", "?0"); + put("Upgrade-Insecure-Requests", "1"); + put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"); + put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); + put("Sec-Fetch-Site", "none"); + put("Sec-Fetch-Mode", "navigate"); + put("Sec-Fetch-User", "?1"); + put("Sec-Fetch-Dest", "document"); + put("Accept-Encoding", "gzip, deflate, br"); + put("Accept-Language", "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7"); + put("Cookie", "Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443"); + }} ) ); } @@ -75,32 +75,32 @@ static Stream getMethod() { return Stream.of( Arguments.of( "GET / HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: none" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + - System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: none" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + + System.lineSeparator(), "GET" ), Arguments.of( "POST /user/create HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Content-Length: 59" + System.lineSeparator() + - "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + - "Accept: */*" + System.lineSeparator() + - "" + System.lineSeparator() + - "userId=javajigi&password=password&name=%EB%B0%95%EC%9E%AC%EC%84%B1&email=javajigi%40slipp.net", + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Content-Length: 59" + System.lineSeparator() + + "Content-Type: application/x-www-form-urlencoded" + System.lineSeparator() + + "Accept: */*" + System.lineSeparator() + + "" + System.lineSeparator() + + "userId=javajigi&password=password&name=%EB%B0%95%EC%9E%AC%EC%84%B1&email=javajigi%40slipp.net", "POST" ) ); @@ -118,29 +118,29 @@ void getStatusLineAttributes(String headerText, RequestStatusLine expectedReques static Stream getStatusLineAttributes() { return Stream.of( Arguments.of("GET / HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: none" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + - System.lineSeparator(), - new RequestStatusLine( - new HashMap() {{ - put("method", "GET"); - put("path", "/"); - put("protocolVersion", "HTTP/1.1"); - }} - ) + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: none" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + + System.lineSeparator(), + new RequestStatusLine( + new HashMap() {{ + put("method", "GET"); + put("path", "/"); + put("protocolVersion", "HTTP/1.1"); + }} + ) ) ); } @@ -161,39 +161,39 @@ static Stream getBytes() { return Stream.of( Arguments.of( "GET / HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: none" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + - System.lineSeparator(), + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: none" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + + System.lineSeparator(), ("GET / HTTP/1.1" + System.lineSeparator() + - "Host: localhost:8080" + System.lineSeparator() + - "Connection: keep-alive" + System.lineSeparator() + - "Cache-Control: max-age=0" + System.lineSeparator() + - "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + - "sec-ch-ua-mobile: ?0" + System.lineSeparator() + - "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + - "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + - "Sec-Fetch-Site: none" + System.lineSeparator() + - "Sec-Fetch-Mode: navigate" + System.lineSeparator() + - "Sec-Fetch-User: ?1" + System.lineSeparator() + - "Sec-Fetch-Dest: document" + System.lineSeparator() + - "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + - "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + - "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + - System.lineSeparator()).getBytes(StandardCharsets.UTF_8) + "Host: localhost:8080" + System.lineSeparator() + + "Connection: keep-alive" + System.lineSeparator() + + "Cache-Control: max-age=0" + System.lineSeparator() + + "sec-ch-ua: \"Google Chrome\";v=\"89\", \"Chromium\";v=\"89\", \";Not A Brand\";v=\"99\"" + System.lineSeparator() + + "sec-ch-ua-mobile: ?0" + System.lineSeparator() + + "Upgrade-Insecure-Requests: 1" + System.lineSeparator() + + "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" + System.lineSeparator() + + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" + System.lineSeparator() + + "Sec-Fetch-Site: none" + System.lineSeparator() + + "Sec-Fetch-Mode: navigate" + System.lineSeparator() + + "Sec-Fetch-User: ?1" + System.lineSeparator() + + "Sec-Fetch-Dest: document" + System.lineSeparator() + + "Accept-Encoding: gzip, deflate, br" + System.lineSeparator() + + "Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7" + System.lineSeparator() + + "Cookie: Idea-1c77831=5ced54c8-cabd-4355-ae5a-97b17f9d7443" + System.lineSeparator() + + System.lineSeparator()).getBytes(StandardCharsets.UTF_8) ) ); } @@ -206,7 +206,7 @@ void getPath(String desc, RequestStatusLine statusLine, String expectedPath) { String actualPath = requestHeader.getPath(); assertThat(actualPath).as("리퀘스트 헤더에서 path 가져오기 : %s", desc) - .isEqualTo(expectedPath); + .isEqualTo(expectedPath); } static Stream getPath() { @@ -235,4 +235,33 @@ static Stream getPath() { ) ); } + + @ParameterizedTest + @MethodSource("getContentLength") + void getContentLength(RequestHeader requestHeader, int expectedContentLength) { + // rfc의 ContentLength 읽어보기(없을 경우는 어떻게 읽는지?) + // 헤더의 대소문자 가려서 읽어야 하는지 예를 들어 content-length + assertThat(requestHeader.getContentLength()).isEqualTo(expectedContentLength); + } + + static Stream getContentLength() { + return Stream.of( + Arguments.of( + new RequestHeader( + null, + new HashMap() {{ + put("Content-Length", "5"); + }} + ), + 5 + ), Arguments.of( + new RequestHeader( + null, + new HashMap() { + } + ), + 0 + ) + ); + } }