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

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

Issue 9834008: Add error handling to the HTTP library (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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
« runtime/bin/http_parser.dart ('K') | « runtime/bin/socket_stream_impl.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 73aacaf4976a55f83191715218c97e3a8f6285f2..c767ea559b4123fdbe3ea9d222902a10518d049b 100644
--- a/tests/standalone/src/io/HttpParserTest.dart
+++ b/tests/standalone/src/io/HttpParserTest.dart
@@ -8,6 +8,8 @@ class HttpParserTest {
static void runAllTests() {
testParseRequest();
testParseResponse();
+ testParseInvalidRequest();
+ testParseInvalidResponse();
}
static void _testParseRequest(String request,
@@ -89,6 +91,43 @@ class HttpParserTest {
testWrite(requestData, 1);
}
+ static void _testParseInvalidRequest(String request) {
+ _HttpParser httpParser;
+ bool errorCalled;
+
+ void reset() {
+ httpParser = new _HttpParser();
+ httpParser.responseStart = (s, r) { Expect.fail("Expected request"); };
+ httpParser.error = (e) {
+ errorCalled = true;
+ };
+
+ errorCalled = false;
+ }
+
+ void checkExpectations() {
Mads Ager (google) 2012/03/22 14:30:08 Not sure that this method adds much. Just inline?
Søren Gjesse 2012/03/23 07:34:20 Done.
+ Expect.isTrue(errorCalled);
+ }
+
+ void testWrite(List<int> requestData, [int chunkSize = -1]) {
+ if (chunkSize == -1) chunkSize = requestData.length;
+ reset();
+ for (int pos = 0; pos < requestData.length; pos += chunkSize) {
+ int remaining = requestData.length - pos;
+ int writeLength = Math.min(chunkSize, remaining);
+ httpParser.writeList(requestData, pos, writeLength);
+ }
+ checkExpectations();
+ }
+
+ // Test parsing the request three times delivering the data in
+ // different chunks.
+ List<int> requestData = request.charCodes();
+ testWrite(requestData);
+ testWrite(requestData, 10);
+ testWrite(requestData, 1);
+ }
+
static void _testParseResponse(String response,
int expectedStatusCode,
String expectedReasonPhrase,
@@ -177,6 +216,42 @@ class HttpParserTest {
testWrite(responseData, 1);
}
+ static void _testParseInvalidResponse(String response, [bool close = false]) {
+ _HttpParser httpParser;
+ bool errorCalled;
+
+ void reset() {
+ httpParser = new _HttpParser();
+ httpParser.requestStart = (m, u) => Expect.fail("Expected response");
+ httpParser.error = (e) => errorCalled = true;
+
+ errorCalled = false;
+ }
+
+ void checkExpectations() {
Mads Ager (google) 2012/03/22 14:30:08 Ditto.
Søren Gjesse 2012/03/23 07:34:20 Done.
+ Expect.isTrue(errorCalled);
+ }
+
+ void testWrite(List<int> requestData, [int chunkSize = -1]) {
+ if (chunkSize == -1) chunkSize = requestData.length;
+ reset();
+ for (int pos = 0; pos < requestData.length; pos += chunkSize) {
+ int remaining = requestData.length - pos;
+ int writeLength = Math.min(chunkSize, remaining);
+ httpParser.writeList(requestData, pos, writeLength);
+ }
+ if (close) httpParser.connectionClosed();
+ checkExpectations();
+ }
+
+ // Test parsing the request three times delivering the data in
+ // different chunks.
+ List<int> responseData = response.charCodes();
+ testWrite(responseData);
+ testWrite(responseData, 10);
+ testWrite(responseData, 1);
+ }
+
static void testParseRequest() {
String request;
Map headers;
@@ -437,7 +512,7 @@ Transfer-Encoding: chunked\r
chunked: true);
// Test HTTP response without any transfer length indications
- // where closing the connections indicated end of body.
+ // where closing the connections indicates end of body.
response = """
HTTP/1.1 200 OK\r
\r
@@ -451,6 +526,85 @@ HTTP/1.1 200 OK\r
expectedBytesReceived: 59,
close: true);
}
+
+ static void testParseInvalidRequest() {
+ String request;
+ request = "GET /\r\n\r\n";
+ _testParseInvalidRequest(request);
+
+ request = "GET / \r\n\r\n";
+ _testParseInvalidRequest(request);
+
+ request = "/ HTTP/1.1\r\n\r\n";
+ _testParseInvalidRequest(request);
+
+ request = "GET HTTP/1.1\r\n\r\n";
+ _testParseInvalidRequest(request);
+
+ request = " / HTTP/1.1\r\n\r\n";
+ _testParseInvalidRequest(request);
+
+ request = "@ / HTTP/1.1\r\n\r\n";
+ _testParseInvalidRequest(request);
+
+ request = "GET / TTP/1.1\r\n\r\n";
+ _testParseInvalidRequest(request);
+
+ request = "GET / HTTP/1.\r\n\r\n";
+ _testParseInvalidRequest(request);
+
+ // Currently no HTTP 1.0 support.
+ request = "GET / HTTP/1.0\r\n\r\n";
+ _testParseInvalidRequest(request);
+ }
+
+ static void testParseInvalidResponse() {
+ String response;
+
+ response = "HTTP/1.1\r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "HTTP/1.1 \r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "HTTP/1.1 200\r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "HTTP/1.1 200 \r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "HTTP/1.1 OK\r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "200 OK\r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "HTTP/1. 200 OK\r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "HTTP/1.1 200 O\rK\r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "HTTP/1.1 000 OK\r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "HTTP/1.1 999 Server Error\r\nContent-Length: 0\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = "HTTP/1.1 200 OK\r\nContent-Length: x\r\n\r\n";
+ _testParseInvalidResponse(response);
+
+ response = """
+HTTP/1.1 200 OK\r
+Transfer-Encoding: chunked\r
+\r
+1A\r
+01234567890123456789012345\r
+1g\r
+0123456789012345678901234567890\r
+0\r\n\r\n""";
+ _testParseInvalidResponse(response);
+ }
}
« runtime/bin/http_parser.dart ('K') | « runtime/bin/socket_stream_impl.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698