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

Side by Side Diff: ipc/ipc_channel_posix_unittest.cc

Issue 307653003: Introduce IPC::Channel::Create*() to ensure it being heap-allocated. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing windows build, landing again. Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « ipc/ipc_channel_common.cc ('k') | ipc/ipc_channel_proxy.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // These tests are POSIX only. 5 // These tests are POSIX only.
6 6
7 #include "ipc/ipc_channel_posix.h" 7 #include "ipc/ipc_channel_posix.h"
8 8
9 #include <fcntl.h> 9 #include <fcntl.h>
10 #include <sys/socket.h> 10 #include <sys/socket.h>
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 } 197 }
198 198
199 TEST_F(IPCChannelPosixTest, BasicListen) { 199 TEST_F(IPCChannelPosixTest, BasicListen) {
200 const std::string kChannelName = 200 const std::string kChannelName =
201 GetChannelDirName() + "/IPCChannelPosixTest_BasicListen"; 201 GetChannelDirName() + "/IPCChannelPosixTest_BasicListen";
202 202
203 // Test creating a socket that is listening. 203 // Test creating a socket that is listening.
204 IPC::ChannelHandle handle(kChannelName); 204 IPC::ChannelHandle handle(kChannelName);
205 SetUpSocket(&handle, IPC::Channel::MODE_NAMED_SERVER); 205 SetUpSocket(&handle, IPC::Channel::MODE_NAMED_SERVER);
206 unlink(handle.name.c_str()); 206 unlink(handle.name.c_str());
207 IPC::Channel channel(handle, IPC::Channel::MODE_NAMED_SERVER, NULL); 207 scoped_ptr<IPC::Channel> channel(
208 ASSERT_TRUE(channel.Connect()); 208 IPC::Channel::CreateNamedServer(handle, NULL));
209 ASSERT_TRUE(channel.AcceptsConnections()); 209 ASSERT_TRUE(channel->Connect());
210 ASSERT_FALSE(channel.HasAcceptedConnection()); 210 ASSERT_TRUE(channel->AcceptsConnections());
211 channel.ResetToAcceptingConnectionState(); 211 ASSERT_FALSE(channel->HasAcceptedConnection());
212 ASSERT_FALSE(channel.HasAcceptedConnection()); 212 channel->ResetToAcceptingConnectionState();
213 ASSERT_FALSE(channel->HasAcceptedConnection());
213 } 214 }
214 215
215 TEST_F(IPCChannelPosixTest, BasicConnected) { 216 TEST_F(IPCChannelPosixTest, BasicConnected) {
216 // Test creating a socket that is connected. 217 // Test creating a socket that is connected.
217 int pipe_fds[2]; 218 int pipe_fds[2];
218 ASSERT_EQ(0, socketpair(AF_UNIX, SOCK_STREAM, 0, pipe_fds)); 219 ASSERT_EQ(0, socketpair(AF_UNIX, SOCK_STREAM, 0, pipe_fds));
219 std::string socket_name("/var/tmp/IPCChannelPosixTest_BasicConnected"); 220 std::string socket_name("/var/tmp/IPCChannelPosixTest_BasicConnected");
220 ASSERT_GE(fcntl(pipe_fds[0], F_SETFL, O_NONBLOCK), 0); 221 ASSERT_GE(fcntl(pipe_fds[0], F_SETFL, O_NONBLOCK), 0);
221 222
222 base::FileDescriptor fd(pipe_fds[0], false); 223 base::FileDescriptor fd(pipe_fds[0], false);
223 IPC::ChannelHandle handle(socket_name, fd); 224 IPC::ChannelHandle handle(socket_name, fd);
224 IPC::Channel channel(handle, IPC::Channel::MODE_SERVER, NULL); 225 scoped_ptr<IPC::Channel> channel(IPC::Channel::CreateServer(handle, NULL));
225 ASSERT_TRUE(channel.Connect()); 226 ASSERT_TRUE(channel->Connect());
226 ASSERT_FALSE(channel.AcceptsConnections()); 227 ASSERT_FALSE(channel->AcceptsConnections());
227 channel.Close(); 228 channel->Close();
228 ASSERT_TRUE(IGNORE_EINTR(close(pipe_fds[1])) == 0); 229 ASSERT_TRUE(IGNORE_EINTR(close(pipe_fds[1])) == 0);
229 230
230 // Make sure that we can use the socket that is created for us by 231 // Make sure that we can use the socket that is created for us by
231 // a standard channel. 232 // a standard channel.
232 IPC::Channel channel2(socket_name, IPC::Channel::MODE_SERVER, NULL); 233 scoped_ptr<IPC::Channel> channel2(
233 ASSERT_TRUE(channel2.Connect()); 234 IPC::Channel::CreateServer(socket_name, NULL));
234 ASSERT_FALSE(channel2.AcceptsConnections()); 235 ASSERT_TRUE(channel2->Connect());
236 ASSERT_FALSE(channel2->AcceptsConnections());
235 } 237 }
236 238
237 // If a connection closes right before a Send() call, we may end up closing 239 // If a connection closes right before a Send() call, we may end up closing
238 // the connection without notifying the listener, which can cause hangs in 240 // the connection without notifying the listener, which can cause hangs in
239 // sync_message_filter and others. Make sure the listener is notified. 241 // sync_message_filter and others. Make sure the listener is notified.
240 TEST_F(IPCChannelPosixTest, SendHangTest) { 242 TEST_F(IPCChannelPosixTest, SendHangTest) {
241 IPCChannelPosixTestListener out_listener(true); 243 IPCChannelPosixTestListener out_listener(true);
242 IPCChannelPosixTestListener in_listener(true); 244 IPCChannelPosixTestListener in_listener(true);
243 IPC::ChannelHandle in_handle("IN"); 245 IPC::ChannelHandle in_handle("IN");
244 IPC::Channel in_chan(in_handle, IPC::Channel::MODE_SERVER, &in_listener); 246 scoped_ptr<IPC::Channel> in_chan(
245 base::FileDescriptor out_fd(in_chan.TakeClientFileDescriptor(), false); 247 IPC::Channel::CreateServer(in_handle, &in_listener));
248 base::FileDescriptor out_fd(in_chan->TakeClientFileDescriptor(), false);
246 IPC::ChannelHandle out_handle("OUT", out_fd); 249 IPC::ChannelHandle out_handle("OUT", out_fd);
247 IPC::Channel out_chan(out_handle, IPC::Channel::MODE_CLIENT, &out_listener); 250 scoped_ptr<IPC::Channel> out_chan(
248 ASSERT_TRUE(in_chan.Connect()); 251 IPC::Channel::CreateClient(out_handle, &out_listener));
249 ASSERT_TRUE(out_chan.Connect()); 252 ASSERT_TRUE(in_chan->Connect());
250 in_chan.Close(); // simulate remote process dying at an unfortunate time. 253 ASSERT_TRUE(out_chan->Connect());
254 in_chan->Close(); // simulate remote process dying at an unfortunate time.
251 // Send will fail, because it cannot write the message. 255 // Send will fail, because it cannot write the message.
252 ASSERT_FALSE(out_chan.Send(new IPC::Message( 256 ASSERT_FALSE(out_chan->Send(new IPC::Message(
253 0, // routing_id 257 0, // routing_id
254 kQuitMessage, // message type 258 kQuitMessage, // message type
255 IPC::Message::PRIORITY_NORMAL))); 259 IPC::Message::PRIORITY_NORMAL)));
256 SpinRunLoop(TestTimeouts::action_max_timeout()); 260 SpinRunLoop(TestTimeouts::action_max_timeout());
257 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, out_listener.status()); 261 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, out_listener.status());
258 } 262 }
259 263
260 // If a connection closes right before a Connect() call, we may end up closing 264 // If a connection closes right before a Connect() call, we may end up closing
261 // the connection without notifying the listener, which can cause hangs in 265 // the connection without notifying the listener, which can cause hangs in
262 // sync_message_filter and others. Make sure the listener is notified. 266 // sync_message_filter and others. Make sure the listener is notified.
263 TEST_F(IPCChannelPosixTest, AcceptHangTest) { 267 TEST_F(IPCChannelPosixTest, AcceptHangTest) {
264 IPCChannelPosixTestListener out_listener(true); 268 IPCChannelPosixTestListener out_listener(true);
265 IPCChannelPosixTestListener in_listener(true); 269 IPCChannelPosixTestListener in_listener(true);
266 IPC::ChannelHandle in_handle("IN"); 270 IPC::ChannelHandle in_handle("IN");
267 IPC::Channel in_chan(in_handle, IPC::Channel::MODE_SERVER, &in_listener); 271 scoped_ptr<IPC::Channel> in_chan(
268 base::FileDescriptor out_fd(in_chan.TakeClientFileDescriptor(), false); 272 IPC::Channel::CreateServer(in_handle, &in_listener));
273 base::FileDescriptor out_fd(in_chan->TakeClientFileDescriptor(), false);
269 IPC::ChannelHandle out_handle("OUT", out_fd); 274 IPC::ChannelHandle out_handle("OUT", out_fd);
270 IPC::Channel out_chan(out_handle, IPC::Channel::MODE_CLIENT, &out_listener); 275 scoped_ptr<IPC::Channel> out_chan(
271 ASSERT_TRUE(in_chan.Connect()); 276 IPC::Channel::CreateClient(out_handle, &out_listener));
272 in_chan.Close(); // simulate remote process dying at an unfortunate time. 277 ASSERT_TRUE(in_chan->Connect());
273 ASSERT_FALSE(out_chan.Connect()); 278 in_chan->Close(); // simulate remote process dying at an unfortunate time.
279 ASSERT_FALSE(out_chan->Connect());
274 SpinRunLoop(TestTimeouts::action_max_timeout()); 280 SpinRunLoop(TestTimeouts::action_max_timeout());
275 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, out_listener.status()); 281 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, out_listener.status());
276 } 282 }
277 283
278 TEST_F(IPCChannelPosixTest, AdvancedConnected) { 284 TEST_F(IPCChannelPosixTest, AdvancedConnected) {
279 // Test creating a connection to an external process. 285 // Test creating a connection to an external process.
280 IPCChannelPosixTestListener listener(false); 286 IPCChannelPosixTestListener listener(false);
281 IPC::ChannelHandle chan_handle(GetConnectionSocketName()); 287 IPC::ChannelHandle chan_handle(GetConnectionSocketName());
282 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER); 288 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER);
283 IPC::Channel channel(chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener); 289 scoped_ptr<IPC::Channel> channel(
284 ASSERT_TRUE(channel.Connect()); 290 IPC::Channel::CreateNamedServer(chan_handle, &listener));
285 ASSERT_TRUE(channel.AcceptsConnections()); 291 ASSERT_TRUE(channel->Connect());
286 ASSERT_FALSE(channel.HasAcceptedConnection()); 292 ASSERT_TRUE(channel->AcceptsConnections());
293 ASSERT_FALSE(channel->HasAcceptedConnection());
287 294
288 base::ProcessHandle handle = SpawnChild("IPCChannelPosixTestConnectionProc"); 295 base::ProcessHandle handle = SpawnChild("IPCChannelPosixTestConnectionProc");
289 ASSERT_TRUE(handle); 296 ASSERT_TRUE(handle);
290 SpinRunLoop(TestTimeouts::action_max_timeout()); 297 SpinRunLoop(TestTimeouts::action_max_timeout());
291 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status()); 298 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status());
292 ASSERT_TRUE(channel.HasAcceptedConnection()); 299 ASSERT_TRUE(channel->HasAcceptedConnection());
293 IPC::Message* message = new IPC::Message(0, // routing_id 300 IPC::Message* message = new IPC::Message(0, // routing_id
294 kQuitMessage, // message type 301 kQuitMessage, // message type
295 IPC::Message::PRIORITY_NORMAL); 302 IPC::Message::PRIORITY_NORMAL);
296 channel.Send(message); 303 channel->Send(message);
297 SpinRunLoop(TestTimeouts::action_timeout()); 304 SpinRunLoop(TestTimeouts::action_timeout());
298 int exit_code = 0; 305 int exit_code = 0;
299 EXPECT_TRUE(base::WaitForExitCode(handle, &exit_code)); 306 EXPECT_TRUE(base::WaitForExitCode(handle, &exit_code));
300 EXPECT_EQ(0, exit_code); 307 EXPECT_EQ(0, exit_code);
301 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status()); 308 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status());
302 ASSERT_FALSE(channel.HasAcceptedConnection()); 309 ASSERT_FALSE(channel->HasAcceptedConnection());
303 } 310 }
304 311
305 TEST_F(IPCChannelPosixTest, ResetState) { 312 TEST_F(IPCChannelPosixTest, ResetState) {
306 // Test creating a connection to an external process. Close the connection, 313 // Test creating a connection to an external process. Close the connection,
307 // but continue to listen and make sure another external process can connect 314 // but continue to listen and make sure another external process can connect
308 // to us. 315 // to us.
309 IPCChannelPosixTestListener listener(false); 316 IPCChannelPosixTestListener listener(false);
310 IPC::ChannelHandle chan_handle(GetConnectionSocketName()); 317 IPC::ChannelHandle chan_handle(GetConnectionSocketName());
311 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER); 318 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER);
312 IPC::Channel channel(chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener); 319 scoped_ptr<IPC::Channel> channel(
313 ASSERT_TRUE(channel.Connect()); 320 IPC::Channel::CreateNamedServer(chan_handle, &listener));
314 ASSERT_TRUE(channel.AcceptsConnections()); 321 ASSERT_TRUE(channel->Connect());
315 ASSERT_FALSE(channel.HasAcceptedConnection()); 322 ASSERT_TRUE(channel->AcceptsConnections());
323 ASSERT_FALSE(channel->HasAcceptedConnection());
316 324
317 base::ProcessHandle handle = SpawnChild("IPCChannelPosixTestConnectionProc"); 325 base::ProcessHandle handle = SpawnChild("IPCChannelPosixTestConnectionProc");
318 ASSERT_TRUE(handle); 326 ASSERT_TRUE(handle);
319 SpinRunLoop(TestTimeouts::action_max_timeout()); 327 SpinRunLoop(TestTimeouts::action_max_timeout());
320 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status()); 328 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status());
321 ASSERT_TRUE(channel.HasAcceptedConnection()); 329 ASSERT_TRUE(channel->HasAcceptedConnection());
322 channel.ResetToAcceptingConnectionState(); 330 channel->ResetToAcceptingConnectionState();
323 ASSERT_FALSE(channel.HasAcceptedConnection()); 331 ASSERT_FALSE(channel->HasAcceptedConnection());
324 332
325 base::ProcessHandle handle2 = SpawnChild("IPCChannelPosixTestConnectionProc"); 333 base::ProcessHandle handle2 = SpawnChild("IPCChannelPosixTestConnectionProc");
326 ASSERT_TRUE(handle2); 334 ASSERT_TRUE(handle2);
327 SpinRunLoop(TestTimeouts::action_max_timeout()); 335 SpinRunLoop(TestTimeouts::action_max_timeout());
328 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status()); 336 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status());
329 ASSERT_TRUE(channel.HasAcceptedConnection()); 337 ASSERT_TRUE(channel->HasAcceptedConnection());
330 IPC::Message* message = new IPC::Message(0, // routing_id 338 IPC::Message* message = new IPC::Message(0, // routing_id
331 kQuitMessage, // message type 339 kQuitMessage, // message type
332 IPC::Message::PRIORITY_NORMAL); 340 IPC::Message::PRIORITY_NORMAL);
333 channel.Send(message); 341 channel->Send(message);
334 SpinRunLoop(TestTimeouts::action_timeout()); 342 SpinRunLoop(TestTimeouts::action_timeout());
335 EXPECT_TRUE(base::KillProcess(handle, 0, false)); 343 EXPECT_TRUE(base::KillProcess(handle, 0, false));
336 int exit_code = 0; 344 int exit_code = 0;
337 EXPECT_TRUE(base::WaitForExitCode(handle2, &exit_code)); 345 EXPECT_TRUE(base::WaitForExitCode(handle2, &exit_code));
338 EXPECT_EQ(0, exit_code); 346 EXPECT_EQ(0, exit_code);
339 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status()); 347 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status());
340 ASSERT_FALSE(channel.HasAcceptedConnection()); 348 ASSERT_FALSE(channel->HasAcceptedConnection());
341 } 349 }
342 350
343 TEST_F(IPCChannelPosixTest, BadChannelName) { 351 TEST_F(IPCChannelPosixTest, BadChannelName) {
344 // Test empty name 352 // Test empty name
345 IPC::ChannelHandle handle(""); 353 IPC::ChannelHandle handle("");
346 IPC::Channel channel(handle, IPC::Channel::MODE_NAMED_SERVER, NULL); 354 scoped_ptr<IPC::Channel> channel(
347 ASSERT_FALSE(channel.Connect()); 355 IPC::Channel::CreateNamedServer(handle, NULL));
356 ASSERT_FALSE(channel->Connect());
348 357
349 // Test name that is too long. 358 // Test name that is too long.
350 const char *kTooLongName = "This_is_a_very_long_name_to_proactively_implement" 359 const char *kTooLongName = "This_is_a_very_long_name_to_proactively_implement"
351 "client-centered_synergy_through_top-line" 360 "client-centered_synergy_through_top-line"
352 "platforms_Phosfluorescently_disintermediate_" 361 "platforms_Phosfluorescently_disintermediate_"
353 "clicks-and-mortar_best_practices_without_" 362 "clicks-and-mortar_best_practices_without_"
354 "future-proof_growth_strategies_Continually" 363 "future-proof_growth_strategies_Continually"
355 "pontificate_proactive_potentialities_before" 364 "pontificate_proactive_potentialities_before"
356 "leading-edge_processes"; 365 "leading-edge_processes";
357 EXPECT_GE(strlen(kTooLongName), IPC::kMaxSocketNameLength); 366 EXPECT_GE(strlen(kTooLongName), IPC::kMaxSocketNameLength);
358 IPC::ChannelHandle handle2(kTooLongName); 367 IPC::ChannelHandle handle2(kTooLongName);
359 IPC::Channel channel2(handle2, IPC::Channel::MODE_NAMED_SERVER, NULL); 368 scoped_ptr<IPC::Channel> channel2(
360 EXPECT_FALSE(channel2.Connect()); 369 IPC::Channel::CreateNamedServer(handle2, NULL));
370 EXPECT_FALSE(channel2->Connect());
361 } 371 }
362 372
363 TEST_F(IPCChannelPosixTest, MultiConnection) { 373 TEST_F(IPCChannelPosixTest, MultiConnection) {
364 // Test setting up a connection to an external process, and then have 374 // Test setting up a connection to an external process, and then have
365 // another external process attempt to connect to us. 375 // another external process attempt to connect to us.
366 IPCChannelPosixTestListener listener(false); 376 IPCChannelPosixTestListener listener(false);
367 IPC::ChannelHandle chan_handle(GetConnectionSocketName()); 377 IPC::ChannelHandle chan_handle(GetConnectionSocketName());
368 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER); 378 SetUpSocket(&chan_handle, IPC::Channel::MODE_NAMED_SERVER);
369 IPC::Channel channel(chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener); 379 scoped_ptr<IPC::Channel> channel(
370 ASSERT_TRUE(channel.Connect()); 380 IPC::Channel::CreateNamedServer(chan_handle, &listener));
371 ASSERT_TRUE(channel.AcceptsConnections()); 381 ASSERT_TRUE(channel->Connect());
372 ASSERT_FALSE(channel.HasAcceptedConnection()); 382 ASSERT_TRUE(channel->AcceptsConnections());
383 ASSERT_FALSE(channel->HasAcceptedConnection());
373 384
374 base::ProcessHandle handle = SpawnChild("IPCChannelPosixTestConnectionProc"); 385 base::ProcessHandle handle = SpawnChild("IPCChannelPosixTestConnectionProc");
375 ASSERT_TRUE(handle); 386 ASSERT_TRUE(handle);
376 SpinRunLoop(TestTimeouts::action_max_timeout()); 387 SpinRunLoop(TestTimeouts::action_max_timeout());
377 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status()); 388 ASSERT_EQ(IPCChannelPosixTestListener::CONNECTED, listener.status());
378 ASSERT_TRUE(channel.HasAcceptedConnection()); 389 ASSERT_TRUE(channel->HasAcceptedConnection());
379 base::ProcessHandle handle2 = SpawnChild("IPCChannelPosixFailConnectionProc"); 390 base::ProcessHandle handle2 = SpawnChild("IPCChannelPosixFailConnectionProc");
380 ASSERT_TRUE(handle2); 391 ASSERT_TRUE(handle2);
381 SpinRunLoop(TestTimeouts::action_max_timeout()); 392 SpinRunLoop(TestTimeouts::action_max_timeout());
382 int exit_code = 0; 393 int exit_code = 0;
383 EXPECT_TRUE(base::WaitForExitCode(handle2, &exit_code)); 394 EXPECT_TRUE(base::WaitForExitCode(handle2, &exit_code));
384 EXPECT_EQ(exit_code, 0); 395 EXPECT_EQ(exit_code, 0);
385 ASSERT_EQ(IPCChannelPosixTestListener::DENIED, listener.status()); 396 ASSERT_EQ(IPCChannelPosixTestListener::DENIED, listener.status());
386 ASSERT_TRUE(channel.HasAcceptedConnection()); 397 ASSERT_TRUE(channel->HasAcceptedConnection());
387 IPC::Message* message = new IPC::Message(0, // routing_id 398 IPC::Message* message = new IPC::Message(0, // routing_id
388 kQuitMessage, // message type 399 kQuitMessage, // message type
389 IPC::Message::PRIORITY_NORMAL); 400 IPC::Message::PRIORITY_NORMAL);
390 channel.Send(message); 401 channel->Send(message);
391 SpinRunLoop(TestTimeouts::action_timeout()); 402 SpinRunLoop(TestTimeouts::action_timeout());
392 EXPECT_TRUE(base::WaitForExitCode(handle, &exit_code)); 403 EXPECT_TRUE(base::WaitForExitCode(handle, &exit_code));
393 EXPECT_EQ(exit_code, 0); 404 EXPECT_EQ(exit_code, 0);
394 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status()); 405 ASSERT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status());
395 ASSERT_FALSE(channel.HasAcceptedConnection()); 406 ASSERT_FALSE(channel->HasAcceptedConnection());
396 } 407 }
397 408
398 TEST_F(IPCChannelPosixTest, DoubleServer) { 409 TEST_F(IPCChannelPosixTest, DoubleServer) {
399 // Test setting up two servers with the same name. 410 // Test setting up two servers with the same name.
400 IPCChannelPosixTestListener listener(false); 411 IPCChannelPosixTestListener listener(false);
401 IPCChannelPosixTestListener listener2(false); 412 IPCChannelPosixTestListener listener2(false);
402 IPC::ChannelHandle chan_handle(GetConnectionSocketName()); 413 IPC::ChannelHandle chan_handle(GetConnectionSocketName());
403 IPC::Channel channel(chan_handle, IPC::Channel::MODE_SERVER, &listener); 414 scoped_ptr<IPC::Channel> channel(
404 IPC::Channel channel2(chan_handle, IPC::Channel::MODE_SERVER, &listener2); 415 IPC::Channel::CreateServer(chan_handle, &listener));
405 ASSERT_TRUE(channel.Connect()); 416 scoped_ptr<IPC::Channel> channel2(
406 ASSERT_FALSE(channel2.Connect()); 417 IPC::Channel::CreateServer(chan_handle, &listener2));
418 ASSERT_TRUE(channel->Connect());
419 ASSERT_FALSE(channel2->Connect());
407 } 420 }
408 421
409 TEST_F(IPCChannelPosixTest, BadMode) { 422 TEST_F(IPCChannelPosixTest, BadMode) {
410 // Test setting up two servers with a bad mode. 423 // Test setting up two servers with a bad mode.
411 IPCChannelPosixTestListener listener(false); 424 IPCChannelPosixTestListener listener(false);
412 IPC::ChannelHandle chan_handle(GetConnectionSocketName()); 425 IPC::ChannelHandle chan_handle(GetConnectionSocketName());
413 IPC::Channel channel(chan_handle, IPC::Channel::MODE_NONE, &listener); 426 scoped_ptr<IPC::Channel> channel(IPC::Channel::CreateByModeForProxy(
414 ASSERT_FALSE(channel.Connect()); 427 chan_handle, IPC::Channel::MODE_NONE, &listener));
428 ASSERT_FALSE(channel->Connect());
415 } 429 }
416 430
417 TEST_F(IPCChannelPosixTest, IsNamedServerInitialized) { 431 TEST_F(IPCChannelPosixTest, IsNamedServerInitialized) {
418 const std::string& connection_socket_name = GetConnectionSocketName(); 432 const std::string& connection_socket_name = GetConnectionSocketName();
419 IPCChannelPosixTestListener listener(false); 433 IPCChannelPosixTestListener listener(false);
420 IPC::ChannelHandle chan_handle(connection_socket_name); 434 IPC::ChannelHandle chan_handle(connection_socket_name);
421 ASSERT_TRUE(base::DeleteFile(base::FilePath(connection_socket_name), false)); 435 ASSERT_TRUE(base::DeleteFile(base::FilePath(connection_socket_name), false));
422 ASSERT_FALSE(IPC::Channel::IsNamedServerInitialized( 436 ASSERT_FALSE(IPC::Channel::IsNamedServerInitialized(
423 connection_socket_name)); 437 connection_socket_name));
424 IPC::Channel channel(chan_handle, IPC::Channel::MODE_NAMED_SERVER, &listener); 438 scoped_ptr<IPC::Channel> channel(
439 IPC::Channel::CreateNamedServer(chan_handle, &listener));
425 ASSERT_TRUE(IPC::Channel::IsNamedServerInitialized( 440 ASSERT_TRUE(IPC::Channel::IsNamedServerInitialized(
426 connection_socket_name)); 441 connection_socket_name));
427 channel.Close(); 442 channel->Close();
428 ASSERT_FALSE(IPC::Channel::IsNamedServerInitialized( 443 ASSERT_FALSE(IPC::Channel::IsNamedServerInitialized(
429 connection_socket_name)); 444 connection_socket_name));
430 } 445 }
431 446
432 // A long running process that connects to us 447 // A long running process that connects to us
433 MULTIPROCESS_TEST_MAIN(IPCChannelPosixTestConnectionProc) { 448 MULTIPROCESS_TEST_MAIN(IPCChannelPosixTestConnectionProc) {
434 base::MessageLoopForIO message_loop; 449 base::MessageLoopForIO message_loop;
435 IPCChannelPosixTestListener listener(true); 450 IPCChannelPosixTestListener listener(true);
436 IPC::ChannelHandle handle(IPCChannelPosixTest::GetConnectionSocketName()); 451 IPC::ChannelHandle handle(IPCChannelPosixTest::GetConnectionSocketName());
437 IPCChannelPosixTest::SetUpSocket(&handle, IPC::Channel::MODE_NAMED_CLIENT); 452 IPCChannelPosixTest::SetUpSocket(&handle, IPC::Channel::MODE_NAMED_CLIENT);
438 IPC::Channel channel(handle, IPC::Channel::MODE_NAMED_CLIENT, &listener); 453 scoped_ptr<IPC::Channel> channel(
439 EXPECT_TRUE(channel.Connect()); 454 IPC::Channel::CreateNamedClient(handle, &listener));
455 EXPECT_TRUE(channel->Connect());
440 IPCChannelPosixTest::SpinRunLoop(TestTimeouts::action_max_timeout()); 456 IPCChannelPosixTest::SpinRunLoop(TestTimeouts::action_max_timeout());
441 EXPECT_EQ(IPCChannelPosixTestListener::MESSAGE_RECEIVED, listener.status()); 457 EXPECT_EQ(IPCChannelPosixTestListener::MESSAGE_RECEIVED, listener.status());
442 return 0; 458 return 0;
443 } 459 }
444 460
445 // Simple external process that shouldn't be able to connect to us. 461 // Simple external process that shouldn't be able to connect to us.
446 MULTIPROCESS_TEST_MAIN(IPCChannelPosixFailConnectionProc) { 462 MULTIPROCESS_TEST_MAIN(IPCChannelPosixFailConnectionProc) {
447 base::MessageLoopForIO message_loop; 463 base::MessageLoopForIO message_loop;
448 IPCChannelPosixTestListener listener(false); 464 IPCChannelPosixTestListener listener(false);
449 IPC::ChannelHandle handle(IPCChannelPosixTest::GetConnectionSocketName()); 465 IPC::ChannelHandle handle(IPCChannelPosixTest::GetConnectionSocketName());
450 IPCChannelPosixTest::SetUpSocket(&handle, IPC::Channel::MODE_NAMED_CLIENT); 466 IPCChannelPosixTest::SetUpSocket(&handle, IPC::Channel::MODE_NAMED_CLIENT);
451 IPC::Channel channel(handle, IPC::Channel::MODE_NAMED_CLIENT, &listener); 467 scoped_ptr<IPC::Channel> channel(
468 IPC::Channel::CreateNamedClient(handle, &listener));
452 469
453 // In this case connect may succeed or fail depending on if the packet 470 // In this case connect may succeed or fail depending on if the packet
454 // actually gets sent at sendmsg. Since we never delay on send, we may not 471 // actually gets sent at sendmsg. Since we never delay on send, we may not
455 // see the error. However even if connect succeeds, eventually we will get an 472 // see the error. However even if connect succeeds, eventually we will get an
456 // error back since the channel will be closed when we attempt to read from 473 // error back since the channel will be closed when we attempt to read from
457 // it. 474 // it.
458 bool connected = channel.Connect(); 475 bool connected = channel->Connect();
459 if (connected) { 476 if (connected) {
460 IPCChannelPosixTest::SpinRunLoop(TestTimeouts::action_max_timeout()); 477 IPCChannelPosixTest::SpinRunLoop(TestTimeouts::action_max_timeout());
461 EXPECT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status()); 478 EXPECT_EQ(IPCChannelPosixTestListener::CHANNEL_ERROR, listener.status());
462 } else { 479 } else {
463 EXPECT_EQ(IPCChannelPosixTestListener::DISCONNECTED, listener.status()); 480 EXPECT_EQ(IPCChannelPosixTestListener::DISCONNECTED, listener.status());
464 } 481 }
465 return 0; 482 return 0;
466 } 483 }
467 484
468 } // namespace 485 } // namespace
OLDNEW
« no previous file with comments | « ipc/ipc_channel_common.cc ('k') | ipc/ipc_channel_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698