OLD | NEW |
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 // VMOptions= | 5 // VMOptions= |
6 // VMOptions=--short_socket_read | 6 // VMOptions=--short_socket_read |
7 // VMOptions=--short_socket_write | 7 // VMOptions=--short_socket_write |
8 // VMOptions=--short_socket_read --short_socket_write | 8 // VMOptions=--short_socket_read --short_socket_write |
9 | 9 |
10 import 'dart:io'; | 10 import 'dart:io'; |
11 import 'dart:isolate'; | 11 import 'dart:isolate'; |
12 import 'dart:json'; | 12 import 'dart:json' as json; |
13 import '../../../chat/chat_server_lib.dart'; | 13 import '../../../chat/chat_server_lib.dart'; |
14 | 14 |
15 // Message to start chat test client running in an isolate. | 15 // Message to start chat test client running in an isolate. |
16 class ChatTestClientStart { | 16 class ChatTestClientStart { |
17 ChatTestClientStart(int this.totalClients, | 17 ChatTestClientStart(int this.totalClients, |
18 int this.messagesToSend, | 18 int this.messagesToSend, |
19 int this.messagesToReceive, | 19 int this.messagesToReceive, |
20 int this.port); | 20 int this.port); |
21 | 21 |
22 int totalClients; | 22 int totalClients; |
(...skipping 27 matching lines...) Expand all Loading... |
50 int joinCount; | 50 int joinCount; |
51 int messageCount; | 51 int messageCount; |
52 int receiveMessageNumber; // Number of messages received. | 52 int receiveMessageNumber; // Number of messages received. |
53 | 53 |
54 void leave() { | 54 void leave() { |
55 HttpClientRequest request; | 55 HttpClientRequest request; |
56 HttpClientResponse response; | 56 HttpClientResponse response; |
57 | 57 |
58 void leaveResponseHandler(String data) { | 58 void leaveResponseHandler(String data) { |
59 Expect.equals(HttpStatus.OK, response.statusCode); | 59 Expect.equals(HttpStatus.OK, response.statusCode); |
60 var responseData = JSON.parse(data); | 60 var responseData = json.parse(data); |
61 Expect.equals("leave", responseData["response"]); | 61 Expect.equals("leave", responseData["response"]); |
62 | 62 |
63 // Test done. | 63 // Test done. |
64 statusPort.send("Test succeeded", null); | 64 statusPort.send("Test succeeded", null); |
65 } | 65 } |
66 | 66 |
67 Map leaveRequest = new Map(); | 67 Map leaveRequest = new Map(); |
68 leaveRequest["request"] = "leave"; | 68 leaveRequest["request"] = "leave"; |
69 leaveRequest["sessionId"] = sessionId; | 69 leaveRequest["sessionId"] = sessionId; |
70 HttpClientConnection conn = httpClient.post("127.0.0.1", port, "/leave"); | 70 HttpClientConnection conn = httpClient.post("127.0.0.1", port, "/leave"); |
71 conn.onRequest = (HttpClientRequest request) { | 71 conn.onRequest = (HttpClientRequest request) { |
72 request.outputStream.writeString(JSON.stringify(leaveRequest)); | 72 request.outputStream.writeString(json.stringify(leaveRequest)); |
73 request.outputStream.close(); | 73 request.outputStream.close(); |
74 }; | 74 }; |
75 conn.onResponse = (HttpClientResponse r) { | 75 conn.onResponse = (HttpClientResponse r) { |
76 response = r; | 76 response = r; |
77 StringInputStream stream = new StringInputStream(response.inputStream); | 77 StringInputStream stream = new StringInputStream(response.inputStream); |
78 StringBuffer body = new StringBuffer(); | 78 StringBuffer body = new StringBuffer(); |
79 stream.onData = () => body.add(stream.read()); | 79 stream.onData = () => body.add(stream.read()); |
80 stream.onClosed = () => leaveResponseHandler(body.toString()); | 80 stream.onClosed = () => leaveResponseHandler(body.toString()); |
81 }; | 81 }; |
82 } | 82 } |
83 | 83 |
84 void receive() { | 84 void receive() { |
85 HttpClientRequest request; | 85 HttpClientRequest request; |
86 HttpClientResponse response; | 86 HttpClientResponse response; |
87 | 87 |
88 void receiveResponseHandler(String data) { | 88 void receiveResponseHandler(String data) { |
89 Expect.equals(HttpStatus.OK, response.statusCode); | 89 Expect.equals(HttpStatus.OK, response.statusCode); |
90 var responseData = JSON.parse(data); | 90 var responseData = json.parse(data); |
91 Expect.equals("receive", responseData["response"]); | 91 Expect.equals("receive", responseData["response"]); |
92 Expect.equals(null, responseData["disconnect"]); | 92 Expect.equals(null, responseData["disconnect"]); |
93 for (int i = 0; i < responseData["messages"].length; i++) { | 93 for (int i = 0; i < responseData["messages"].length; i++) { |
94 Map message = responseData["messages"][i]; | 94 Map message = responseData["messages"][i]; |
95 if (message["type"] == "join") { | 95 if (message["type"] == "join") { |
96 joinCount++; | 96 joinCount++; |
97 } else if (message["type"] == "message") { | 97 } else if (message["type"] == "message") { |
98 messageCount++; | 98 messageCount++; |
99 } else { | 99 } else { |
100 Expect.equals("leave", message["type"]); | 100 Expect.equals("leave", message["type"]); |
(...skipping 22 matching lines...) Expand all Loading... |
123 } | 123 } |
124 } | 124 } |
125 | 125 |
126 Map receiveRequest = new Map(); | 126 Map receiveRequest = new Map(); |
127 receiveRequest["request"] = "receive"; | 127 receiveRequest["request"] = "receive"; |
128 receiveRequest["sessionId"] = sessionId; | 128 receiveRequest["sessionId"] = sessionId; |
129 receiveRequest["nextMessage"] = receiveMessageNumber; | 129 receiveRequest["nextMessage"] = receiveMessageNumber; |
130 HttpClientConnection conn = | 130 HttpClientConnection conn = |
131 httpClient.post("127.0.0.1", port, "/receive"); | 131 httpClient.post("127.0.0.1", port, "/receive"); |
132 conn.onRequest = (HttpClientRequest request) { | 132 conn.onRequest = (HttpClientRequest request) { |
133 request.outputStream.writeString(JSON.stringify(receiveRequest)); | 133 request.outputStream.writeString(json.stringify(receiveRequest)); |
134 request.outputStream.close(); | 134 request.outputStream.close(); |
135 }; | 135 }; |
136 conn.onResponse = (HttpClientResponse r) { | 136 conn.onResponse = (HttpClientResponse r) { |
137 response = r; | 137 response = r; |
138 StringInputStream stream = new StringInputStream(response.inputStream); | 138 StringInputStream stream = new StringInputStream(response.inputStream); |
139 StringBuffer body = new StringBuffer(); | 139 StringBuffer body = new StringBuffer(); |
140 stream.onData = () => body.add(stream.read()); | 140 stream.onData = () => body.add(stream.read()); |
141 stream.onClosed = () => receiveResponseHandler(body.toString()); | 141 stream.onClosed = () => receiveResponseHandler(body.toString()); |
142 }; | 142 }; |
143 } | 143 } |
144 | 144 |
145 void sendMessage() { | 145 void sendMessage() { |
146 HttpClientRequest request; | 146 HttpClientRequest request; |
147 HttpClientResponse response; | 147 HttpClientResponse response; |
148 | 148 |
149 void sendResponseHandler(String data) { | 149 void sendResponseHandler(String data) { |
150 Expect.equals(HttpStatus.OK, response.statusCode); | 150 Expect.equals(HttpStatus.OK, response.statusCode); |
151 var responseData = JSON.parse(data); | 151 var responseData = json.parse(data); |
152 Expect.equals("message", responseData["response"]); | 152 Expect.equals("message", responseData["response"]); |
153 sendMessageNumber++; | 153 sendMessageNumber++; |
154 if (sendMessageNumber < messagesToSend) { | 154 if (sendMessageNumber < messagesToSend) { |
155 sendMessage(); | 155 sendMessage(); |
156 } else { | 156 } else { |
157 receive(); | 157 receive(); |
158 } | 158 } |
159 } | 159 } |
160 | 160 |
161 Map messageRequest = new Map(); | 161 Map messageRequest = new Map(); |
162 messageRequest["request"] = "message"; | 162 messageRequest["request"] = "message"; |
163 messageRequest["sessionId"] = sessionId; | 163 messageRequest["sessionId"] = sessionId; |
164 messageRequest["message"] = "message $sendMessageNumber"; | 164 messageRequest["message"] = "message $sendMessageNumber"; |
165 HttpClientConnection conn = | 165 HttpClientConnection conn = |
166 httpClient.post("127.0.0.1", port, "/message"); | 166 httpClient.post("127.0.0.1", port, "/message"); |
167 conn.onRequest = (HttpClientRequest request) { | 167 conn.onRequest = (HttpClientRequest request) { |
168 request.outputStream.writeString(JSON.stringify(messageRequest)); | 168 request.outputStream.writeString(json.stringify(messageRequest)); |
169 request.outputStream.close(); | 169 request.outputStream.close(); |
170 }; | 170 }; |
171 conn.onResponse = (HttpClientResponse r) { | 171 conn.onResponse = (HttpClientResponse r) { |
172 response = r; | 172 response = r; |
173 StringInputStream stream = new StringInputStream(response.inputStream); | 173 StringInputStream stream = new StringInputStream(response.inputStream); |
174 StringBuffer body = new StringBuffer(); | 174 StringBuffer body = new StringBuffer(); |
175 stream.onData = () => body.add(stream.read()); | 175 stream.onData = () => body.add(stream.read()); |
176 stream.onClosed = () => sendResponseHandler(body.toString()); | 176 stream.onClosed = () => sendResponseHandler(body.toString()); |
177 }; | 177 }; |
178 } | 178 } |
179 | 179 |
180 void join() { | 180 void join() { |
181 HttpClientRequest request; | 181 HttpClientRequest request; |
182 HttpClientResponse response; | 182 HttpClientResponse response; |
183 | 183 |
184 void joinResponseHandler(String data) { | 184 void joinResponseHandler(String data) { |
185 Expect.equals(HttpStatus.OK, response.statusCode); | 185 Expect.equals(HttpStatus.OK, response.statusCode); |
186 var responseData = JSON.parse(data); | 186 var responseData = json.parse(data); |
187 Expect.equals("join", responseData["response"]); | 187 Expect.equals("join", responseData["response"]); |
188 sessionId = responseData["sessionId"]; | 188 sessionId = responseData["sessionId"]; |
189 Expect.isTrue(sessionId != null); | 189 Expect.isTrue(sessionId != null); |
190 | 190 |
191 joinCount = 0; | 191 joinCount = 0; |
192 messageCount = 0; | 192 messageCount = 0; |
193 sendMessageNumber = 0; | 193 sendMessageNumber = 0; |
194 receiveMessageNumber = 0; | 194 receiveMessageNumber = 0; |
195 sendMessage(); | 195 sendMessage(); |
196 } | 196 } |
197 | 197 |
198 Map joinRequest = new Map(); | 198 Map joinRequest = new Map(); |
199 joinRequest["request"] = "join"; | 199 joinRequest["request"] = "join"; |
200 joinRequest["handle"] = "test1"; | 200 joinRequest["handle"] = "test1"; |
201 HttpClientConnection conn = httpClient.post("127.0.0.1", port, "/join"); | 201 HttpClientConnection conn = httpClient.post("127.0.0.1", port, "/join"); |
202 conn.onRequest = (HttpClientRequest request) { | 202 conn.onRequest = (HttpClientRequest request) { |
203 request.outputStream.writeString(JSON.stringify(joinRequest)); | 203 request.outputStream.writeString(json.stringify(joinRequest)); |
204 request.outputStream.close(); | 204 request.outputStream.close(); |
205 }; | 205 }; |
206 conn.onResponse = (HttpClientResponse r) { | 206 conn.onResponse = (HttpClientResponse r) { |
207 response = r; | 207 response = r; |
208 StringInputStream stream = new StringInputStream(response.inputStream); | 208 StringInputStream stream = new StringInputStream(response.inputStream); |
209 StringBuffer body = new StringBuffer(); | 209 StringBuffer body = new StringBuffer(); |
210 stream.onData = () => body.add(stream.read()); | 210 stream.onData = () => body.add(stream.read()); |
211 stream.onClosed = () => joinResponseHandler(body.toString()); | 211 stream.onClosed = () => joinResponseHandler(body.toString()); |
212 }; | 212 }; |
213 } | 213 } |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 message.port); | 251 message.port); |
252 clientPorts[i].send(command, clientStatusPorts[i].toSendPort()); | 252 clientPorts[i].send(command, clientStatusPorts[i].toSendPort()); |
253 } | 253 } |
254 } else if (message.isError) { | 254 } else if (message.isError) { |
255 print("Could not start server - probably error \"Address already in
use\" from bind."); | 255 print("Could not start server - probably error \"Address already in
use\" from bind."); |
256 serverStatusPort.close(); | 256 serverStatusPort.close(); |
257 } | 257 } |
258 }); | 258 }); |
259 | 259 |
260 // Prepare the requested number of clients. | 260 // Prepare the requested number of clients. |
261 clientPorts = new List<SendPort>(clientCount); | 261 clientPorts = new List<SendPort>.fixedLength(clientCount); |
262 int liveClientsCount = 0; | 262 int liveClientsCount = 0; |
263 clientStatusPorts = new List<ReceivePort>(clientCount); | 263 clientStatusPorts = new List<ReceivePort>.fixedLength(clientCount); |
264 for (int i = 0; i < clientCount; i++) { | 264 for (int i = 0; i < clientCount; i++) { |
265 ReceivePort statusPort = new ReceivePort(); | 265 ReceivePort statusPort = new ReceivePort(); |
266 statusPort.receive((var message, SendPort replyTo) { | 266 statusPort.receive((var message, SendPort replyTo) { |
267 // First and only message from the client indicates that | 267 // First and only message from the client indicates that |
268 // the test is done. | 268 // the test is done. |
269 Expect.equals("Test succeeded", message); | 269 Expect.equals("Test succeeded", message); |
270 statusPort.close(); | 270 statusPort.close(); |
271 finishedClients++; | 271 finishedClients++; |
272 | 272 |
273 // If all clients are finished shutdown the server. | 273 // If all clients are finished shutdown the server. |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 TestMain testMain = new TestMain.run(10, 2); | 330 TestMain testMain = new TestMain.run(10, 2); |
331 } | 331 } |
332 | 332 |
333 | 333 |
334 void main() { | 334 void main() { |
335 testOneClient(); | 335 testOneClient(); |
336 testTwoClients(); | 336 testTwoClients(); |
337 testTwoClientsMoreMessages(); | 337 testTwoClientsMoreMessages(); |
338 testTenClients(); | 338 testTenClients(); |
339 } | 339 } |
OLD | NEW |