Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: mojo/edk/system/remote_data_pipe_impl_unittest.cc

Issue 1396783004: Convert mojo::system::ChannelEndpointClient to use our new refcounting stuff (instead of base's). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « mojo/edk/system/ref_counted.h ('k') | mojo/edk/system/remote_message_pipe_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // This file tests both |RemoteProducerDataPipeImpl| and 5 // This file tests both |RemoteProducerDataPipeImpl| and
6 // |RemoteConsumerDataPipeImpl|. 6 // |RemoteConsumerDataPipeImpl|.
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 57
58 void TearDown() override { 58 void TearDown() override {
59 EnsureMessagePipeClosed(0); 59 EnsureMessagePipeClosed(0);
60 EnsureMessagePipeClosed(1); 60 EnsureMessagePipeClosed(1);
61 io_thread_.PostTaskAndWait( 61 io_thread_.PostTaskAndWait(
62 FROM_HERE, base::Bind(&RemoteDataPipeImplTest::TearDownOnIOThread, 62 FROM_HERE, base::Bind(&RemoteDataPipeImplTest::TearDownOnIOThread,
63 base::Unretained(this))); 63 base::Unretained(this)));
64 } 64 }
65 65
66 protected: 66 protected:
67 static DataPipe* CreateLocal(size_t element_size, size_t num_elements) { 67 static RefPtr<DataPipe> CreateLocal(size_t element_size,
68 size_t num_elements) {
68 const MojoCreateDataPipeOptions options = { 69 const MojoCreateDataPipeOptions options = {
69 static_cast<uint32_t>(sizeof(MojoCreateDataPipeOptions)), 70 static_cast<uint32_t>(sizeof(MojoCreateDataPipeOptions)),
70 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, 71 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE,
71 static_cast<uint32_t>(element_size), 72 static_cast<uint32_t>(element_size),
72 static_cast<uint32_t>(num_elements * element_size)}; 73 static_cast<uint32_t>(num_elements * element_size)};
73 MojoCreateDataPipeOptions validated_options = {}; 74 MojoCreateDataPipeOptions validated_options = {};
74 CHECK_EQ(DataPipe::ValidateCreateOptions(MakeUserPointer(&options), 75 CHECK_EQ(DataPipe::ValidateCreateOptions(MakeUserPointer(&options),
75 &validated_options), 76 &validated_options),
76 MOJO_RESULT_OK); 77 MOJO_RESULT_OK);
77 return DataPipe::CreateLocal(validated_options); 78 return DataPipe::CreateLocal(validated_options);
78 } 79 }
79 80
80 scoped_refptr<MessagePipe> message_pipe(size_t i) { 81 RefPtr<MessagePipe> message_pipe(size_t i) { return message_pipes_[i]; }
81 return message_pipes_[i];
82 }
83 82
84 void EnsureMessagePipeClosed(size_t i) { 83 void EnsureMessagePipeClosed(size_t i) {
85 if (!message_pipes_[i]) 84 if (!message_pipes_[i])
86 return; 85 return;
87 message_pipes_[i]->Close(0); 86 message_pipes_[i]->Close(0);
88 message_pipes_[i] = nullptr; 87 message_pipes_[i] = nullptr;
89 } 88 }
90 89
91 private: 90 private:
92 // TODO(vtl): The arguments should be rvalue references, but that doesn't 91 // TODO(vtl): The arguments should be rvalue references, but that doesn't
(...skipping 20 matching lines...) Expand all
113 } 112 }
114 if (channels_[1]) { 113 if (channels_[1]) {
115 channels_[1]->Shutdown(); 114 channels_[1]->Shutdown();
116 channels_[1] = nullptr; 115 channels_[1] = nullptr;
117 } 116 }
118 } 117 }
119 118
120 embedder::SimplePlatformSupport platform_support_; 119 embedder::SimplePlatformSupport platform_support_;
121 mojo::test::TestIOThread io_thread_; 120 mojo::test::TestIOThread io_thread_;
122 RefPtr<Channel> channels_[2]; 121 RefPtr<Channel> channels_[2];
123 scoped_refptr<MessagePipe> message_pipes_[2]; 122 RefPtr<MessagePipe> message_pipes_[2];
124 123
125 MOJO_DISALLOW_COPY_AND_ASSIGN(RemoteDataPipeImplTest); 124 MOJO_DISALLOW_COPY_AND_ASSIGN(RemoteDataPipeImplTest);
126 }; 125 };
127 126
128 // These tests are heavier-weight than ideal. They test remote data pipes by 127 // These tests are heavier-weight than ideal. They test remote data pipes by
129 // passing data pipe (producer/consumer) dispatchers over remote message pipes. 128 // passing data pipe (producer/consumer) dispatchers over remote message pipes.
130 // Make sure that the test fixture works properly (i.e., that the message pipe 129 // Make sure that the test fixture works properly (i.e., that the message pipe
131 // works properly, and that things are shut down correctly). 130 // works properly, and that things are shut down correctly).
132 // TODO(vtl): Make lighter-weight tests. Ideally, we'd have tests for remote 131 // TODO(vtl): Make lighter-weight tests. Ideally, we'd have tests for remote
133 // data pipes which don't involve message pipes (or even data pipe dispatchers). 132 // data pipes which don't involve message pipes (or even data pipe dispatchers).
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 165
167 TEST_F(RemoteDataPipeImplTest, SendConsumerWithClosedProducer) { 166 TEST_F(RemoteDataPipeImplTest, SendConsumerWithClosedProducer) {
168 char read_buffer[100] = {}; 167 char read_buffer[100] = {};
169 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 168 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
170 DispatcherVector read_dispatchers; 169 DispatcherVector read_dispatchers;
171 uint32_t read_num_dispatchers = 10; // Maximum to get. 170 uint32_t read_num_dispatchers = 10; // Maximum to get.
172 Waiter waiter; 171 Waiter waiter;
173 HandleSignalsState hss; 172 HandleSignalsState hss;
174 uint32_t context = 0; 173 uint32_t context = 0;
175 174
176 scoped_refptr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000)); 175 RefPtr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000));
177 // This is the consumer dispatcher we'll send. 176 // This is the consumer dispatcher we'll send.
178 scoped_refptr<DataPipeConsumerDispatcher> consumer = 177 scoped_refptr<DataPipeConsumerDispatcher> consumer =
179 DataPipeConsumerDispatcher::Create(); 178 DataPipeConsumerDispatcher::Create();
180 consumer->Init(dp); 179 consumer->Init(dp.Clone());
181 180
182 // Write to the producer and close it, before sending the consumer. 181 // Write to the producer and close it, before sending the consumer.
183 int32_t elements[10] = {123}; 182 int32_t elements[10] = {123};
184 uint32_t num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0])); 183 uint32_t num_bytes = static_cast<uint32_t>(1u * sizeof(elements[0]));
185 EXPECT_EQ(MOJO_RESULT_OK, 184 EXPECT_EQ(MOJO_RESULT_OK,
186 dp->ProducerWriteData(UserPointer<const void>(elements), 185 dp->ProducerWriteData(UserPointer<const void>(elements),
187 MakeUserPointer(&num_bytes), false)); 186 MakeUserPointer(&num_bytes), false));
188 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes); 187 EXPECT_EQ(1u * sizeof(elements[0]), num_bytes);
189 dp->ProducerClose(); 188 dp->ProducerClose();
190 189
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 283
285 TEST_F(RemoteDataPipeImplTest, SendConsumerDuringTwoPhaseWrite) { 284 TEST_F(RemoteDataPipeImplTest, SendConsumerDuringTwoPhaseWrite) {
286 char read_buffer[100] = {}; 285 char read_buffer[100] = {};
287 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 286 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
288 DispatcherVector read_dispatchers; 287 DispatcherVector read_dispatchers;
289 uint32_t read_num_dispatchers = 10; // Maximum to get. 288 uint32_t read_num_dispatchers = 10; // Maximum to get.
290 Waiter waiter; 289 Waiter waiter;
291 HandleSignalsState hss; 290 HandleSignalsState hss;
292 uint32_t context = 0; 291 uint32_t context = 0;
293 292
294 scoped_refptr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000)); 293 RefPtr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000));
295 // This is the consumer dispatcher we'll send. 294 // This is the consumer dispatcher we'll send.
296 scoped_refptr<DataPipeConsumerDispatcher> consumer = 295 scoped_refptr<DataPipeConsumerDispatcher> consumer =
297 DataPipeConsumerDispatcher::Create(); 296 DataPipeConsumerDispatcher::Create();
298 consumer->Init(dp); 297 consumer->Init(dp.Clone());
299 298
300 void* write_ptr = nullptr; 299 void* write_ptr = nullptr;
301 uint32_t num_bytes = 0u; 300 uint32_t num_bytes = 0u;
302 EXPECT_EQ(MOJO_RESULT_OK, 301 EXPECT_EQ(MOJO_RESULT_OK,
303 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr), 302 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
304 MakeUserPointer(&num_bytes))); 303 MakeUserPointer(&num_bytes)));
305 ASSERT_GE(num_bytes, 1u * sizeof(int32_t)); 304 ASSERT_GE(num_bytes, 1u * sizeof(int32_t));
306 305
307 // Write the consumer to MP 0 (port 0). Wait and receive on MP 1 (port 0). 306 // Write the consumer to MP 0 (port 0). Wait and receive on MP 1 (port 0).
308 // (Add the waiter first, to avoid any handling the case where it's already 307 // (Add the waiter first, to avoid any handling the case where it's already
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 // properly preserved). 393 // properly preserved).
395 TEST_F(RemoteDataPipeImplTest, SendConsumerDuringSecondTwoPhaseWrite) { 394 TEST_F(RemoteDataPipeImplTest, SendConsumerDuringSecondTwoPhaseWrite) {
396 char read_buffer[100] = {}; 395 char read_buffer[100] = {};
397 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer)); 396 uint32_t read_buffer_size = static_cast<uint32_t>(sizeof(read_buffer));
398 DispatcherVector read_dispatchers; 397 DispatcherVector read_dispatchers;
399 uint32_t read_num_dispatchers = 10; // Maximum to get. 398 uint32_t read_num_dispatchers = 10; // Maximum to get.
400 Waiter waiter; 399 Waiter waiter;
401 HandleSignalsState hss; 400 HandleSignalsState hss;
402 uint32_t context = 0; 401 uint32_t context = 0;
403 402
404 scoped_refptr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000)); 403 RefPtr<DataPipe> dp(CreateLocal(sizeof(int32_t), 1000));
405 // This is the consumer dispatcher we'll send. 404 // This is the consumer dispatcher we'll send.
406 scoped_refptr<DataPipeConsumerDispatcher> consumer = 405 scoped_refptr<DataPipeConsumerDispatcher> consumer =
407 DataPipeConsumerDispatcher::Create(); 406 DataPipeConsumerDispatcher::Create();
408 consumer->Init(dp); 407 consumer->Init(dp.Clone());
409 408
410 void* write_ptr = nullptr; 409 void* write_ptr = nullptr;
411 uint32_t num_bytes = 0u; 410 uint32_t num_bytes = 0u;
412 EXPECT_EQ(MOJO_RESULT_OK, 411 EXPECT_EQ(MOJO_RESULT_OK,
413 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr), 412 dp->ProducerBeginWriteData(MakeUserPointer(&write_ptr),
414 MakeUserPointer(&num_bytes))); 413 MakeUserPointer(&num_bytes)));
415 ASSERT_GE(num_bytes, 1u * sizeof(int32_t)); 414 ASSERT_GE(num_bytes, 1u * sizeof(int32_t));
416 *static_cast<int32_t*>(write_ptr) = 123456; 415 *static_cast<int32_t*>(write_ptr) = 123456;
417 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData( 416 EXPECT_EQ(MOJO_RESULT_OK, dp->ProducerEndWriteData(
418 static_cast<uint32_t>(1u * sizeof(int32_t)))); 417 static_cast<uint32_t>(1u * sizeof(int32_t))));
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 EXPECT_EQ(123456, elements[0]); 506 EXPECT_EQ(123456, elements[0]);
508 EXPECT_EQ(789012, elements[1]); 507 EXPECT_EQ(789012, elements[1]);
509 EXPECT_EQ(0, elements[2]); 508 EXPECT_EQ(0, elements[2]);
510 509
511 consumer->Close(); 510 consumer->Close();
512 } 511 }
513 512
514 } // namespace 513 } // namespace
515 } // namespace system 514 } // namespace system
516 } // namespace mojo 515 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/ref_counted.h ('k') | mojo/edk/system/remote_message_pipe_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698