OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 // TODO(vtl): The POSIX-specific bits have been factored out. Apply this test to | 5 // TODO(vtl): The POSIX-specific bits have been factored out. Apply this test to |
6 // non-POSIX once we have a non-POSIX implementation. | 6 // non-POSIX once we have a non-POSIX implementation. |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <string.h> | 9 #include <string.h> |
10 | 10 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/callback.h" | 13 #include "base/callback.h" |
14 #include "base/location.h" | 14 #include "base/location.h" |
15 #include "base/logging.h" | 15 #include "base/logging.h" |
16 #include "base/message_loop/message_loop.h" | 16 #include "base/message_loop/message_loop.h" |
17 #include "base/threading/thread.h" | 17 #include "base/threading/thread.h" |
18 #include "mojo/system/channel.h" | 18 #include "mojo/system/channel.h" |
19 #include "mojo/system/local_message_pipe_endpoint.h" | 19 #include "mojo/system/local_message_pipe_endpoint.h" |
20 #include "mojo/system/message_pipe.h" | 20 #include "mojo/system/message_pipe.h" |
21 #include "mojo/system/platform_channel.h" | |
22 #include "mojo/system/platform_channel_pair.h" | 21 #include "mojo/system/platform_channel_pair.h" |
23 #include "mojo/system/proxy_message_pipe_endpoint.h" | 22 #include "mojo/system/proxy_message_pipe_endpoint.h" |
| 23 #include "mojo/system/scoped_platform_handle.h" |
24 #include "mojo/system/test_utils.h" | 24 #include "mojo/system/test_utils.h" |
25 #include "mojo/system/waiter.h" | 25 #include "mojo/system/waiter.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
27 | 27 |
28 namespace mojo { | 28 namespace mojo { |
29 namespace system { | 29 namespace system { |
30 namespace { | 30 namespace { |
31 | 31 |
32 class RemoteMessagePipeTest : public testing::Test { | 32 class RemoteMessagePipeTest : public testing::Test { |
33 public: | 33 public: |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 | 86 |
87 scoped_refptr<base::TaskRunner> io_thread_task_runner() { | 87 scoped_refptr<base::TaskRunner> io_thread_task_runner() { |
88 return io_thread_message_loop()->message_loop_proxy(); | 88 return io_thread_message_loop()->message_loop_proxy(); |
89 } | 89 } |
90 | 90 |
91 private: | 91 private: |
92 void SetUpOnIOThread() { | 92 void SetUpOnIOThread() { |
93 CHECK_EQ(base::MessageLoop::current(), io_thread_message_loop()); | 93 CHECK_EQ(base::MessageLoop::current(), io_thread_message_loop()); |
94 | 94 |
95 PlatformChannelPair channel_pair; | 95 PlatformChannelPair channel_pair; |
96 platform_channels_[0] = channel_pair.CreateServerChannel(); | 96 platform_handles_[0] = channel_pair.PassServerHandle(); |
97 CHECK(platform_channels_[0].get()); | 97 platform_handles_[1] = channel_pair.PassClientHandle(); |
98 CHECK(platform_channels_[0]->is_valid()); | |
99 platform_channels_[1] = channel_pair.CreateClientChannel(); | |
100 CHECK(platform_channels_[1].get()); | |
101 CHECK(platform_channels_[1]->is_valid()); | |
102 } | 98 } |
103 | 99 |
104 void CreateAndInitChannel(unsigned channel_index) { | 100 void CreateAndInitChannel(unsigned channel_index) { |
105 CHECK_EQ(base::MessageLoop::current(), io_thread_message_loop()); | 101 CHECK_EQ(base::MessageLoop::current(), io_thread_message_loop()); |
106 CHECK(channel_index == 0 || channel_index == 1); | 102 CHECK(channel_index == 0 || channel_index == 1); |
107 CHECK(!channels_[channel_index].get()); | 103 CHECK(!channels_[channel_index].get()); |
108 | 104 |
109 channels_[channel_index] = new Channel(); | 105 channels_[channel_index] = new Channel(); |
110 CHECK(channels_[channel_index]->Init( | 106 CHECK(channels_[channel_index]->Init( |
111 platform_channels_[channel_index]->PassHandle())); | 107 platform_handles_[channel_index].Pass())); |
112 } | 108 } |
113 | 109 |
114 void ConnectMessagePipesOnIOThread(scoped_refptr<MessagePipe> mp_0, | 110 void ConnectMessagePipesOnIOThread(scoped_refptr<MessagePipe> mp_0, |
115 scoped_refptr<MessagePipe> mp_1) { | 111 scoped_refptr<MessagePipe> mp_1) { |
116 CHECK_EQ(base::MessageLoop::current(), io_thread_message_loop()); | 112 CHECK_EQ(base::MessageLoop::current(), io_thread_message_loop()); |
117 | 113 |
118 if (!channels_[0].get()) | 114 if (!channels_[0].get()) |
119 CreateAndInitChannel(0); | 115 CreateAndInitChannel(0); |
120 if (!channels_[1].get()) | 116 if (!channels_[1].get()) |
121 CreateAndInitChannel(1); | 117 CreateAndInitChannel(1); |
(...skipping 27 matching lines...) Expand all Loading... |
149 channels_[0]->Shutdown(); | 145 channels_[0]->Shutdown(); |
150 channels_[0] = NULL; | 146 channels_[0] = NULL; |
151 } | 147 } |
152 if (channels_[1].get()) { | 148 if (channels_[1].get()) { |
153 channels_[1]->Shutdown(); | 149 channels_[1]->Shutdown(); |
154 channels_[1] = NULL; | 150 channels_[1] = NULL; |
155 } | 151 } |
156 } | 152 } |
157 | 153 |
158 base::Thread io_thread_; | 154 base::Thread io_thread_; |
159 scoped_ptr<PlatformChannel> platform_channels_[2]; | 155 ScopedPlatformHandle platform_handles_[2]; |
160 scoped_refptr<Channel> channels_[2]; | 156 scoped_refptr<Channel> channels_[2]; |
161 | 157 |
162 DISALLOW_COPY_AND_ASSIGN(RemoteMessagePipeTest); | 158 DISALLOW_COPY_AND_ASSIGN(RemoteMessagePipeTest); |
163 }; | 159 }; |
164 | 160 |
165 TEST_F(RemoteMessagePipeTest, Basic) { | 161 TEST_F(RemoteMessagePipeTest, Basic) { |
166 const char hello[] = "hello"; | 162 const char hello[] = "hello"; |
167 const char world[] = "world!!!1!!!1!"; | 163 const char world[] = "world!!!1!!!1!"; |
168 char buffer[100] = { 0 }; | 164 char buffer[100] = { 0 }; |
169 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 165 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 MOJO_READ_MESSAGE_FLAG_NONE)); | 417 MOJO_READ_MESSAGE_FLAG_NONE)); |
422 EXPECT_EQ(sizeof(hello), static_cast<size_t>(buffer_size)); | 418 EXPECT_EQ(sizeof(hello), static_cast<size_t>(buffer_size)); |
423 EXPECT_EQ(0, strcmp(buffer, hello)); | 419 EXPECT_EQ(0, strcmp(buffer, hello)); |
424 | 420 |
425 // And MP 1, port 1. | 421 // And MP 1, port 1. |
426 mp_1->Close(1); | 422 mp_1->Close(1); |
427 } | 423 } |
428 } // namespace | 424 } // namespace |
429 } // namespace system | 425 } // namespace system |
430 } // namespace mojo | 426 } // namespace mojo |
OLD | NEW |