Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(846)

Unified Diff: tests/standalone/src/io/HttpParserTest.dart

Issue 9812005: Change the message body handling in the HTTP parser (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Addressed review comments Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/bin/http_parser.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/standalone/src/io/HttpParserTest.dart
diff --git a/tests/standalone/src/io/HttpParserTest.dart b/tests/standalone/src/io/HttpParserTest.dart
index 18afc4ac53367622ad34e29d849723c9a9b869a6..73aacaf4976a55f83191715218c97e3a8f6285f2 100644
--- a/tests/standalone/src/io/HttpParserTest.dart
+++ b/tests/standalone/src/io/HttpParserTest.dart
@@ -13,7 +13,7 @@ class HttpParserTest {
static void _testParseRequest(String request,
String expectedMethod,
String expectedUri,
- [int expectedContentLength = 0,
+ [int expectedContentLength = -1,
int expectedBytesReceived = 0,
Map expectedHeaders = null,
bool chunked = false]) {
@@ -81,12 +81,6 @@ class HttpParserTest {
checkExpectations();
}
- void testWriteAll(List<int> requestData) {
- reset();
- httpParser.writeList(requestData, 0, requestData.length);
- checkExpectations();
- }
-
// Test parsing the request three times delivering the data in
// different chunks.
List<int> requestData = request.charCodes();
@@ -98,11 +92,12 @@ class HttpParserTest {
static void _testParseResponse(String response,
int expectedStatusCode,
String expectedReasonPhrase,
- [int expectedContentLength = 0,
+ [int expectedContentLength = -1,
int expectedBytesReceived = 0,
Map expectedHeaders = null,
bool chunked = false,
- bool close = false]) {
+ bool close = false,
+ String responseToMethod = null]) {
_HttpParser httpParser;
bool headersCompleteCalled;
bool dataEndCalled;
@@ -114,6 +109,9 @@ class HttpParserTest {
void reset() {
httpParser = new _HttpParser();
+ if (responseToMethod != null) {
+ httpParser.responseToMethod = responseToMethod;
+ }
httpParser.requestStart = (m, u) => Expect.fail("Expected response");
httpParser.responseStart = (s, r) {
statusCode = s;
@@ -171,12 +169,6 @@ class HttpParserTest {
checkExpectations();
}
- void testWriteAll(List<int> requestData) {
- reset();
- httpParser.writeList(requestData, 0, requestData.length);
- checkExpectations();
- }
-
// Test parsing the request three times delivering the data in
// different chunks.
List<int> responseData = response.charCodes();
@@ -188,48 +180,45 @@ class HttpParserTest {
static void testParseRequest() {
String request;
Map headers;
- request = "GET / HTTP/1.1\r\nContent-Length: 0\r\n\r\n";
+ request = "GET / HTTP/1.1\r\n\r\n";
_testParseRequest(request, "GET", "/");
- request = "POST / HTTP/1.1\r\nContent-Length: 0\r\n\r\n";
+ request = "POST / HTTP/1.1\r\n\r\n";
_testParseRequest(request, "POST", "/");
- request = "GET /index.html HTTP/1.1\r\nContent-Length: 0\r\n\r\n";
+ request = "GET /index.html HTTP/1.1\r\n\r\n";
_testParseRequest(request, "GET", "/index.html");
- request = "POST /index.html HTTP/1.1\r\nContent-Length: 0\r\n\r\n";
+ request = "POST /index.html HTTP/1.1\r\n\r\n";
_testParseRequest(request, "POST", "/index.html");
- request = "H /index.html HTTP/1.1\r\nContent-Length: 0\r\n\r\n";
+ request = "H /index.html HTTP/1.1\r\n\r\n";
_testParseRequest(request, "H", "/index.html");
- request = "HT /index.html HTTP/1.1\r\nContent-Length: 0\r\n\r\n";
+ request = "HT /index.html HTTP/1.1\r\n\r\n";
_testParseRequest(request, "HT", "/index.html");
- request = "HTT /index.html HTTP/1.1\r\nContent-Length: 0\r\n\r\n";
+ request = "HTT /index.html HTTP/1.1\r\n\r\n";
_testParseRequest(request, "HTT", "/index.html");
- request = "HTTP /index.html HTTP/1.1\r\nContent-Length: 0\r\n\r\n";
+ request = "HTTP /index.html HTTP/1.1\r\n\r\n";
_testParseRequest(request, "HTTP", "/index.html");
request = """
POST /test HTTP/1.1\r
AAA: AAA\r
-Content-Length: 0\r
\r
""";
_testParseRequest(request, "POST", "/test");
request = """
POST /test HTTP/1.1\r
-content-length: 0\r
\r
""";
_testParseRequest(request, "POST", "/test");
request = """
POST /test HTTP/1.1\r
-Content-Length: 0\r
Header-A: AAA\r
X-Header-B: bbb\r
\r
@@ -241,7 +230,6 @@ X-Header-B: bbb\r
request = """
POST /test HTTP/1.1\r
-Content-Length: 0\r
Header-A: AAA\r
X-Header-B:\t \t bbb\r
\r
@@ -253,7 +241,6 @@ X-Header-B:\t \t bbb\r
request = """
POST /test HTTP/1.1\r
-Content-Length: 0\r
Header-A: AA\r
A\r
X-Header-B: b\r
@@ -348,19 +335,77 @@ Transfer-Encoding: chunked\r
expectedContentLength: -1,
expectedBytesReceived: 60,
chunked: true);
+
+ // Test chunk extensions in chunked encoding.
+ request = """
+POST /test HTTP/1.1\r
+Transfer-Encoding: chunked\r
+\r
+1E;xxx\r
+012345678901234567890123456789\r
+1E;yyy=zzz\r
+012345678901234567890123456789\r
+0\r\n\r\n""";
+ _testParseRequest(request,
+ "POST",
+ "/test",
+ expectedContentLength: -1,
+ expectedBytesReceived: 60,
+ chunked: true);
}
static void testParseResponse() {
String response;
Map headers;
+ response = "HTTP/1.1 100 Continue\r\nContent-Length: 0\r\n\r\n";
+ _testParseResponse(response, 100, "Continue", expectedContentLength: 0);
+
+ response = "HTTP/1.1 100 Continue\r\nContent-Length: 10\r\n\r\n";
+ _testParseResponse(response,
+ 100,
+ "Continue",
+ expectedContentLength: 10,
+ expectedBytesReceived: 0);
+
+ response = "HTTP/1.1 204 No Content\r\nContent-Length: 11\r\n\r\n";
+ _testParseResponse(response,
+ 204,
+ "No Content",
+ expectedContentLength: 11,
+ expectedBytesReceived: 0);
+
+ response = "HTTP/1.1 304 Not Modified\r\nContent-Length: 12\r\n\r\n";
+ _testParseResponse(response,
+ 304,
+ "Not Modified",
+ expectedContentLength: 12,
+ expectedBytesReceived: 0);
+
response = "HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n";
- _testParseResponse(response, 200, "OK");
+ _testParseResponse(response, 200, "OK", expectedContentLength: 0);
response = "HTTP/1.1 404 Not found\r\nContent-Length: 0\r\n\r\n";
- _testParseResponse(response, 404, "Not found");
+ _testParseResponse(response, 404, "Not found", expectedContentLength: 0);
response = "HTTP/1.1 500 Server error\r\nContent-Length: 0\r\n\r\n";
- _testParseResponse(response, 500, "Server error");
+ _testParseResponse(response, 500, "Server error", expectedContentLength: 0);
+
+ // Test response to HEAD request.
+ response = """
+HTTP/1.1 200 OK\r
+Content-Length: 20\r
+Content-Type: text/html\r
+\r\n""";
+ headers = new Map();
+ headers["content-length"] = "20";
+ headers["content-type"] = "text/html";
+ _testParseResponse(response,
+ 200,
+ "OK",
+ responseToMethod: "HEAD",
+ expectedContentLength: 20,
+ expectedBytesReceived: 0,
+ expectedHeaders: headers);
// Test content.
response = """
@@ -368,7 +413,6 @@ HTTP/1.1 200 OK\r
Content-Length: 20\r
\r
01234567890123456789""";
-
_testParseResponse(response,
200,
"OK",
« no previous file with comments | « runtime/bin/http_parser.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698