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 #include "platform/assert.h" | 5 #include "platform/assert.h" |
6 #include "vm/lockers.h" | 6 #include "vm/lockers.h" |
7 #include "vm/message_handler.h" | 7 #include "vm/message_handler.h" |
8 #include "vm/os.h" | 8 #include "vm/os.h" |
9 #include "vm/port.h" | 9 #include "vm/port.h" |
10 #include "vm/unit_test.h" | 10 #include "vm/unit_test.h" |
11 | 11 |
12 namespace dart { | 12 namespace dart { |
13 | 13 |
14 // Provides private access to PortMap for testing. | 14 // Provides private access to PortMap for testing. |
15 class PortMapTestPeer { | 15 class PortMapTestPeer { |
16 public: | 16 public: |
17 static bool IsActivePort(Dart_Port port) { | 17 static bool IsActivePort(Dart_Port port) { |
18 MutexLocker ml(PortMap::mutex_); | 18 MutexLocker ml(PortMap::mutex_); |
19 return (PortMap::FindPort(port) >= 0); | 19 return (PortMap::FindPort(port) >= 0); |
20 } | 20 } |
21 | 21 |
22 static bool IsLivePort(Dart_Port port) { | 22 static bool IsLivePort(Dart_Port port) { |
23 MutexLocker ml(PortMap::mutex_); | 23 MutexLocker ml(PortMap::mutex_); |
24 intptr_t index = PortMap::FindPort(port); | 24 intptr_t index = PortMap::FindPort(port); |
25 if (index < 0) { | 25 if (index < 0) { |
26 return false; | 26 return false; |
27 } | 27 } |
28 return PortMap::map_[index].live; | 28 return PortMap::map_[index].state == PortMap::kLivePort; |
29 } | 29 } |
30 }; | 30 }; |
31 | 31 |
32 | 32 |
33 class PortTestMessageHandler : public MessageHandler { | 33 class PortTestMessageHandler : public MessageHandler { |
34 public: | 34 public: |
35 PortTestMessageHandler() : notify_count(0) {} | 35 PortTestMessageHandler() : notify_count(0) {} |
36 | 36 |
37 void MessageNotify(Message::Priority priority) { | 37 void MessageNotify(Message::Priority priority) { |
38 notify_count++; | 38 notify_count++; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 PortTestMessageHandler handler; | 93 PortTestMessageHandler handler; |
94 for (int i = 0; i < 32; i++) { | 94 for (int i = 0; i < 32; i++) { |
95 Dart_Port port = PortMap::CreatePort(&handler); | 95 Dart_Port port = PortMap::CreatePort(&handler); |
96 EXPECT(PortMapTestPeer::IsActivePort(port)); | 96 EXPECT(PortMapTestPeer::IsActivePort(port)); |
97 PortMap::ClosePort(port); | 97 PortMap::ClosePort(port); |
98 EXPECT(!PortMapTestPeer::IsActivePort(port)); | 98 EXPECT(!PortMapTestPeer::IsActivePort(port)); |
99 } | 99 } |
100 } | 100 } |
101 | 101 |
102 | 102 |
103 TEST_CASE(PortMap_SetLive) { | 103 TEST_CASE(PortMap_SetPortState) { |
104 PortTestMessageHandler handler; | 104 PortTestMessageHandler handler; |
| 105 |
| 106 // Regular port. |
105 Dart_Port port = PortMap::CreatePort(&handler); | 107 Dart_Port port = PortMap::CreatePort(&handler); |
106 EXPECT_NE(0, port); | 108 EXPECT_NE(0, port); |
107 EXPECT(PortMapTestPeer::IsActivePort(port)); | 109 EXPECT(PortMapTestPeer::IsActivePort(port)); |
108 EXPECT(!PortMapTestPeer::IsLivePort(port)); | 110 EXPECT(!PortMapTestPeer::IsLivePort(port)); |
109 | 111 |
110 PortMap::SetLive(port); | 112 PortMap::SetPortState(port, PortMap::kLivePort); |
111 EXPECT(PortMapTestPeer::IsActivePort(port)); | 113 EXPECT(PortMapTestPeer::IsActivePort(port)); |
112 EXPECT(PortMapTestPeer::IsLivePort(port)); | 114 EXPECT(PortMapTestPeer::IsLivePort(port)); |
113 | 115 |
114 PortMap::ClosePort(port); | 116 PortMap::ClosePort(port); |
115 EXPECT(!PortMapTestPeer::IsActivePort(port)); | 117 EXPECT(!PortMapTestPeer::IsActivePort(port)); |
116 EXPECT(!PortMapTestPeer::IsLivePort(port)); | 118 EXPECT(!PortMapTestPeer::IsLivePort(port)); |
| 119 |
| 120 // Control port. |
| 121 port = PortMap::CreatePort(&handler); |
| 122 EXPECT_NE(0, port); |
| 123 EXPECT(PortMapTestPeer::IsActivePort(port)); |
| 124 EXPECT(!PortMapTestPeer::IsLivePort(port)); |
| 125 |
| 126 PortMap::SetPortState(port, PortMap::kControlPort); |
| 127 EXPECT(PortMapTestPeer::IsActivePort(port)); |
| 128 EXPECT(!PortMapTestPeer::IsLivePort(port)); |
| 129 |
| 130 PortMap::ClosePort(port); |
| 131 EXPECT(!PortMapTestPeer::IsActivePort(port)); |
| 132 EXPECT(!PortMapTestPeer::IsLivePort(port)); |
117 } | 133 } |
118 | 134 |
119 | 135 |
120 TEST_CASE(PortMap_PostMessage) { | 136 TEST_CASE(PortMap_PostMessage) { |
121 PortTestMessageHandler handler; | 137 PortTestMessageHandler handler; |
122 Dart_Port port = PortMap::CreatePort(&handler); | 138 Dart_Port port = PortMap::CreatePort(&handler); |
123 EXPECT_EQ(0, handler.notify_count); | 139 EXPECT_EQ(0, handler.notify_count); |
124 | 140 |
125 const char* message = "msg"; | 141 const char* message = "msg"; |
126 intptr_t message_len = strlen(message) + 1; | 142 intptr_t message_len = strlen(message) + 1; |
(...skipping 16 matching lines...) Expand all Loading... |
143 | 159 |
144 const char* message = "msg"; | 160 const char* message = "msg"; |
145 intptr_t message_len = strlen(message) + 1; | 161 intptr_t message_len = strlen(message) + 1; |
146 | 162 |
147 EXPECT(!PortMap::PostMessage(new Message( | 163 EXPECT(!PortMap::PostMessage(new Message( |
148 port, reinterpret_cast<uint8_t*>(strdup(message)), message_len, | 164 port, reinterpret_cast<uint8_t*>(strdup(message)), message_len, |
149 Message::kNormalPriority))); | 165 Message::kNormalPriority))); |
150 } | 166 } |
151 | 167 |
152 } // namespace dart | 168 } // namespace dart |
OLD | NEW |