| Index: runtime/vm/message_handler_test.cc
|
| diff --git a/runtime/vm/message_handler_test.cc b/runtime/vm/message_handler_test.cc
|
| index c2724118f38234b5f4b1e3b314d44ed13eb53336..57eeb342a71ef401a4b75a317be6d887053d46c8 100644
|
| --- a/runtime/vm/message_handler_test.cc
|
| +++ b/runtime/vm/message_handler_test.cc
|
| @@ -3,7 +3,6 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| #include "vm/message_handler.h"
|
| -#include "vm/port.h"
|
| #include "vm/unit_test.h"
|
|
|
| namespace dart {
|
| @@ -33,17 +32,14 @@ class MessageHandlerTestPeer {
|
| class TestMessageHandler : public MessageHandler {
|
| public:
|
| TestMessageHandler()
|
| - : port_buffer_(NULL),
|
| - port_buffer_size_(0),
|
| + : port_buffer_(strdup("")),
|
| notify_count_(0),
|
| message_count_(0),
|
| - start_called_(false),
|
| - end_called_(false),
|
| result_(true) {
|
| }
|
|
|
| ~TestMessageHandler() {
|
| - delete[] port_buffer_;
|
| + free(port_buffer_);
|
| }
|
|
|
| void MessageNotify(Message::Priority priority) {
|
| @@ -51,51 +47,55 @@ class TestMessageHandler : public MessageHandler {
|
| }
|
|
|
| bool HandleMessage(Message* message) {
|
| - // For testing purposes, keep a list of the ports
|
| + // For testing purposes, keep a string with a list of the ports
|
| // for all messages we receive.
|
| - AddPortToBuffer(message->dest_port());
|
| + intptr_t len =
|
| + OS::SNPrint(NULL, 0, "%s %"Pd64"",
|
| + port_buffer_,
|
| + message->dest_port()) + 1;
|
| + char* buffer = reinterpret_cast<char*>(malloc(len));
|
| + OS::SNPrint(buffer, len, "%s %"Pd64"",
|
| + port_buffer_,
|
| + message->dest_port());
|
| + free(port_buffer_);
|
| + port_buffer_ = buffer;
|
| delete message;
|
| message_count_++;
|
| return result_;
|
| }
|
|
|
| +
|
| bool Start() {
|
| - start_called_ = true;
|
| + intptr_t len =
|
| + OS::SNPrint(NULL, 0, "%s start", port_buffer_) + 1;
|
| + char* buffer = reinterpret_cast<char*>(malloc(len));
|
| + OS::SNPrint(buffer, len, "%s start", port_buffer_);
|
| + free(port_buffer_);
|
| + port_buffer_ = buffer;
|
| return true;
|
| }
|
|
|
| +
|
| void End() {
|
| - end_called_ = true;
|
| - AddPortToBuffer(-2);
|
| + intptr_t len =
|
| + OS::SNPrint(NULL, 0, "%s end", port_buffer_) + 1;
|
| + char* buffer = reinterpret_cast<char*>(malloc(len));
|
| + OS::SNPrint(buffer, len, "%s end", port_buffer_);
|
| + free(port_buffer_);
|
| + port_buffer_ = buffer;
|
| }
|
|
|
| - Dart_Port* port_buffer() const { return port_buffer_; }
|
| +
|
| + const char* port_buffer() const { return port_buffer_; }
|
| int notify_count() const { return notify_count_; }
|
| int message_count() const { return message_count_; }
|
| - bool start_called() const { return start_called_; }
|
| - bool end_called() const { return end_called_; }
|
|
|
| void set_result(bool result) { result_ = result; }
|
|
|
| private:
|
| - void AddPortToBuffer(Dart_Port port) {
|
| - if (port_buffer_ == NULL) {
|
| - port_buffer_ = new Dart_Port[10];
|
| - port_buffer_size_ = 10;
|
| - } else if (message_count_ == port_buffer_size_) {
|
| - port_buffer_size_ = 2 * port_buffer_size_;
|
| - delete[] port_buffer_;
|
| - port_buffer_ = new Dart_Port[port_buffer_size_];
|
| - }
|
| - port_buffer_[message_count_] = port;
|
| - }
|
| -
|
| - Dart_Port* port_buffer_;
|
| - int port_buffer_size_;
|
| + char* port_buffer_;
|
| int notify_count_;
|
| int message_count_;
|
| - bool start_called_;
|
| - bool end_called_;
|
| bool result_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(TestMessageHandler);
|
| @@ -153,10 +153,9 @@ UNIT_TEST_CASE(MessageHandler_ClosePort) {
|
|
|
| handler_peer.ClosePort(1);
|
|
|
| - // Closing the port does not drop the messages from the queue.
|
| - EXPECT(message1 == handler_peer.queue()->Dequeue());
|
| + // The message on port 1 is dropped from the queue.
|
| EXPECT(message2 == handler_peer.queue()->Dequeue());
|
| - delete message1;
|
| + EXPECT(NULL == handler_peer.queue()->Dequeue());
|
| delete message2;
|
| }
|
|
|
| @@ -179,58 +178,43 @@ UNIT_TEST_CASE(MessageHandler_CloseAllPorts) {
|
| UNIT_TEST_CASE(MessageHandler_HandleNextMessage) {
|
| TestMessageHandler handler;
|
| MessageHandlerTestPeer handler_peer(&handler);
|
| - Dart_Port port1 = PortMap::CreatePort(&handler);
|
| - Dart_Port port2 = PortMap::CreatePort(&handler);
|
| - Dart_Port port3 = PortMap::CreatePort(&handler);
|
| - Message* message1 = new Message(port1, 0, NULL, 0, Message::kNormalPriority);
|
| + Message* message1 = new Message(1, 0, NULL, 0, Message::kNormalPriority);
|
| handler_peer.PostMessage(message1);
|
| - Message* oob_message1 = new Message(port2, 0, NULL, 0, Message::kOOBPriority);
|
| + Message* oob_message1 = new Message(3, 0, NULL, 0, Message::kOOBPriority);
|
| handler_peer.PostMessage(oob_message1);
|
| - Message* message2 = new Message(port2, 0, NULL, 0, Message::kNormalPriority);
|
| + Message* message2 = new Message(2, 0, NULL, 0, Message::kNormalPriority);
|
| handler_peer.PostMessage(message2);
|
| - Message* oob_message2 = new Message(port3, 0, NULL, 0, Message::kOOBPriority);
|
| + Message* oob_message2 = new Message(4, 0, NULL, 0, Message::kOOBPriority);
|
| handler_peer.PostMessage(oob_message2);
|
|
|
| // We handle both oob messages and a single normal message.
|
| EXPECT(handler.HandleNextMessage());
|
| - EXPECT_EQ(3, handler.message_count());
|
| - Dart_Port* ports = handler.port_buffer();
|
| - EXPECT_EQ(port2, ports[0]);
|
| - EXPECT_EQ(port3, ports[1]);
|
| - EXPECT_EQ(port1, ports[2]);
|
| - PortMap::ClosePorts(&handler);
|
| + EXPECT_STREQ(" 3 4 1", handler.port_buffer());
|
| + handler_peer.CloseAllPorts();
|
| }
|
|
|
|
|
| UNIT_TEST_CASE(MessageHandler_HandleOOBMessages) {
|
| TestMessageHandler handler;
|
| MessageHandlerTestPeer handler_peer(&handler);
|
| - Dart_Port port1 = PortMap::CreatePort(&handler);
|
| - Dart_Port port2 = PortMap::CreatePort(&handler);
|
| - Dart_Port port3 = PortMap::CreatePort(&handler);
|
| - Dart_Port port4 = PortMap::CreatePort(&handler);
|
| - Message* message1 = new Message(port1, 0, NULL, 0, Message::kNormalPriority);
|
| + Message* message1 = new Message(1, 0, NULL, 0, Message::kNormalPriority);
|
| handler_peer.PostMessage(message1);
|
| - Message* message2 = new Message(port2, 0, NULL, 0, Message::kNormalPriority);
|
| + Message* message2 = new Message(2, 0, NULL, 0, Message::kNormalPriority);
|
| handler_peer.PostMessage(message2);
|
| - Message* oob_message1 = new Message(port3, 0, NULL, 0, Message::kOOBPriority);
|
| + Message* oob_message1 = new Message(3, 0, NULL, 0, Message::kOOBPriority);
|
| handler_peer.PostMessage(oob_message1);
|
| - Message* oob_message2 = new Message(port4, 0, NULL, 0, Message::kOOBPriority);
|
| + Message* oob_message2 = new Message(4, 0, NULL, 0, Message::kOOBPriority);
|
| handler_peer.PostMessage(oob_message2);
|
|
|
| // We handle both oob messages but no normal messages.
|
| EXPECT(handler.HandleOOBMessages());
|
| - EXPECT_EQ(2, handler.message_count());
|
| - Dart_Port* ports = handler.port_buffer();
|
| - EXPECT_EQ(port3, ports[0]);
|
| - EXPECT_EQ(port4, ports[1]);
|
| + EXPECT_STREQ(" 3 4", handler.port_buffer());
|
| handler_peer.CloseAllPorts();
|
| }
|
|
|
|
|
| struct ThreadStartInfo {
|
| MessageHandler* handler;
|
| - Dart_Port* ports;
|
| int count;
|
| };
|
|
|
| @@ -240,8 +224,7 @@ static void SendMessages(uword param) {
|
| MessageHandler* handler = info->handler;
|
| MessageHandlerTestPeer handler_peer(handler);
|
| for (int i = 0; i < info->count; i++) {
|
| - Message* message =
|
| - new Message(info->ports[i], 0, NULL, 0, Message::kNormalPriority);
|
| + Message* message = new Message(i + 1, 0, NULL, 0, Message::kNormalPriority);
|
| handler_peer.PostMessage(message);
|
| }
|
| }
|
| @@ -261,8 +244,7 @@ UNIT_TEST_CASE(MessageHandler_Run) {
|
| TestStartFunction,
|
| TestEndFunction,
|
| reinterpret_cast<uword>(&handler));
|
| - Dart_Port port = PortMap::CreatePort(&handler);
|
| - Message* message = new Message(port, 0, NULL, 0, Message::kNormalPriority);
|
| + Message* message = new Message(100, 0, NULL, 0, Message::kNormalPriority);
|
| handler_peer.PostMessage(message);
|
|
|
| // Wait for the first message to be handled.
|
| @@ -270,36 +252,21 @@ UNIT_TEST_CASE(MessageHandler_Run) {
|
| OS::Sleep(10);
|
| sleep += 10;
|
| }
|
| - EXPECT_EQ(1, handler.message_count());
|
| - EXPECT(handler.start_called());
|
| - EXPECT(!handler.end_called());
|
| - Dart_Port* handler_ports = handler.port_buffer();
|
| - EXPECT_EQ(port, handler_ports[0]);
|
| + EXPECT_STREQ(" start 100", handler.port_buffer());
|
|
|
| // Start a thread which sends more messages.
|
| - Dart_Port* ports = new Dart_Port[10];
|
| - for (int i = 0; i < 10; i++) {
|
| - ports[i] = PortMap::CreatePort(&handler);
|
| - }
|
| ThreadStartInfo info;
|
| info.handler = &handler;
|
| - info.ports = ports;
|
| info.count = 10;
|
| Thread::Start(SendMessages, reinterpret_cast<uword>(&info));
|
| while (sleep < kMaxSleep && handler.message_count() < 11) {
|
| OS::Sleep(10);
|
| sleep += 10;
|
| }
|
| - EXPECT_EQ(11, handler.message_count());
|
| - EXPECT(handler.start_called());
|
| - EXPECT(!handler.end_called());
|
| - EXPECT_EQ(port, handler_ports[0]);
|
| - for (int i = 1; i < 11; i++) {
|
| - EXPECT_EQ(ports[i - 1], handler_ports[i]);
|
| - }
|
| + EXPECT_STREQ(" start 100 1 2 3 4 5 6 7 8 9 10", handler.port_buffer());
|
| +
|
| handler_peer.decrement_live_ports();
|
| EXPECT(!handler.HasLivePorts());
|
| - PortMap::ClosePorts(&handler);
|
| }
|
|
|
| } // namespace dart
|
|
|