| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 | 5 |
| 6 import "dart:async"; | 6 import "dart:async"; |
| 7 import "dart:io"; | 7 import "dart:io"; |
| 8 | 8 |
| 9 void test1(int totalConnections) { | 9 void test1(int totalConnections) { |
| 10 // Server which just closes immediately. | 10 // Server which just closes immediately. |
| 11 HttpServer server = new HttpServer(); | 11 HttpServer.bind().then((server) { |
| 12 server.listen("127.0.0.1", 0, backlog: totalConnections); | 12 server.listen((HttpRequest request) { |
| 13 server.defaultRequestHandler = (HttpRequest request, HttpResponse response) { | 13 request.response.close(); |
| 14 response.outputStream.close(); | 14 }); |
| 15 }; | |
| 16 | 15 |
| 17 int count = 0; | 16 int count = 0; |
| 18 HttpClient client = new HttpClient(); | 17 HttpClient client = new HttpClient(); |
| 19 for (int i = 0; i < totalConnections; i++) { | 18 for (int i = 0; i < totalConnections; i++) { |
| 20 HttpClientConnection conn = client.get("127.0.0.1", server.port, "/"); | 19 client.get("127.0.0.1", server.port, "/") |
| 21 conn.onRequest = (HttpClientRequest request) { | 20 .then((HttpClientRequest request) => request.close()) |
| 22 request.outputStream.close(); | 21 .then((HttpClientResponse response) { |
| 23 }; | 22 response.listen((_) {}, onDone: () { |
| 24 conn.onResponse = (HttpClientResponse response) { | 23 count++; |
| 25 response.inputStream.onClosed = () { | 24 if (count == totalConnections) { |
| 26 count++; | 25 client.close(); |
| 27 if (count == totalConnections) { | 26 server.close(); |
| 28 client.shutdown(); | 27 } |
| 29 server.close(); | 28 }); |
| 30 } | 29 }); |
| 31 }; | 30 } |
| 32 }; | 31 }); |
| 33 } | |
| 34 } | 32 } |
| 35 | 33 |
| 36 | 34 |
| 37 void test2(int totalConnections, int outputStreamWrites) { | 35 void test2(int totalConnections, int outputStreamWrites) { |
| 38 // Server which responds without waiting for request body. | 36 // Server which responds without waiting for request body. |
| 39 HttpServer server = new HttpServer(); | 37 HttpServer.bind().then((server) { |
| 40 server.listen("127.0.0.1", 0, backlog: totalConnections); | 38 server.listen((HttpRequest request) { |
| 41 server.defaultRequestHandler = (HttpRequest request, HttpResponse response) { | 39 request.response.addString("!dlrow ,olleH"); |
| 42 response.outputStream.writeString("!dlrow ,olleH"); | 40 request.response.close(); |
| 43 response.outputStream.close(); | 41 }); |
| 44 }; | |
| 45 | 42 |
| 46 int count = 0; | 43 int count = 0; |
| 47 HttpClient client = new HttpClient(); | 44 HttpClient client = new HttpClient(); |
| 48 for (int i = 0; i < totalConnections; i++) { | 45 for (int i = 0; i < totalConnections; i++) { |
| 49 HttpClientConnection conn = client.get("127.0.0.1", server.port, "/"); | 46 client.get("127.0.0.1", server.port, "/") |
| 50 conn.onRequest = (HttpClientRequest request) { | 47 .then((HttpClientRequest request) { |
| 51 request.contentLength = -1; | 48 request.contentLength = -1; |
| 52 for (int i = 0; i < outputStreamWrites; i++) | 49 for (int i = 0; i < outputStreamWrites; i++) { |
| 53 request.outputStream.writeString("Hello, world!"); | 50 request.addString("Hello, world!"); |
| 54 request.outputStream.close(); | 51 } |
| 55 }; | 52 return request.close(); |
| 56 conn.onResponse = (HttpClientResponse response) { | 53 }) |
| 57 response.inputStream.onData = response.inputStream.read; | 54 .then((HttpClientResponse response) { |
| 58 response.inputStream.onClosed = () { | 55 response.listen( |
| 59 count++; | 56 (_) {}, |
| 60 if (count == totalConnections) { | 57 onDone: () { |
| 61 client.shutdown(); | 58 count++; |
| 62 server.close(); | 59 if (count == totalConnections) { |
| 63 } | 60 client.close(force: true); |
| 64 }; | 61 server.close(); |
| 65 }; | 62 } |
| 66 conn.onError = (e) { | 63 }, |
| 67 count++; | 64 onError: (e) {} /* ignore */); |
| 68 if (count == totalConnections) { | 65 }) |
| 69 client.shutdown(); | 66 .catchError((error) { |
| 70 server.close(); | 67 count++; |
| 71 } | 68 if (count == totalConnections) { |
| 72 }; | 69 client.close(); |
| 73 } | 70 server.close(); |
| 71 } |
| 72 }); |
| 73 } |
| 74 }); |
| 74 } | 75 } |
| 75 | 76 |
| 76 | 77 |
| 77 void test3(int totalConnections) { | 78 void test3(int totalConnections) { |
| 78 // Server which responds when request body has been received. | 79 // Server which responds when request body has been received. |
| 79 HttpServer server = new HttpServer(); | 80 HttpServer.bind().then((server) { |
| 80 server.listen("127.0.0.1", 0, backlog: totalConnections); | 81 |
| 81 server.defaultRequestHandler = (HttpRequest request, HttpResponse response) { | 82 server.listen((HttpRequest request) { |
| 82 request.inputStream.onData = () { | 83 request.listen((_) {}, onDone: () { |
| 83 request.inputStream.read(); | 84 request.response.addString("!dlrow ,olleH"); |
| 84 }; | 85 request.response.close(); |
| 85 request.inputStream.onClosed = () { | 86 }); |
| 86 response.outputStream.writeString("!dlrow ,olleH"); | 87 }); |
| 87 response.outputStream.close(); | |
| 88 }; | |
| 89 }; | |
| 90 | 88 |
| 91 int count = 0; | 89 int count = 0; |
| 92 HttpClient client = new HttpClient(); | 90 HttpClient client = new HttpClient(); |
| 93 for (int i = 0; i < totalConnections; i++) { | 91 for (int i = 0; i < totalConnections; i++) { |
| 94 HttpClientConnection conn = client.get("127.0.0.1", server.port, "/"); | 92 client.get("127.0.0.1", server.port, "/") |
| 95 conn.onRequest = (HttpClientRequest request) { | 93 .then((HttpClientRequest request) { |
| 96 request.contentLength = -1; | 94 request.contentLength = -1; |
| 97 request.outputStream.writeString("Hello, world!"); | 95 request.addString("Hello, world!"); |
| 98 request.outputStream.close(); | 96 return request.close(); |
| 99 }; | 97 }) |
| 100 conn.onResponse = (HttpClientResponse response) { | 98 .then((HttpClientResponse response) { |
| 101 response.inputStream.onData = response.inputStream.read; | 99 response.listen((_) {}, onDone: () { |
| 102 response.inputStream.onClosed = () { | 100 count++; |
| 103 count++; | 101 if (count == totalConnections) { |
| 104 if (count == totalConnections) { | 102 client.close(); |
| 105 client.shutdown(); | 103 server.close(); |
| 106 server.close(); | 104 } |
| 107 } | 105 }); |
| 108 }; | 106 }); |
| 109 }; | |
| 110 } | 107 } |
| 108 |
| 109 }); |
| 111 } | 110 } |
| 112 | 111 |
| 113 | 112 |
| 114 void test4() { | 113 void test4() { |
| 115 var server = new HttpServer(); | 114 HttpServer.bind().then((server) { |
| 116 server.listen("127.0.0.1", 0); | 115 |
| 117 server.defaultRequestHandler = (var request, var response) { | 116 server.listen((var request) { |
| 118 request.inputStream.onClosed = () { | 117 request.listen((_) {}, onDone: () { |
| 119 new Timer.repeating(new Duration(milliseconds: 100), (timer) { | 118 new Timer.repeating(new Duration(milliseconds: 100), (timer) { |
| 120 if (server.connectionsInfo().total == 0) { | 119 if (server.connectionsInfo().total == 0) { |
| 121 server.close(); | 120 server.close(); |
| 122 timer.cancel(); | 121 timer.cancel(); |
| 123 } | 122 } |
| 124 }); | 123 }); |
| 125 response.outputStream.close(); | 124 request.response.close(); |
| 126 }; | 125 }); |
| 127 }; | 126 }); |
| 128 | 127 |
| 129 var client= new HttpClient(); | 128 var client= new HttpClient(); |
| 130 var conn = client.get("127.0.0.1", server.port, "/"); | 129 client.get("127.0.0.1", server.port, "/") |
| 131 conn.onResponse = (var response) { | 130 .then((request) => request.close()) |
| 132 response.inputStream.onData = response.inputStream.read; | 131 .then((response) { |
| 133 response.inputStream.onClosed = () { | 132 response.listen((_) {}, onDone: () { |
| 134 client.shutdown(); | 133 client.close(); |
| 135 }; | 134 }); |
| 136 }; | 135 }); |
| 136 |
| 137 }); |
| 137 } | 138 } |
| 138 | 139 |
| 139 | 140 |
| 140 void test5(int totalConnections) { | 141 void test5(int totalConnections) { |
| 141 var server = new HttpServer(); | 142 HttpServer.bind().then((server) { |
| 142 server.listen("127.0.0.1", 0, backlog: totalConnections); | 143 server.listen( |
| 143 server.defaultRequestHandler = (var request, var response) { | 144 (request) { |
| 144 request.inputStream.onClosed = () { | 145 request.listen( |
| 145 response.outputStream.close(); | 146 (_) { }, |
| 146 }; | 147 onDone: () { |
| 147 }; | 148 request.response.close(); |
| 148 server.onError = (e) => { }; | 149 }, |
| 150 onError: (error) { }); |
| 151 }, |
| 152 onError: (error) { }); |
| 149 | 153 |
| 150 // Create a number of client requests and keep then active. Then | 154 // Create a number of client requests and keep then active. Then |
| 151 // close the client and wait for the server to lose all active | 155 // close the client and wait for the server to lose all active |
| 152 // connections. | 156 // connections. |
| 153 var client= new HttpClient(); | 157 var client= new HttpClient(); |
| 154 for (int i = 0; i < totalConnections; i++) { | 158 for (int i = 0; i < totalConnections; i++) { |
| 155 var conn = client.post("127.0.0.1", server.port, "/"); | 159 client.post("127.0.0.1", server.port, "/") |
| 156 conn.onRequest = (req) { req.outputStream.write([0]); }; | 160 .then((request) { |
| 157 conn.onError = (e) => Expect.isTrue(e is HttpException); | 161 request.add([0]); |
| 158 } | 162 // TODO(sgjesse): Make this test work with |
| 159 bool clientClosed = false; | 163 //request.response instead of request.close() return |
| 160 new Timer.repeating(new Duration(milliseconds: 100), (timer) { | 164 //return request.response; |
| 161 if (!clientClosed) { | 165 return request.close(); |
| 162 if (server.connectionsInfo().total == totalConnections) { | 166 }) |
| 163 clientClosed = true; | 167 .then((response) { }) |
| 164 client.shutdown(force: true); | 168 .catchError((e) { }, test: (e) => e is HttpParserException); |
| 169 } |
| 170 bool clientClosed = false; |
| 171 new Timer.repeating(new Duration(milliseconds: 100), (timer) { |
| 172 if (!clientClosed) { |
| 173 if (server.connectionsInfo().total == totalConnections) { |
| 174 clientClosed = true; |
| 175 client.close(force: true); |
| 176 } |
| 177 } else { |
| 178 if (server.connectionsInfo().total == 0) { |
| 179 server.close(); |
| 180 timer.cancel(); |
| 181 } |
| 165 } | 182 } |
| 166 } else { | 183 }); |
| 167 if (server.connectionsInfo().total == 0) { | |
| 168 server.close(); | |
| 169 timer.cancel(); | |
| 170 } | |
| 171 } | |
| 172 }); | 184 }); |
| 173 } | 185 } |
| 174 | 186 |
| 175 | 187 |
| 176 void main() { | 188 void main() { |
| 177 test1(1); | 189 test1(1); |
| 178 test1(10); | 190 test1(10); |
| 179 test2(1, 10); | 191 test2(1, 10); |
| 180 test2(10, 10); | 192 test2(10, 10); |
| 181 test2(10, 1000); | 193 test2(10, 1000); |
| 182 test3(1); | 194 test3(1); |
| 183 test3(10); | 195 test3(10); |
| 184 test4(); | 196 test4(); |
| 185 test5(1); | 197 test5(1); |
| 186 test5(10); | 198 test5(10); |
| 187 } | 199 } |
| OLD | NEW |