| 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/time/time.h" |
| 10 #include "mojo/edk/system/channel_endpoint_id.h" | 10 #include "mojo/edk/system/channel_endpoint_id.h" |
| 11 #include "mojo/edk/system/channel_test_base.h" | 11 #include "mojo/edk/system/channel_test_base.h" |
| 12 #include "mojo/edk/system/message_in_transit_queue.h" | 12 #include "mojo/edk/system/message_in_transit_queue.h" |
| 13 #include "mojo/edk/system/message_in_transit_test_utils.h" | 13 #include "mojo/edk/system/message_in_transit_test_utils.h" |
| 14 #include "mojo/edk/system/ref_ptr.h" | 14 #include "mojo/edk/system/ref_ptr.h" |
| 15 #include "mojo/edk/system/test/timeouts.h" |
| 15 #include "mojo/edk/system/test_channel_endpoint_client.h" | 16 #include "mojo/edk/system/test_channel_endpoint_client.h" |
| 16 #include "mojo/edk/util/make_unique.h" | 17 #include "mojo/edk/util/make_unique.h" |
| 17 #include "mojo/public/cpp/system/macros.h" | 18 #include "mojo/public/cpp/system/macros.h" |
| 18 | 19 |
| 19 namespace mojo { | 20 namespace mojo { |
| 20 namespace system { | 21 namespace system { |
| 21 namespace { | 22 namespace { |
| 22 | 23 |
| 23 class EndpointRelayerTest : public test::ChannelTestBase { | 24 class EndpointRelayerTest : public test::ChannelTestBase { |
| 24 public: | 25 public: |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 MOJO_DISALLOW_COPY_AND_ASSIGN(EndpointRelayerTest); | 90 MOJO_DISALLOW_COPY_AND_ASSIGN(EndpointRelayerTest); |
| 90 }; | 91 }; |
| 91 | 92 |
| 92 TEST_F(EndpointRelayerTest, Basic) { | 93 TEST_F(EndpointRelayerTest, Basic) { |
| 93 base::WaitableEvent read_event(true, false); | 94 base::WaitableEvent read_event(true, false); |
| 94 client1b()->SetReadEvent(&read_event); | 95 client1b()->SetReadEvent(&read_event); |
| 95 EXPECT_EQ(0u, client1b()->NumMessages()); | 96 EXPECT_EQ(0u, client1b()->NumMessages()); |
| 96 | 97 |
| 97 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(12345))); | 98 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(12345))); |
| 98 | 99 |
| 99 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); | 100 EXPECT_TRUE(read_event.TimedWait(base::TimeDelta::FromMicroseconds( |
| 101 static_cast<int64_t>(test::TinyTimeout())))); |
| 100 client1b()->SetReadEvent(nullptr); | 102 client1b()->SetReadEvent(nullptr); |
| 101 | 103 |
| 102 ASSERT_EQ(1u, client1b()->NumMessages()); | 104 ASSERT_EQ(1u, client1b()->NumMessages()); |
| 103 std::unique_ptr<MessageInTransit> read_message = client1b()->PopMessage(); | 105 std::unique_ptr<MessageInTransit> read_message = client1b()->PopMessage(); |
| 104 ASSERT_TRUE(read_message); | 106 ASSERT_TRUE(read_message); |
| 105 test::VerifyTestMessage(read_message.get(), 12345); | 107 test::VerifyTestMessage(read_message.get(), 12345); |
| 106 | 108 |
| 107 // Now do the same thing in the opposite direction. | 109 // Now do the same thing in the opposite direction. |
| 108 read_event.Reset(); | 110 read_event.Reset(); |
| 109 client1a()->SetReadEvent(&read_event); | 111 client1a()->SetReadEvent(&read_event); |
| 110 EXPECT_EQ(0u, client1a()->NumMessages()); | 112 EXPECT_EQ(0u, client1a()->NumMessages()); |
| 111 | 113 |
| 112 EXPECT_TRUE(endpoint1b()->EnqueueMessage(test::MakeTestMessage(67890))); | 114 EXPECT_TRUE(endpoint1b()->EnqueueMessage(test::MakeTestMessage(67890))); |
| 113 | 115 |
| 114 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); | 116 EXPECT_TRUE(read_event.TimedWait(base::TimeDelta::FromMicroseconds( |
| 117 static_cast<int64_t>(test::TinyTimeout())))); |
| 115 client1a()->SetReadEvent(nullptr); | 118 client1a()->SetReadEvent(nullptr); |
| 116 | 119 |
| 117 ASSERT_EQ(1u, client1a()->NumMessages()); | 120 ASSERT_EQ(1u, client1a()->NumMessages()); |
| 118 read_message = client1a()->PopMessage(); | 121 read_message = client1a()->PopMessage(); |
| 119 ASSERT_TRUE(read_message); | 122 ASSERT_TRUE(read_message); |
| 120 test::VerifyTestMessage(read_message.get(), 67890); | 123 test::VerifyTestMessage(read_message.get(), 67890); |
| 121 } | 124 } |
| 122 | 125 |
| 123 TEST_F(EndpointRelayerTest, MultipleMessages) { | 126 TEST_F(EndpointRelayerTest, MultipleMessages) { |
| 124 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1))); | 127 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1))); |
| 125 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(2))); | 128 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(2))); |
| 126 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(3))); | 129 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(3))); |
| 127 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(4))); | 130 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(4))); |
| 128 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(5))); | 131 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(5))); |
| 129 | 132 |
| 130 base::WaitableEvent read_event(true, false); | 133 base::WaitableEvent read_event(true, false); |
| 131 client1b()->SetReadEvent(&read_event); | 134 client1b()->SetReadEvent(&read_event); |
| 132 for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) { | 135 for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) { |
| 133 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); | 136 EXPECT_TRUE(read_event.TimedWait(base::TimeDelta::FromMicroseconds( |
| 137 static_cast<int64_t>(test::TinyTimeout())))); |
| 134 read_event.Reset(); | 138 read_event.Reset(); |
| 135 } | 139 } |
| 136 client1b()->SetReadEvent(nullptr); | 140 client1b()->SetReadEvent(nullptr); |
| 137 | 141 |
| 138 // Check the received messages. | 142 // Check the received messages. |
| 139 ASSERT_EQ(5u, client1b()->NumMessages()); | 143 ASSERT_EQ(5u, client1b()->NumMessages()); |
| 140 for (unsigned message_id = 1; message_id <= 5; message_id++) { | 144 for (unsigned message_id = 1; message_id <= 5; message_id++) { |
| 141 std::unique_ptr<MessageInTransit> read_message = client1b()->PopMessage(); | 145 std::unique_ptr<MessageInTransit> read_message = client1b()->PopMessage(); |
| 142 ASSERT_TRUE(read_message); | 146 ASSERT_TRUE(read_message); |
| 143 test::VerifyTestMessage(read_message.get(), message_id); | 147 test::VerifyTestMessage(read_message.get(), message_id); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1001))); | 198 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1001))); |
| 195 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(3))); | 199 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(3))); |
| 196 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(4))); | 200 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(4))); |
| 197 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1002))); | 201 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1002))); |
| 198 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1003))); | 202 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(1003))); |
| 199 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(5))); | 203 EXPECT_TRUE(endpoint1a()->EnqueueMessage(test::MakeTestMessage(5))); |
| 200 | 204 |
| 201 base::WaitableEvent read_event(true, false); | 205 base::WaitableEvent read_event(true, false); |
| 202 client1b()->SetReadEvent(&read_event); | 206 client1b()->SetReadEvent(&read_event); |
| 203 for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) { | 207 for (size_t i = 0; client1b()->NumMessages() < 5 && i < 5; i++) { |
| 204 EXPECT_TRUE(read_event.TimedWait(TestTimeouts::tiny_timeout())); | 208 EXPECT_TRUE(read_event.TimedWait(base::TimeDelta::FromMicroseconds( |
| 209 static_cast<int64_t>(test::TinyTimeout())))); |
| 205 read_event.Reset(); | 210 read_event.Reset(); |
| 206 } | 211 } |
| 207 client1b()->SetReadEvent(nullptr); | 212 client1b()->SetReadEvent(nullptr); |
| 208 | 213 |
| 209 // Check the received messages: We should get "1"-"5". | 214 // Check the received messages: We should get "1"-"5". |
| 210 ASSERT_EQ(5u, client1b()->NumMessages()); | 215 ASSERT_EQ(5u, client1b()->NumMessages()); |
| 211 for (unsigned message_id = 1; message_id <= 5; message_id++) { | 216 for (unsigned message_id = 1; message_id <= 5; message_id++) { |
| 212 std::unique_ptr<MessageInTransit> read_message = client1b()->PopMessage(); | 217 std::unique_ptr<MessageInTransit> read_message = client1b()->PopMessage(); |
| 213 ASSERT_TRUE(read_message); | 218 ASSERT_TRUE(read_message); |
| 214 test::VerifyTestMessage(read_message.get(), message_id); | 219 test::VerifyTestMessage(read_message.get(), message_id); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 225 ASSERT_TRUE(message); | 230 ASSERT_TRUE(message); |
| 226 test::VerifyTestMessage(message.get(), message_id); | 231 test::VerifyTestMessage(message.get(), message_id); |
| 227 } | 232 } |
| 228 } | 233 } |
| 229 | 234 |
| 230 // TODO(vtl): Add some "shutdown" tests. | 235 // TODO(vtl): Add some "shutdown" tests. |
| 231 | 236 |
| 232 } // namespace | 237 } // namespace |
| 233 } // namespace system | 238 } // namespace system |
| 234 } // namespace mojo | 239 } // namespace mojo |
| OLD | NEW |