Chromium Code Reviews| Index: samples/tests/samples/chat/chat_server_test.dart |
| diff --git a/samples/tests/samples/chat/chat_server_test.dart b/samples/tests/samples/chat/chat_server_test.dart |
| index 6caeb6f700c87e583d31405283c49daf0d26b9f0..138d775912640925e2d03f83db6c4ac0f46378ca 100644 |
| --- a/samples/tests/samples/chat/chat_server_test.dart |
| +++ b/samples/tests/samples/chat/chat_server_test.dart |
| @@ -26,201 +26,206 @@ class ChatTestClientStart { |
| } |
| +void startChatTestClient() { |
| + var client = new ChatTestClient(); |
| + port.receive((message, replyTo) { |
|
kasperl
2012/08/03 05:20:27
port.receive(client.dispatch)?
|
| + client.dispatch(message, replyTo); |
| + }); |
| +} |
| + |
| + |
| // Chat server test client for running in a separate isolate. When |
| // this test client is started it will join the chat topic, send a |
| // number of messages, receive the expected number of messages and |
| // leave the topic. |
| -class ChatTestClient extends Isolate { |
| - void main() { |
| - |
| - SendPort statusPort; // Port to reply to when test has finished. |
| - HttpClient httpClient; // HTTP client connection factory. |
| - |
| - int totalClients; // Total number of clients in the test. |
| - int messagesToSend; // Number of messages to send. |
| - int messagesToReceive; // Numbe rof messages expected to be received. |
| - int port; // TCP/IP port for server. |
| - |
| - String sessionId; // Session id when connected. |
| - int sendMessageNumber; // Number of messages sent. |
| - int joinCount; |
| - int messageCount; |
| - int receiveMessageNumber; // Number of messages received. |
| - |
| - void leave() { |
| - HttpClientRequest request; |
| - HttpClientResponse response; |
| - |
| - void leaveResponseHandler(String data) { |
| - Expect.equals(HttpStatus.OK, response.statusCode); |
| - var responseData = JSON.parse(data); |
| - Expect.equals("leave", responseData["response"]); |
| - |
| - // Test done. |
| - statusPort.send("Test succeeded", null); |
| - } |
| - |
| - Map leaveRequest = new Map(); |
| - leaveRequest["request"] = "leave"; |
| - leaveRequest["sessionId"] = sessionId; |
| - HttpClientConnection conn = httpClient.post("127.0.0.1", port, "/leave"); |
| - conn.onRequest = (HttpClientRequest request) { |
| - request.outputStream.writeString(JSON.stringify(leaveRequest)); |
| - request.outputStream.close(); |
| - }; |
| - conn.onResponse = (HttpClientResponse r) { |
| - response = r; |
| - StringInputStream stream = new StringInputStream(response.inputStream); |
| - StringBuffer body = new StringBuffer(); |
| - stream.onData = () => body.add(stream.read()); |
| - stream.onClosed = () => leaveResponseHandler(body.toString()); |
| - }; |
| +class ChatTestClient { |
| + SendPort statusPort; // Port to reply to when test has finished. |
| + HttpClient httpClient; // HTTP client connection factory. |
| + |
| + int totalClients; // Total number of clients in the test. |
| + int messagesToSend; // Number of messages to send. |
| + int messagesToReceive; // Numbe rof messages expected to be received. |
| + int port; // TCP/IP port for server. |
| + |
| + String sessionId; // Session id when connected. |
| + int sendMessageNumber; // Number of messages sent. |
| + int joinCount; |
| + int messageCount; |
| + int receiveMessageNumber; // Number of messages received. |
| + |
| + void leave() { |
| + HttpClientRequest request; |
| + HttpClientResponse response; |
| + |
| + void leaveResponseHandler(String data) { |
| + Expect.equals(HttpStatus.OK, response.statusCode); |
| + var responseData = JSON.parse(data); |
| + Expect.equals("leave", responseData["response"]); |
| + |
| + // Test done. |
| + statusPort.send("Test succeeded", null); |
| } |
| - void receive() { |
| - HttpClientRequest request; |
| - HttpClientResponse response; |
| - |
| - void receiveResponseHandler(String data) { |
| - Expect.equals(HttpStatus.OK, response.statusCode); |
| - var responseData = JSON.parse(data); |
| - Expect.equals("receive", responseData["response"]); |
| - Expect.equals(null, responseData["disconnect"]); |
| - for (int i = 0; i < responseData["messages"].length; i++) { |
| - Map message = responseData["messages"][i]; |
| - if (message["type"] == "join") { |
| - joinCount++; |
| - } else if (message["type"] == "message") { |
| - messageCount++; |
| - } else { |
| - Expect.equals("leave", message["type"]); |
| - } |
| - if (totalClients == 1) { |
| - // Test the exact messages when this is the only client. |
| - Expect.equals(messagesToSend + 1, responseData["messages"].length); |
| - Expect.equals(i, message["number"]); |
| - if (i == 0) { |
| - Expect.equals("join", message["type"]); |
| - } else { |
| - Expect.equals("message", message["type"]); |
| - Expect.equals("message ${i - 1}", message["message"]); |
| - } |
| - } |
| - receiveMessageNumber = message["number"] + 1; |
| - } |
| + Map leaveRequest = new Map(); |
| + leaveRequest["request"] = "leave"; |
| + leaveRequest["sessionId"] = sessionId; |
| + HttpClientConnection conn = httpClient.post("127.0.0.1", port, "/leave"); |
| + conn.onRequest = (HttpClientRequest request) { |
| + request.outputStream.writeString(JSON.stringify(leaveRequest)); |
| + request.outputStream.close(); |
| + }; |
| + conn.onResponse = (HttpClientResponse r) { |
| + response = r; |
| + StringInputStream stream = new StringInputStream(response.inputStream); |
| + StringBuffer body = new StringBuffer(); |
| + stream.onData = () => body.add(stream.read()); |
| + stream.onClosed = () => leaveResponseHandler(body.toString()); |
| + }; |
| + } |
| - // Receive all expected messages then leave. |
| - if (messageCount < messagesToReceive) { |
| - receive(); |
| + void receive() { |
| + HttpClientRequest request; |
| + HttpClientResponse response; |
| + |
| + void receiveResponseHandler(String data) { |
| + Expect.equals(HttpStatus.OK, response.statusCode); |
| + var responseData = JSON.parse(data); |
| + Expect.equals("receive", responseData["response"]); |
| + Expect.equals(null, responseData["disconnect"]); |
| + for (int i = 0; i < responseData["messages"].length; i++) { |
| + Map message = responseData["messages"][i]; |
| + if (message["type"] == "join") { |
| + joinCount++; |
| + } else if (message["type"] == "message") { |
| + messageCount++; |
| } else { |
| - Expect.equals(messagesToReceive, messageCount); |
| - Expect.equals(totalClients, joinCount); |
| - leave(); |
| + Expect.equals("leave", message["type"]); |
| } |
| + if (totalClients == 1) { |
| + // Test the exact messages when this is the only client. |
| + Expect.equals(messagesToSend + 1, responseData["messages"].length); |
| + Expect.equals(i, message["number"]); |
| + if (i == 0) { |
| + Expect.equals("join", message["type"]); |
| + } else { |
| + Expect.equals("message", message["type"]); |
| + Expect.equals("message ${i - 1}", message["message"]); |
| + } |
| + } |
| + receiveMessageNumber = message["number"] + 1; |
| } |
| - Map receiveRequest = new Map(); |
| - receiveRequest["request"] = "receive"; |
| - receiveRequest["sessionId"] = sessionId; |
| - receiveRequest["nextMessage"] = receiveMessageNumber; |
| - HttpClientConnection conn = |
| - httpClient.post("127.0.0.1", port, "/receive"); |
| - conn.onRequest = (HttpClientRequest request) { |
| - request.outputStream.writeString(JSON.stringify(receiveRequest)); |
| - request.outputStream.close(); |
| - }; |
| - conn.onResponse = (HttpClientResponse r) { |
| - response = r; |
| - StringInputStream stream = new StringInputStream(response.inputStream); |
| - StringBuffer body = new StringBuffer(); |
| - stream.onData = () => body.add(stream.read()); |
| - stream.onClosed = () => receiveResponseHandler(body.toString()); |
| - }; |
| + // Receive all expected messages then leave. |
| + if (messageCount < messagesToReceive) { |
| + receive(); |
| + } else { |
| + Expect.equals(messagesToReceive, messageCount); |
| + Expect.equals(totalClients, joinCount); |
| + leave(); |
| + } |
| } |
| - void sendMessage() { |
| - HttpClientRequest request; |
| - HttpClientResponse response; |
| - |
| - void sendResponseHandler(String data) { |
| - Expect.equals(HttpStatus.OK, response.statusCode); |
| - var responseData = JSON.parse(data); |
| - Expect.equals("message", responseData["response"]); |
| - sendMessageNumber++; |
| - if (sendMessageNumber < messagesToSend) { |
| - sendMessage(); |
| - } else { |
| - receive(); |
| - } |
| - } |
| + Map receiveRequest = new Map(); |
| + receiveRequest["request"] = "receive"; |
| + receiveRequest["sessionId"] = sessionId; |
| + receiveRequest["nextMessage"] = receiveMessageNumber; |
| + HttpClientConnection conn = |
| + httpClient.post("127.0.0.1", port, "/receive"); |
| + conn.onRequest = (HttpClientRequest request) { |
| + request.outputStream.writeString(JSON.stringify(receiveRequest)); |
| + request.outputStream.close(); |
| + }; |
| + conn.onResponse = (HttpClientResponse r) { |
| + response = r; |
| + StringInputStream stream = new StringInputStream(response.inputStream); |
| + StringBuffer body = new StringBuffer(); |
| + stream.onData = () => body.add(stream.read()); |
| + stream.onClosed = () => receiveResponseHandler(body.toString()); |
| + }; |
| + } |
| - Map messageRequest = new Map(); |
| - messageRequest["request"] = "message"; |
| - messageRequest["sessionId"] = sessionId; |
| - messageRequest["message"] = "message $sendMessageNumber"; |
| - HttpClientConnection conn = |
| - httpClient.post("127.0.0.1", port, "/message"); |
| - conn.onRequest = (HttpClientRequest request) { |
| - request.outputStream.writeString(JSON.stringify(messageRequest)); |
| - request.outputStream.close(); |
| - }; |
| - conn.onResponse = (HttpClientResponse r) { |
| - response = r; |
| - StringInputStream stream = new StringInputStream(response.inputStream); |
| - StringBuffer body = new StringBuffer(); |
| - stream.onData = () => body.add(stream.read()); |
| - stream.onClosed = () => sendResponseHandler(body.toString()); |
| - }; |
| - } |
| + void sendMessage() { |
| + HttpClientRequest request; |
| + HttpClientResponse response; |
| - void join() { |
| - HttpClientRequest request; |
| - HttpClientResponse response; |
| - |
| - void joinResponseHandler(String data) { |
| - Expect.equals(HttpStatus.OK, response.statusCode); |
| - var responseData = JSON.parse(data); |
| - Expect.equals("join", responseData["response"]); |
| - sessionId = responseData["sessionId"]; |
| - Expect.isTrue(sessionId != null); |
| - |
| - joinCount = 0; |
| - messageCount = 0; |
| - sendMessageNumber = 0; |
| - receiveMessageNumber = 0; |
| + void sendResponseHandler(String data) { |
| + Expect.equals(HttpStatus.OK, response.statusCode); |
| + var responseData = JSON.parse(data); |
| + Expect.equals("message", responseData["response"]); |
| + sendMessageNumber++; |
| + if (sendMessageNumber < messagesToSend) { |
| sendMessage(); |
| + } else { |
| + receive(); |
| } |
| + } |
| + |
| + Map messageRequest = new Map(); |
| + messageRequest["request"] = "message"; |
| + messageRequest["sessionId"] = sessionId; |
| + messageRequest["message"] = "message $sendMessageNumber"; |
| + HttpClientConnection conn = |
| + httpClient.post("127.0.0.1", port, "/message"); |
| + conn.onRequest = (HttpClientRequest request) { |
| + request.outputStream.writeString(JSON.stringify(messageRequest)); |
| + request.outputStream.close(); |
| + }; |
| + conn.onResponse = (HttpClientResponse r) { |
| + response = r; |
| + StringInputStream stream = new StringInputStream(response.inputStream); |
| + StringBuffer body = new StringBuffer(); |
| + stream.onData = () => body.add(stream.read()); |
| + stream.onClosed = () => sendResponseHandler(body.toString()); |
| + }; |
| + } |
| - Map joinRequest = new Map(); |
| - joinRequest["request"] = "join"; |
| - joinRequest["handle"] = "test1"; |
| - HttpClientConnection conn = httpClient.post("127.0.0.1", port, "/join"); |
| - conn.onRequest = (HttpClientRequest request) { |
| - request.outputStream.writeString(JSON.stringify(joinRequest)); |
| - request.outputStream.close(); |
| - }; |
| - conn.onResponse = (HttpClientResponse r) { |
| - response = r; |
| - StringInputStream stream = new StringInputStream(response.inputStream); |
| - StringBuffer body = new StringBuffer(); |
| - stream.onData = () => body.add(stream.read()); |
| - stream.onClosed = () => joinResponseHandler(body.toString()); |
| - }; |
| + void join() { |
| + HttpClientRequest request; |
| + HttpClientResponse response; |
| + |
| + void joinResponseHandler(String data) { |
| + Expect.equals(HttpStatus.OK, response.statusCode); |
| + var responseData = JSON.parse(data); |
| + Expect.equals("join", responseData["response"]); |
| + sessionId = responseData["sessionId"]; |
| + Expect.isTrue(sessionId != null); |
| + |
| + joinCount = 0; |
| + messageCount = 0; |
| + sendMessageNumber = 0; |
| + receiveMessageNumber = 0; |
| + sendMessage(); |
| } |
| - this.port.receive((var message, SendPort replyTo) { |
| - totalClients = message.totalClients; |
| - messagesToSend = message.messagesToSend; |
| - messagesToReceive = message.messagesToReceive; |
| - port = message.port; |
| - statusPort = replyTo; |
| + Map joinRequest = new Map(); |
| + joinRequest["request"] = "join"; |
| + joinRequest["handle"] = "test1"; |
| + HttpClientConnection conn = httpClient.post("127.0.0.1", port, "/join"); |
| + conn.onRequest = (HttpClientRequest request) { |
| + request.outputStream.writeString(JSON.stringify(joinRequest)); |
| + request.outputStream.close(); |
| + }; |
| + conn.onResponse = (HttpClientResponse r) { |
| + response = r; |
| + StringInputStream stream = new StringInputStream(response.inputStream); |
| + StringBuffer body = new StringBuffer(); |
| + stream.onData = () => body.add(stream.read()); |
| + stream.onClosed = () => joinResponseHandler(body.toString()); |
| + }; |
| + } |
| + |
| + void dispatch(message, replyTo) { |
| + totalClients = message.totalClients; |
| + messagesToSend = message.messagesToSend; |
| + messagesToReceive = message.messagesToReceive; |
| + port = message.port; |
| + statusPort = replyTo; |
| - // Create a HTTP client factory. |
| - httpClient = new HttpClient(); |
| + // Create a HTTP client factory. |
| + httpClient = new HttpClient(); |
| - // Start the client by joining the chat topic. |
| - join(); |
| - }); |
| + // Start the client by joining the chat topic. |
| + join(); |
| } |
| } |
| @@ -230,10 +235,8 @@ class TestMain { |
| : serverStatusPort = new ReceivePort(), |
| serverPort = null, |
| finishedClients = 0 { |
| - new ChatServer().spawn().then((SendPort port) { |
| - serverPort = port; |
| - start(); |
| - }); |
| + serverPort = spawnFunction(startChatServer); |
| + start(); |
| } |
| void start() { |
| @@ -281,23 +284,20 @@ class TestMain { |
| }); |
| clientStatusPorts[i] = statusPort; |
| - new ChatTestClient().spawn().then((SendPort p) { |
| - clientPorts[i] = p; |
| - liveClientsCount++; |
| - if (liveClientsCount == clientCount) { |
| - // Once all clients are running send server start message to |
| - // the server. Use port 0 for an ephemeral port. The actual |
| - // port will be returned with the server started |
| - // message. Use a backlog equal to the client count to avoid |
| - // connection issues. |
| - serverPort.send(new ChatServerCommand.start("127.0.0.1", |
| - 0, |
| - backlog: clientCount), |
| - serverStatusPort.toSendPort()); |
| - } |
| - }); |
| + clientPorts[i] = spawnFunction(startChatTestClient); |
| + liveClientsCount++; |
| + if (liveClientsCount == clientCount) { |
| + // Once all clients are running send server start message to |
| + // the server. Use port 0 for an ephemeral port. The actual |
| + // port will be returned with the server started |
| + // message. Use a backlog equal to the client count to avoid |
| + // connection issues. |
| + serverPort.send(new ChatServerCommand.start("127.0.0.1", |
| + 0, |
| + backlog: clientCount), |
| + serverStatusPort.toSendPort()); |
| + } |
| } |
| - |
| } |
| int clientCount; // Number of clients to run. |