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

Side by Side Diff: mojo/edk/test/multiprocess_test_helper.cc

Issue 1485573002: Remove SimpleBroker and instead use the production broker implementation in tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comment Created 5 years 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/test/multiprocess_test_helper.h ('k') | mojo/mojo_edk.gyp » ('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 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 #include "mojo/edk/test/multiprocess_test_helper.h" 5 #include "mojo/edk/test/multiprocess_test_helper.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/process/kill.h" 9 #include "base/process/kill.h"
10 #include "base/process/process_handle.h" 10 #include "base/process/process_handle.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "mojo/edk/embedder/embedder.h"
12 #include "mojo/edk/embedder/platform_channel_pair.h" 13 #include "mojo/edk/embedder/platform_channel_pair.h"
13 14
14 #if defined(OS_WIN) 15 #if defined(OS_WIN)
15 #include "base/win/windows_version.h" 16 #include "base/win/windows_version.h"
16 #endif 17 #endif
17 18
18 namespace mojo { 19 namespace mojo {
19 namespace edk { 20 namespace edk {
20 namespace test { 21 namespace test {
21 22
23 const char kBrokerHandleSwitch[] = "broker-handle";
24
22 MultiprocessTestHelper::MultiprocessTestHelper() { 25 MultiprocessTestHelper::MultiprocessTestHelper() {
23 platform_channel_pair_.reset(new PlatformChannelPair()); 26 platform_channel_pair_.reset(new PlatformChannelPair());
24 server_platform_handle = platform_channel_pair_->PassServerHandle(); 27 server_platform_handle = platform_channel_pair_->PassServerHandle();
28 broker_platform_channel_pair_.reset(new PlatformChannelPair());
25 } 29 }
26 30
27 MultiprocessTestHelper::~MultiprocessTestHelper() { 31 MultiprocessTestHelper::~MultiprocessTestHelper() {
28 CHECK(!test_child_.IsValid()); 32 CHECK(!test_child_.IsValid());
29 server_platform_handle.reset(); 33 server_platform_handle.reset();
30 platform_channel_pair_.reset(); 34 platform_channel_pair_.reset();
31 } 35 }
32 36
33 void MultiprocessTestHelper::StartChild(const std::string& test_child_name) { 37 void MultiprocessTestHelper::StartChild(const std::string& test_child_name) {
34 StartChildWithExtraSwitch(test_child_name, std::string(), std::string()); 38 StartChildWithExtraSwitch(test_child_name, std::string(), std::string());
35 } 39 }
36 40
37 void MultiprocessTestHelper::StartChildWithExtraSwitch( 41 void MultiprocessTestHelper::StartChildWithExtraSwitch(
38 const std::string& test_child_name, 42 const std::string& test_child_name,
39 const std::string& switch_string, 43 const std::string& switch_string,
40 const std::string& switch_value) { 44 const std::string& switch_value) {
41 CHECK(platform_channel_pair_); 45 CHECK(platform_channel_pair_);
42 CHECK(!test_child_name.empty()); 46 CHECK(!test_child_name.empty());
43 CHECK(!test_child_.IsValid()); 47 CHECK(!test_child_.IsValid());
44 48
45 std::string test_child_main = test_child_name + "TestChildMain"; 49 std::string test_child_main = test_child_name + "TestChildMain";
46 50
47 base::CommandLine command_line( 51 base::CommandLine command_line(
48 base::GetMultiProcessTestChildBaseCommandLine()); 52 base::GetMultiProcessTestChildBaseCommandLine());
49 HandlePassingInformation handle_passing_info; 53 HandlePassingInformation handle_passing_info;
50 platform_channel_pair_->PrepareToPassClientHandleToChildProcess( 54 platform_channel_pair_->PrepareToPassClientHandleToChildProcess(
51 &command_line, &handle_passing_info); 55 &command_line, &handle_passing_info);
52 56
57 std::string broker_handle = broker_platform_channel_pair_->
58 PrepareToPassClientHandleToChildProcessAsString(&handle_passing_info);
59 command_line.AppendSwitchASCII(kBrokerHandleSwitch, broker_handle);
60
53 if (!switch_string.empty()) { 61 if (!switch_string.empty()) {
54 CHECK(!command_line.HasSwitch(switch_string)); 62 CHECK(!command_line.HasSwitch(switch_string));
55 if (!switch_value.empty()) 63 if (!switch_value.empty())
56 command_line.AppendSwitchASCII(switch_string, switch_value); 64 command_line.AppendSwitchASCII(switch_string, switch_value);
57 else 65 else
58 command_line.AppendSwitch(switch_string); 66 command_line.AppendSwitch(switch_string);
59 } 67 }
60 68
61 base::LaunchOptions options; 69 base::LaunchOptions options;
62 #if defined(OS_POSIX) 70 #if defined(OS_POSIX)
63 options.fds_to_remap = &handle_passing_info; 71 options.fds_to_remap = &handle_passing_info;
64 #elif defined(OS_WIN) 72 #elif defined(OS_WIN)
65 options.start_hidden = true; 73 options.start_hidden = true;
66 if (base::win::GetVersion() >= base::win::VERSION_VISTA) 74 if (base::win::GetVersion() >= base::win::VERSION_VISTA)
67 options.handles_to_inherit = &handle_passing_info; 75 options.handles_to_inherit = &handle_passing_info;
68 else 76 else
69 options.inherit_handles = true; 77 options.inherit_handles = true;
70 #else 78 #else
71 #error "Not supported yet." 79 #error "Not supported yet."
72 #endif 80 #endif
73 81
74 test_child_ = 82 test_child_ =
75 base::SpawnMultiProcessTestChild(test_child_main, command_line, options); 83 base::SpawnMultiProcessTestChild(test_child_main, command_line, options);
76 platform_channel_pair_->ChildProcessLaunched(); 84 platform_channel_pair_->ChildProcessLaunched();
77 85
86 broker_platform_channel_pair_->ChildProcessLaunched();
87 ChildProcessLaunched(test_child_.Handle(),
88 broker_platform_channel_pair_->PassServerHandle());
89
78 CHECK(test_child_.IsValid()); 90 CHECK(test_child_.IsValid());
79 } 91 }
80 92
81 int MultiprocessTestHelper::WaitForChildShutdown() { 93 int MultiprocessTestHelper::WaitForChildShutdown() {
82 CHECK(test_child_.IsValid()); 94 CHECK(test_child_.IsValid());
83 95
84 int rv = -1; 96 int rv = -1;
85 CHECK( 97 CHECK(
86 test_child_.WaitForExitWithTimeout(TestTimeouts::action_timeout(), &rv)); 98 test_child_.WaitForExitWithTimeout(TestTimeouts::action_timeout(), &rv));
87 test_child_.Close(); 99 test_child_.Close();
88 return rv; 100 return rv;
89 } 101 }
90 102
91 bool MultiprocessTestHelper::WaitForChildTestShutdown() { 103 bool MultiprocessTestHelper::WaitForChildTestShutdown() {
92 return WaitForChildShutdown() == 0; 104 return WaitForChildShutdown() == 0;
93 } 105 }
94 106
95 // static 107 // static
96 void MultiprocessTestHelper::ChildSetup() { 108 void MultiprocessTestHelper::ChildSetup() {
97 CHECK(base::CommandLine::InitializedForCurrentProcess()); 109 CHECK(base::CommandLine::InitializedForCurrentProcess());
98 client_platform_handle = 110 client_platform_handle =
99 PlatformChannelPair::PassClientHandleFromParentProcess( 111 PlatformChannelPair::PassClientHandleFromParentProcess(
100 *base::CommandLine::ForCurrentProcess()); 112 *base::CommandLine::ForCurrentProcess());
113
114 std::string broker_handle_str =
115 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
116 kBrokerHandleSwitch);
117 ScopedPlatformHandle broker_handle =
118 PlatformChannelPair::PassClientHandleFromParentProcessFromString(
119 broker_handle_str);
120 SetParentPipeHandle(broker_handle.Pass());
101 } 121 }
102 122
103 // static 123 // static
104 ScopedPlatformHandle MultiprocessTestHelper::client_platform_handle; 124 ScopedPlatformHandle MultiprocessTestHelper::client_platform_handle;
105 125
106 } // namespace test 126 } // namespace test
107 } // namespace edk 127 } // namespace edk
108 } // namespace mojo 128 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/test/multiprocess_test_helper.h ('k') | mojo/mojo_edk.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698