| 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 |