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

Side by Side Diff: tests/standalone/io/http_parser_test.dart

Issue 11410003: Refactoring of the HTTP library (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Revers accidental edits Created 8 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:math'; 5 import 'dart:math';
6 import 'dart:scalarlist'; 6 import 'dart:scalarlist';
7 7
8 part '../../../sdk/lib/io/http_parser.dart'; 8 part '../../../sdk/lib/io/http_parser.dart';
9 9
10 class HttpParserTest { 10 class HttpParserTest {
(...skipping 19 matching lines...) Expand all
30 bool headersCompleteCalled; 30 bool headersCompleteCalled;
31 bool dataEndCalled; 31 bool dataEndCalled;
32 String method; 32 String method;
33 String uri; 33 String uri;
34 String version; 34 String version;
35 Map headers; 35 Map headers;
36 int contentLength; 36 int contentLength;
37 int bytesReceived; 37 int bytesReceived;
38 38
39 void reset() { 39 void reset() {
40 httpParser = new _HttpParser(); 40 httpParser = new _HttpParser.requestParser();
41 httpParser.requestStart = (m, u, v) { method = m; uri = u; version = v; }; 41 httpParser.requestStart = (m, u, v) { method = m; uri = u; version = v; };
42 httpParser.responseStart = (s, r, v) { Expect.fail("Expected request"); }; 42 httpParser.responseStart = (s, r, v) { Expect.fail("Expected request"); };
43 httpParser.headerReceived = (f, v) { 43 httpParser.headerReceived = (f, v) {
44 Expect.isFalse(headersCompleteCalled); 44 Expect.isFalse(headersCompleteCalled);
45 headers[f] = v; 45 headers[f] = v;
46 }; 46 };
47 httpParser.headersComplete = () { 47 httpParser.headersComplete = () {
48 Expect.isFalse(headersCompleteCalled); 48 Expect.isFalse(headersCompleteCalled);
49 if (!chunked) { 49 if (!chunked) {
50 Expect.equals(expectedContentLength, httpParser.contentLength); 50 Expect.equals(expectedContentLength, httpParser.contentLength);
(...skipping 10 matching lines...) Expand all
61 headersCompleteCalled = true; 61 headersCompleteCalled = true;
62 }; 62 };
63 httpParser.dataReceived = (List<int> data) { 63 httpParser.dataReceived = (List<int> data) {
64 Expect.isTrue(headersCompleteCalled); 64 Expect.isTrue(headersCompleteCalled);
65 bytesReceived += data.length; 65 bytesReceived += data.length;
66 }; 66 };
67 httpParser.dataEnd = (close) { 67 httpParser.dataEnd = (close) {
68 Expect.isFalse(close); 68 Expect.isFalse(close);
69 dataEndCalled = true; 69 dataEndCalled = true;
70 }; 70 };
71 httpParser.closed = () { };
71 72
72 headersCompleteCalled = false; 73 headersCompleteCalled = false;
73 dataEndCalled = false; 74 dataEndCalled = false;
74 method = null; 75 method = null;
75 uri = null; 76 uri = null;
76 headers = new Map(); 77 headers = new Map();
77 bytesReceived = 0; 78 bytesReceived = 0;
78 } 79 }
79 80
80 void testWrite(List<int> requestData, [int chunkSize = -1]) { 81 void testWrite(List<int> requestData, [int chunkSize = -1]) {
81 if (chunkSize == -1) chunkSize = requestData.length; 82 if (chunkSize == -1) chunkSize = requestData.length;
82 reset(); 83 reset();
83 int written = 0; 84 int written = 0;
84 int unparsed; 85 int unparsed;
85 for (int pos = 0; pos < requestData.length; pos += chunkSize) { 86 for (int pos = 0; pos < requestData.length; pos += chunkSize) {
86 int remaining = requestData.length - pos; 87 int remaining = requestData.length - pos;
87 int writeLength = min(chunkSize, remaining); 88 int writeLength = min(chunkSize, remaining);
88 written += writeLength; 89 written += writeLength;
89 httpParser.writeList(requestData, pos, writeLength); 90 httpParser.streamData(requestData.getRange(pos, writeLength));
90 unparsed = httpParser.readUnparsedData().length; 91 unparsed = httpParser.readUnparsedData().length;
91 if (httpParser.upgrade) { 92 if (httpParser.upgrade) {
92 unparsed += requestData.length - written; 93 unparsed += requestData.length - written;
93 break; 94 break;
94 } else { 95 } else {
95 Expect.equals(0, unparsed); 96 Expect.equals(0, unparsed);
96 } 97 }
97 } 98 }
98 Expect.equals(expectedMethod, method); 99 Expect.equals(expectedMethod, method);
99 Expect.equals(expectedUri, uri); 100 Expect.equals(expectedUri, uri);
(...skipping 14 matching lines...) Expand all
114 testWrite(requestData); 115 testWrite(requestData);
115 testWrite(requestData, 10); 116 testWrite(requestData, 10);
116 testWrite(requestData, 1); 117 testWrite(requestData, 1);
117 } 118 }
118 119
119 static void _testParseInvalidRequest(String request) { 120 static void _testParseInvalidRequest(String request) {
120 _HttpParser httpParser; 121 _HttpParser httpParser;
121 bool errorCalled; 122 bool errorCalled;
122 123
123 void reset() { 124 void reset() {
124 httpParser = new _HttpParser(); 125 httpParser = new _HttpParser.requestParser();
125 httpParser.responseStart = (s, r) { Expect.fail("Expected request"); }; 126 httpParser.responseStart = (s, r) { Expect.fail("Expected request"); };
126 httpParser.error = (e) { 127 httpParser.error = (e) {
127 errorCalled = true; 128 errorCalled = true;
128 }; 129 };
130 httpParser.closed = () { };
129 131
130 errorCalled = false; 132 errorCalled = false;
131 } 133 }
132 134
133 void testWrite(List<int> requestData, [int chunkSize = -1]) { 135 void testWrite(List<int> requestData, [int chunkSize = -1]) {
134 if (chunkSize == -1) chunkSize = requestData.length; 136 if (chunkSize == -1) chunkSize = requestData.length;
135 reset(); 137 reset();
136 for (int pos = 0; 138 for (int pos = 0;
137 pos < requestData.length && !errorCalled; 139 pos < requestData.length && !errorCalled;
138 pos += chunkSize) { 140 pos += chunkSize) {
139 int remaining = requestData.length - pos; 141 int remaining = requestData.length - pos;
140 int writeLength = min(chunkSize, remaining); 142 int writeLength = min(chunkSize, remaining);
141 httpParser.writeList(requestData, pos, writeLength); 143 httpParser.streamData(requestData.getRange(pos, writeLength));
142 } 144 }
143 Expect.isTrue(errorCalled); 145 Expect.isTrue(errorCalled);
144 } 146 }
145 147
146 // Test parsing the request three times delivering the data in 148 // Test parsing the request three times delivering the data in
147 // different chunks. 149 // different chunks.
148 List<int> requestData = request.charCodes; 150 List<int> requestData = request.charCodes;
149 testWrite(requestData); 151 testWrite(requestData);
150 testWrite(requestData, 10); 152 testWrite(requestData, 10);
151 testWrite(requestData, 1); 153 testWrite(requestData, 1);
(...skipping 17 matching lines...) Expand all
169 bool dataEndCalled; 171 bool dataEndCalled;
170 bool dataEndClose; 172 bool dataEndClose;
171 int statusCode; 173 int statusCode;
172 String reasonPhrase; 174 String reasonPhrase;
173 String version; 175 String version;
174 Map headers; 176 Map headers;
175 int contentLength; 177 int contentLength;
176 int bytesReceived; 178 int bytesReceived;
177 179
178 void reset() { 180 void reset() {
179 httpParser = new _HttpParser(); 181 httpParser = new _HttpParser.responseParser();
180 if (responseToMethod != null) { 182 if (responseToMethod != null) {
181 httpParser.responseToMethod = responseToMethod; 183 httpParser.responseToMethod = responseToMethod;
182 } 184 }
183 httpParser.requestStart = (m, u, v) => Expect.fail("Expected response"); 185 httpParser.requestStart = (m, u, v) => Expect.fail("Expected response");
184 httpParser.responseStart = (s, r, v) { 186 httpParser.responseStart = (s, r, v) {
185 statusCode = s; 187 statusCode = s;
186 reasonPhrase = r; 188 reasonPhrase = r;
187 version = v; 189 version = v;
188 }; 190 };
189 httpParser.headerReceived = (f, v) { 191 httpParser.headerReceived = (f, v) {
(...skipping 16 matching lines...) Expand all
206 headersCompleteCalled = true; 208 headersCompleteCalled = true;
207 }; 209 };
208 httpParser.dataReceived = (List<int> data) { 210 httpParser.dataReceived = (List<int> data) {
209 Expect.isTrue(headersCompleteCalled); 211 Expect.isTrue(headersCompleteCalled);
210 bytesReceived += data.length; 212 bytesReceived += data.length;
211 }; 213 };
212 httpParser.dataEnd = (close) { 214 httpParser.dataEnd = (close) {
213 dataEndCalled = true; 215 dataEndCalled = true;
214 dataEndClose = close; 216 dataEndClose = close;
215 }; 217 };
218 httpParser.closed = () { };
216 219
217 headersCompleteCalled = false; 220 headersCompleteCalled = false;
218 dataEndCalled = false; 221 dataEndCalled = false;
219 dataEndClose = null; 222 dataEndClose = null;
220 statusCode = -1; 223 statusCode = -1;
221 reasonPhrase = null; 224 reasonPhrase = null;
222 headers = new Map(); 225 headers = new Map();
223 bytesReceived = 0; 226 bytesReceived = 0;
224 } 227 }
225 228
226 void testWrite(List<int> requestData, [int chunkSize = -1]) { 229 void testWrite(List<int> requestData, [int chunkSize = -1]) {
227 if (chunkSize == -1) chunkSize = requestData.length; 230 if (chunkSize == -1) chunkSize = requestData.length;
228 reset(); 231 reset();
229 int written = 0; 232 int written = 0;
230 int unparsed; 233 int unparsed;
231 for (int pos = 0; pos < requestData.length; pos += chunkSize) { 234 for (int pos = 0; pos < requestData.length; pos += chunkSize) {
232 int remaining = requestData.length - pos; 235 int remaining = requestData.length - pos;
233 int writeLength = min(chunkSize, remaining); 236 int writeLength = min(chunkSize, remaining);
234 written += writeLength; 237 written += writeLength;
235 httpParser.writeList(requestData, pos, writeLength); 238 httpParser.streamData(requestData.getRange(pos, writeLength));
236 unparsed = httpParser.readUnparsedData().length; 239 unparsed = httpParser.readUnparsedData().length;
237 if (httpParser.upgrade) { 240 if (httpParser.upgrade) {
238 unparsed += requestData.length - written; 241 unparsed += requestData.length - written;
239 break; 242 break;
240 } else { 243 } else {
241 Expect.equals(0, unparsed); 244 Expect.equals(0, unparsed);
242 } 245 }
243 } 246 }
244 if (close) httpParser.connectionClosed(); 247 if (close) httpParser.streamDone();
245 Expect.equals(expectedVersion, version); 248 Expect.equals(expectedVersion, version);
246 Expect.equals(expectedStatusCode, statusCode); 249 Expect.equals(expectedStatusCode, statusCode);
247 Expect.equals(expectedReasonPhrase, reasonPhrase); 250 Expect.equals(expectedReasonPhrase, reasonPhrase);
248 Expect.isTrue(headersCompleteCalled); 251 Expect.isTrue(headersCompleteCalled);
249 Expect.equals(expectedBytesReceived, bytesReceived); 252 Expect.equals(expectedBytesReceived, bytesReceived);
250 if (!upgrade) { 253 if (!upgrade) {
251 Expect.isTrue(dataEndCalled); 254 Expect.isTrue(dataEndCalled);
252 if (close) Expect.isTrue(dataEndClose); 255 if (close) Expect.isTrue(dataEndClose);
253 Expect.equals(dataEndClose, connectionClose); 256 Expect.equals(dataEndClose, connectionClose);
254 } 257 }
(...skipping 10 matching lines...) Expand all
265 testWrite(responseData); 268 testWrite(responseData);
266 testWrite(responseData, 10); 269 testWrite(responseData, 10);
267 testWrite(responseData, 1); 270 testWrite(responseData, 1);
268 } 271 }
269 272
270 static void _testParseInvalidResponse(String response, [bool close = false]) { 273 static void _testParseInvalidResponse(String response, [bool close = false]) {
271 _HttpParser httpParser; 274 _HttpParser httpParser;
272 bool errorCalled; 275 bool errorCalled;
273 276
274 void reset() { 277 void reset() {
275 httpParser = new _HttpParser(); 278 httpParser = new _HttpParser.responseParser();
276 httpParser.requestStart = (m, u) => Expect.fail("Expected response"); 279 httpParser.requestStart = (m, u) => Expect.fail("Expected response");
277 httpParser.error = (e) => errorCalled = true; 280 httpParser.error = (e) => errorCalled = true;
281 httpParser.closed = () { };
278 282
279 errorCalled = false; 283 errorCalled = false;
280 } 284 }
281 285
282 void testWrite(List<int> requestData, [int chunkSize = -1]) { 286 void testWrite(List<int> requestData, [int chunkSize = -1]) {
283 if (chunkSize == -1) chunkSize = requestData.length; 287 if (chunkSize == -1) chunkSize = requestData.length;
284 reset(); 288 reset();
285 for (int pos = 0; 289 for (int pos = 0;
286 pos < requestData.length && !errorCalled; 290 pos < requestData.length && !errorCalled;
287 pos += chunkSize) { 291 pos += chunkSize) {
288 int remaining = requestData.length - pos; 292 int remaining = requestData.length - pos;
289 int writeLength = min(chunkSize, remaining); 293 int writeLength = min(chunkSize, remaining);
290 httpParser.writeList(requestData, pos, writeLength); 294 httpParser.streamData(requestData.getRange(pos, writeLength));
291 } 295 }
292 if (close) httpParser.connectionClosed(); 296 if (close) httpParser.streamDone();
293 Expect.isTrue(errorCalled); 297 Expect.isTrue(errorCalled);
294 } 298 }
295 299
296 // Test parsing the request three times delivering the data in 300 // Test parsing the request three times delivering the data in
297 // different chunks. 301 // different chunks.
298 List<int> responseData = response.charCodes; 302 List<int> responseData = response.charCodes;
299 testWrite(responseData); 303 testWrite(responseData);
300 testWrite(responseData, 10); 304 testWrite(responseData, 10);
301 testWrite(responseData, 1); 305 testWrite(responseData, 1);
302 } 306 }
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 0123456789012345678901234567890\r 845 0123456789012345678901234567890\r
842 0\r\n\r\n"""; 846 0\r\n\r\n""";
843 _testParseInvalidResponse(response); 847 _testParseInvalidResponse(response);
844 } 848 }
845 } 849 }
846 850
847 851
848 void main() { 852 void main() {
849 HttpParserTest.runAllTests(); 853 HttpParserTest.runAllTests();
850 } 854 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698