| Index: samples/tests/src/chat/chat_server_test.dart
|
| diff --git a/samples/tests/src/chat/chat_server_test.dart b/samples/tests/src/chat/chat_server_test.dart
|
| deleted file mode 100644
|
| index 9eac2496244c0bdd1497b58e1ce4957ab1889fc4..0000000000000000000000000000000000000000
|
| --- a/samples/tests/src/chat/chat_server_test.dart
|
| +++ /dev/null
|
| @@ -1,317 +0,0 @@
|
| -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -#library("chat_server_test.dart");
|
| -#import("../../../chat/http.dart");
|
| -#import("../../../../client/json/dart_json.dart");
|
| -#import("../../../chat/chat_server_lib.dart");
|
| -
|
| -
|
| -// Message to start chat test client running in an isolate.
|
| -class ChatTestClientStart {
|
| - ChatTestClientStart(int this.totalClients,
|
| - int this.messagesToSend,
|
| - int this.messagesToReceive,
|
| - int this.port);
|
| -
|
| - int totalClients;
|
| - int messagesToSend;
|
| - int messagesToReceive;
|
| - int port;
|
| -}
|
| -
|
| -
|
| -// 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 messageRequest = new Map();
|
| - messageRequest["request"] = "leave";
|
| - messageRequest["sessionId"] = sessionId;
|
| - request = httpClient.open("POST", "127.0.0.1", port, "/leave");
|
| - request.writeString(JSON.stringify(messageRequest));
|
| - request.responseReceived =
|
| - void _(HTTPClientResponse r) {
|
| - response = r;
|
| - response.dataEnd = leaveResponseHandler;
|
| - };
|
| - request.writeDone();
|
| - }
|
| -
|
| - 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"]);
|
| - receiveMessageNumber += responseData["messages"].length;
|
| - 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).toString(), message["message"]);
|
| - }
|
| - }
|
| - }
|
| -
|
| - // Receive all expected messages then leave.
|
| - if (messageCount < messagesToReceive) {
|
| - receive();
|
| - } else {
|
| - Expect.equals(messagesToReceive, messageCount);
|
| - Expect.equals(totalClients, joinCount);
|
| - leave();
|
| - }
|
| - }
|
| -
|
| - Map messageRequest = new Map();
|
| - messageRequest["request"] = "receive";
|
| - messageRequest["sessionId"] = sessionId;
|
| - messageRequest["nextMessage"] = receiveMessageNumber;
|
| - request = httpClient.open("POST", "127.0.0.1", port, "/receive");
|
| - request.writeString(JSON.stringify(messageRequest));
|
| - request.responseReceived =
|
| - void _(HTTPClientResponse r) {
|
| - response = r;
|
| - response.dataEnd = receiveResponseHandler;
|
| - };
|
| - request.writeDone();
|
| - }
|
| -
|
| - 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 messageRequest = new Map();
|
| - messageRequest["request"] = "message";
|
| - messageRequest["sessionId"] = sessionId;
|
| - messageRequest["message"] = "message " + sendMessageNumber;
|
| - request = httpClient.open("POST", "127.0.0.1", port, "/message");
|
| - request.writeString(JSON.stringify(messageRequest));
|
| - request.responseReceived =
|
| - void _(HTTPClientResponse r) {
|
| - response = r;
|
| - response.dataEnd = sendResponseHandler;
|
| - };
|
| - request.writeDone();
|
| - }
|
| -
|
| - 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();
|
| - }
|
| -
|
| - Map joinRequest = new Map();
|
| - joinRequest["request"] = "join";
|
| - joinRequest["handle"] = "test1";
|
| - request = httpClient.open("POST", "127.0.0.1", port, "/join");
|
| - request.writeString(JSON.stringify(joinRequest));
|
| - request.responseReceived =
|
| - void _(HTTPClientResponse r) {
|
| - response = r;
|
| - response.dataEnd = joinResponseHandler;
|
| - };
|
| - request.writeDone();
|
| - }
|
| -
|
| - this.port.receive(
|
| - void _(var message, SendPort replyTo) {
|
| - totalClients = message.totalClients;
|
| - messagesToSend = message.messagesToSend;
|
| - messagesToReceive = message.messagesToReceive;
|
| - port = message.port;
|
| - statusPort = replyTo;
|
| -
|
| - // Create a HTTP client factory.
|
| - httpClient = new HTTPClient();
|
| -
|
| - // Start the client by joining the chat topic.
|
| - join();
|
| - });
|
| - }
|
| -}
|
| -
|
| -
|
| -class TestMain {
|
| - TestMain.start(int this.clientCount, int this.messageCount)
|
| - : serverStatusPort = new ReceivePort(),
|
| - serverPort = null,
|
| - finishedClients = 0 {
|
| - new ChatServer().spawn().then(void _(SendPort port) {
|
| - serverPort = port;
|
| - start();
|
| - });
|
| - }
|
| -
|
| - void start() {
|
| - // Handle status messages from the server.
|
| - serverStatusPort.receive(
|
| - (var message, SendPort replyTo) {
|
| - if (message.isStarted) {
|
| - // When the server is started start all test clients.
|
| - for (int i = 0; i < clientCount; i++) {
|
| - ChatTestClientStart command =
|
| - new ChatTestClientStart(clientCount,
|
| - messageCount,
|
| - messageCount * this.clientCount,
|
| - message.port);
|
| - clientPorts[i].send(command, clientStatusPorts[i].toSendPort());
|
| - }
|
| - } else if (message.isError) {
|
| - print("Could not start server - probably error \"Address already in use\" from bind.");
|
| - serverStatusPort.close();
|
| - }
|
| - });
|
| -
|
| - // Prepare the requested number of clients.
|
| - clientPorts = new List<SendPort>(clientCount);
|
| - int liveClientsCount = 0;
|
| - clientStatusPorts = new List<ReceivePort>(clientCount);
|
| - for (int i = 0; i < clientCount; i++) {
|
| - ReceivePort statusPort = new ReceivePort();
|
| - statusPort.receive(
|
| - void _(var message, SendPort replyTo) {
|
| - // First and only message from the client indicates that
|
| - // the test is done.
|
| - Expect.equals("Test succeeded", message);
|
| - statusPort.close();
|
| - finishedClients++;
|
| -
|
| - // If all clients are finished shutdown the server.
|
| - if (finishedClients == clientCount) {
|
| - // Send server stop message to the server.
|
| - serverPort.send(new ChatServerCommand.stop(),
|
| - serverStatusPort.toSendPort());
|
| -
|
| - // Close the last port to terminate the test.
|
| - serverStatusPort.close();
|
| - }
|
| - });
|
| -
|
| - 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.
|
| - serverPort.send(new ChatServerCommand.start("127.0.0.1", 0, false),
|
| - serverStatusPort.toSendPort());
|
| - }
|
| - });
|
| - }
|
| -
|
| - }
|
| -
|
| - int clientCount; // Number of clients to run.
|
| - int messageCount; // Number of messages per clients to send.
|
| - int finishedClients; // Number of clients finished.
|
| -
|
| - // Ports for communicating with the server.
|
| - SendPort serverPort;
|
| - ReceivePort serverStatusPort;
|
| - // Ports for communicating with the clients.
|
| - List<SendPort> clientPorts;
|
| - List<ReceivePort> clientStatusPorts;
|
| -}
|
| -
|
| -
|
| -void testOneClient() {
|
| - TestMain testMain = new TestMain.start(1, 5);
|
| -}
|
| -
|
| -
|
| -void testTwoClients() {
|
| - TestMain testMain = new TestMain.start(2, 5);
|
| -}
|
| -
|
| -
|
| -void testTwoClientsMoreMessages() {
|
| - TestMain testMain = new TestMain.start(2, 10);
|
| -}
|
| -
|
| -
|
| -void testTenClients() {
|
| - TestMain testMain = new TestMain.start(10, 2);
|
| -}
|
| -
|
| -
|
| -void main() {
|
| - testOneClient();
|
| - testTwoClients();
|
| - testTwoClientsMoreMessages;
|
| - testTenClients();
|
| -}
|
|
|