OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/edk/system/endpoint_relayer.h" | 5 #include "mojo/edk/system/endpoint_relayer.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/synchronization/waitable_event.h" | 8 #include "base/synchronization/waitable_event.h" |
9 #include "base/test/test_timeouts.h" | 9 #include "base/test/test_timeouts.h" |
10 #include "mojo/edk/system/channel_endpoint_id.h" | 10 #include "mojo/edk/system/channel_endpoint_id.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 base::WaitableEvent read_event(true, false); | 92 base::WaitableEvent read_event(true, false); |
93 client1b()->SetReadEvent(&read_event); | 93 client1b()->SetReadEvent(&read_event); |
94 EXPECT_EQ(0u, client1b()->NumMessages()); | 94 EXPECT_EQ(0u, client1b()->NumMessages()); |
95 | 95 |
96 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(12345))); | 96 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(12345))); |
97 | 97 |
98 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); | 98 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); |
99 client1b()->SetReadEvent(nullptr); | 99 client1b()->SetReadEvent(nullptr); |
100 | 100 |
101 ASSERT_EQ(1u, client1b()->NumMessages()); | 101 ASSERT_EQ(1u, client1b()->NumMessages()); |
102 scoped_ptr<MessageInTransit> read_message = client1b()->PopMessage(); | 102 std::unique_ptr<MessageInTransit> read_message = client1b()->PopMessage(); |
103 ASSERT_TRUE(read_message); | 103 ASSERT_TRUE(read_message); |
104 test::VerifyTestMessage(read_message.get(), 12345); | 104 test::VerifyTestMessage(read_message.get(), 12345); |
105 | 105 |
106 // Now do the same thing in the opposite direction. | 106 // Now do the same thing in the opposite direction. |
107 read_event.Reset(); | 107 read_event.Reset(); |
108 client1a()->SetReadEvent(&read_event); | 108 client1a()->SetReadEvent(&read_event); |
109 EXPECT_EQ(0u, client1a()->NumMessages()); | 109 EXPECT_EQ(0u, client1a()->NumMessages()); |
110 | 110 |
111 EXPECT_TRUE(endpoint1b()->EnqueueMessage(test::MakeTestMessage(67890))); | 111 EXPECT_TRUE(endpoint1b()->EnqueueMessage(test::MakeTestMessage(67890))); |
112 | 112 |
(...skipping 17 matching lines...) Expand all Loading... |
130 client1b()->SetReadEvent(&read_event); | 130 client1b()->SetReadEvent(&read_event); |
131 for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) { | 131 for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) { |
132 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); | 132 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); |
133 read_event.Reset(); | 133 read_event.Reset(); |
134 } | 134 } |
135 client1b()->SetReadEvent(nullptr); | 135 client1b()->SetReadEvent(nullptr); |
136 | 136 |
137 // Check the received messages. | 137 // Check the received messages. |
138 ASSERT_EQ(5u, client1b()->NumMessages()); | 138 ASSERT_EQ(5u, client1b()->NumMessages()); |
139 for (unsigned message_id = 1; message_id <= 5; message_id++) { | 139 for (unsigned message_id = 1; message_id <= 5; message_id++) { |
140 scoped_ptr<MessageInTransit> read_message = client1b()->PopMessage(); | 140 std::unique_ptr<MessageInTransit> read_message = client1b()->PopMessage(); |
141 ASSERT_TRUE(read_message); | 141 ASSERT_TRUE(read_message); |
142 test::VerifyTestMessage(read_message.get(), message_id); | 142 test::VerifyTestMessage(read_message.get(), message_id); |
143 } | 143 } |
144 } | 144 } |
145 | 145 |
146 // A simple test filter. It will filter test messages made with | 146 // A simple test filter. It will filter test messages made with |
147 // |test::MakeTestMessage()| with |id >= 1000|, and not filter other messages. | 147 // |test::MakeTestMessage()| with |id >= 1000|, and not filter other messages. |
148 class TestFilter : public EndpointRelayer::Filter { | 148 class TestFilter : public EndpointRelayer::Filter { |
149 public: | 149 public: |
150 // |filtered_messages| will receive (and own) filtered messages; it will be | 150 // |filtered_messages| will receive (and own) filtered messages; it will be |
(...skipping 12 matching lines...) Expand all Loading... |
163 // Note: Recall that this is called under the |EndpointRelayer|'s lock. | 163 // Note: Recall that this is called under the |EndpointRelayer|'s lock. |
164 bool OnReadMessage(ChannelEndpoint* endpoint, | 164 bool OnReadMessage(ChannelEndpoint* endpoint, |
165 ChannelEndpoint* peer_endpoint, | 165 ChannelEndpoint* peer_endpoint, |
166 MessageInTransit* message) override { | 166 MessageInTransit* message) override { |
167 CHECK(endpoint); | 167 CHECK(endpoint); |
168 CHECK(peer_endpoint); | 168 CHECK(peer_endpoint); |
169 CHECK(message); | 169 CHECK(message); |
170 | 170 |
171 unsigned id = 0; | 171 unsigned id = 0; |
172 if (test::IsTestMessage(message, &id) && id >= 1000) { | 172 if (test::IsTestMessage(message, &id) && id >= 1000) { |
173 filtered_messages_->AddMessage(make_scoped_ptr(message)); | 173 filtered_messages_->AddMessage( |
| 174 std::unique_ptr<MessageInTransit>(message)); |
174 return true; | 175 return true; |
175 } | 176 } |
176 | 177 |
177 return false; | 178 return false; |
178 } | 179 } |
179 | 180 |
180 private: | 181 private: |
181 MessageInTransitQueue* const filtered_messages_; | 182 MessageInTransitQueue* const filtered_messages_; |
182 | 183 |
183 MOJO_DISALLOW_COPY_AND_ASSIGN(TestFilter); | 184 MOJO_DISALLOW_COPY_AND_ASSIGN(TestFilter); |
(...skipping 16 matching lines...) Expand all Loading... |
200 client1b()->SetReadEvent(&read_event); | 201 client1b()->SetReadEvent(&read_event); |
201 for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) { | 202 for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) { |
202 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); | 203 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); |
203 read_event.Reset(); | 204 read_event.Reset(); |
204 } | 205 } |
205 client1b()->SetReadEvent(nullptr); | 206 client1b()->SetReadEvent(nullptr); |
206 | 207 |
207 // Check the received messages: We should get "1"-"5". | 208 // Check the received messages: We should get "1"-"5". |
208 ASSERT_EQ(5u, client1b()->NumMessages()); | 209 ASSERT_EQ(5u, client1b()->NumMessages()); |
209 for (unsigned message_id = 1; message_id <= 5; message_id++) { | 210 for (unsigned message_id = 1; message_id <= 5; message_id++) { |
210 scoped_ptr<MessageInTransit> read_message = client1b()->PopMessage(); | 211 std::unique_ptr<MessageInTransit> read_message = client1b()->PopMessage(); |
211 ASSERT_TRUE(read_message); | 212 ASSERT_TRUE(read_message); |
212 test::VerifyTestMessage(read_message.get(), message_id); | 213 test::VerifyTestMessage(read_message.get(), message_id); |
213 } | 214 } |
214 | 215 |
215 // Reset the filter, so we can safely examine |filtered_messages|. | 216 // Reset the filter, so we can safely examine |filtered_messages|. |
216 relayer()->SetFilter(nullptr); | 217 relayer()->SetFilter(nullptr); |
217 | 218 |
218 // Note that since "5" was sent after "1003" and it the former was received, | 219 // Note that since "5" was sent after "1003" and it the former was received, |
219 // the latter must have also been "received"/filtered. | 220 // the latter must have also been "received"/filtered. |
220 ASSERT_EQ(3u, filtered_messages.Size()); | 221 ASSERT_EQ(3u, filtered_messages.Size()); |
221 for (unsigned message_id = 1001; message_id <= 1003; message_id++) { | 222 for (unsigned message_id = 1001; message_id <= 1003; message_id++) { |
222 scoped_ptr<MessageInTransit> message = filtered_messages.GetMessage(); | 223 std::unique_ptr<MessageInTransit> message = filtered_messages.GetMessage(); |
223 ASSERT_TRUE(message); | 224 ASSERT_TRUE(message); |
224 test::VerifyTestMessage(message.get(), message_id); | 225 test::VerifyTestMessage(message.get(), message_id); |
225 } | 226 } |
226 } | 227 } |
227 | 228 |
228 // TODO(vtl): Add some "shutdown" tests. | 229 // TODO(vtl): Add some "shutdown" tests. |
229 | 230 |
230 } // namespace | 231 } // namespace |
231 } // namespace system | 232 } // namespace system |
232 } // namespace mojo | 233 } // namespace mojo |
OLD | NEW |