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 |