| 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 #include "mojo/common/test/multiprocess_test_base.h" | 5 #include "mojo/common/test/multiprocess_test_base.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 // TODO(vtl): Remove build_config.h include when fully implemented on Windows. | 11 // TODO(vtl): Remove build_config.h include when fully implemented on Windows. |
| 12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
| 13 #include "mojo/system/platform_channel.h" | |
| 14 #include "mojo/system/platform_channel_pair.h" | 13 #include "mojo/system/platform_channel_pair.h" |
| 15 | 14 |
| 16 namespace mojo { | 15 namespace mojo { |
| 17 namespace test { | 16 namespace test { |
| 18 | 17 |
| 19 MultiprocessTestBase::MultiprocessTestBase() | 18 MultiprocessTestBase::MultiprocessTestBase() |
| 20 : test_child_handle_(base::kNullProcessHandle) { | 19 : test_child_handle_(base::kNullProcessHandle) { |
| 21 } | 20 } |
| 22 | 21 |
| 23 MultiprocessTestBase::~MultiprocessTestBase() { | 22 MultiprocessTestBase::~MultiprocessTestBase() { |
| 24 CHECK_EQ(test_child_handle_, base::kNullProcessHandle); | 23 CHECK_EQ(test_child_handle_, base::kNullProcessHandle); |
| 25 } | 24 } |
| 26 | 25 |
| 27 void MultiprocessTestBase::SetUp() { | 26 void MultiprocessTestBase::SetUp() { |
| 28 CHECK_EQ(test_child_handle_, base::kNullProcessHandle); | 27 CHECK_EQ(test_child_handle_, base::kNullProcessHandle); |
| 29 | 28 |
| 30 MultiProcessTest::SetUp(); | 29 MultiProcessTest::SetUp(); |
| 31 | 30 |
| 32 // TODO(vtl): Not implemented on Windows yet. | 31 // TODO(vtl): Not implemented on Windows yet. |
| 33 #if defined(OS_POSIX) | 32 #if defined(OS_POSIX) |
| 34 platform_channel_pair_.reset(new system::PlatformChannelPair()); | 33 platform_channel_pair_.reset(new system::PlatformChannelPair()); |
| 35 server_platform_channel = platform_channel_pair_->CreateServerChannel(); | 34 server_platform_handle = platform_channel_pair_->PassServerHandle(); |
| 36 #endif | 35 #endif |
| 37 } | 36 } |
| 38 | 37 |
| 39 void MultiprocessTestBase::TearDown() { | 38 void MultiprocessTestBase::TearDown() { |
| 40 CHECK_EQ(test_child_handle_, base::kNullProcessHandle); | 39 CHECK_EQ(test_child_handle_, base::kNullProcessHandle); |
| 41 | 40 |
| 42 server_platform_channel.reset(); | 41 server_platform_handle.reset(); |
| 43 platform_channel_pair_.reset(); | 42 platform_channel_pair_.reset(); |
| 44 | 43 |
| 45 MultiProcessTest::TearDown(); | 44 MultiProcessTest::TearDown(); |
| 46 } | 45 } |
| 47 | 46 |
| 48 void MultiprocessTestBase::StartChild(const std::string& test_child_name) { | 47 void MultiprocessTestBase::StartChild(const std::string& test_child_name) { |
| 49 CHECK(platform_channel_pair_.get()); | 48 CHECK(platform_channel_pair_.get()); |
| 50 CHECK(!test_child_name.empty()); | 49 CHECK(!test_child_name.empty()); |
| 51 CHECK_EQ(test_child_handle_, base::kNullProcessHandle); | 50 CHECK_EQ(test_child_handle_, base::kNullProcessHandle); |
| 52 | 51 |
| 53 std::string test_child_main = test_child_name + "TestChildMain"; | 52 std::string test_child_main = test_child_name + "TestChildMain"; |
| 54 | 53 |
| 55 #if defined(OS_POSIX) | 54 #if defined(OS_POSIX) |
| 56 CommandLine unused(CommandLine::NO_PROGRAM); | 55 CommandLine unused(CommandLine::NO_PROGRAM); |
| 57 base::FileHandleMappingVector fds_to_map; | 56 base::FileHandleMappingVector fds_to_map; |
| 58 platform_channel_pair_->PrepareToPassClientChannelToChildProcess(&unused, | 57 platform_channel_pair_->PrepareToPassClientHandleToChildProcess(&unused, |
| 59 &fds_to_map); | 58 &fds_to_map); |
| 60 test_child_handle_ = SpawnChild(test_child_main, fds_to_map, false); | 59 test_child_handle_ = SpawnChild(test_child_main, fds_to_map, false); |
| 61 #elif defined(OS_WIN) | 60 #elif defined(OS_WIN) |
| 62 test_child_handle_ = SpawnChild(test_child_main, false); | 61 test_child_handle_ = SpawnChild(test_child_main, false); |
| 63 #else | 62 #else |
| 64 #error "Not supported yet." | 63 #error "Not supported yet." |
| 65 #endif | 64 #endif |
| 66 // TODO(vtl): Not implemented on Windows yet. | 65 // TODO(vtl): Not implemented on Windows yet. |
| 67 #if defined(OS_POSIX) | 66 #if defined(OS_POSIX) |
| 68 platform_channel_pair_->ChildProcessLaunched(); | 67 platform_channel_pair_->ChildProcessLaunched(); |
| 69 #endif | 68 #endif |
| (...skipping 15 matching lines...) Expand all Loading... |
| 85 | 84 |
| 86 CommandLine MultiprocessTestBase::MakeCmdLine(const std::string& procname, | 85 CommandLine MultiprocessTestBase::MakeCmdLine(const std::string& procname, |
| 87 bool debug_on_start) { | 86 bool debug_on_start) { |
| 88 CHECK(platform_channel_pair_.get()); | 87 CHECK(platform_channel_pair_.get()); |
| 89 | 88 |
| 90 CommandLine command_line = | 89 CommandLine command_line = |
| 91 base::MultiProcessTest::MakeCmdLine(procname, debug_on_start); | 90 base::MultiProcessTest::MakeCmdLine(procname, debug_on_start); |
| 92 // TODO(vtl): Not implemented on Windows yet. | 91 // TODO(vtl): Not implemented on Windows yet. |
| 93 #if defined(OS_POSIX) | 92 #if defined(OS_POSIX) |
| 94 base::FileHandleMappingVector unused; | 93 base::FileHandleMappingVector unused; |
| 95 platform_channel_pair_->PrepareToPassClientChannelToChildProcess( | 94 platform_channel_pair_->PrepareToPassClientHandleToChildProcess(&command_line, |
| 96 &command_line, &unused); | 95 &unused); |
| 97 #endif | 96 #endif |
| 98 return command_line; | 97 return command_line; |
| 99 } | 98 } |
| 100 | 99 |
| 101 // static | 100 // static |
| 102 void MultiprocessTestBase::ChildSetup() { | 101 void MultiprocessTestBase::ChildSetup() { |
| 103 CHECK(CommandLine::InitializedForCurrentProcess()); | 102 CHECK(CommandLine::InitializedForCurrentProcess()); |
| 104 // TODO(vtl): Not implemented on Windows yet. | 103 // TODO(vtl): Not implemented on Windows yet. |
| 105 #if defined(OS_POSIX) | 104 #if defined(OS_POSIX) |
| 106 client_platform_channel = | 105 client_platform_handle = |
| 107 system::PlatformChannelPair::CreateClientChannelFromParentProcess( | 106 system::PlatformChannelPair::PassClientHandleFromParentProcess( |
| 108 *CommandLine::ForCurrentProcess()); | 107 *CommandLine::ForCurrentProcess()); |
| 109 CHECK(client_platform_channel.get()); | |
| 110 #endif | 108 #endif |
| 111 } | 109 } |
| 112 | 110 |
| 113 // static | 111 // static |
| 114 scoped_ptr<system::PlatformChannel> | 112 system::ScopedPlatformHandle MultiprocessTestBase::client_platform_handle; |
| 115 MultiprocessTestBase::client_platform_channel; | |
| 116 | 113 |
| 117 } // namespace test | 114 } // namespace test |
| 118 } // namespace mojo | 115 } // namespace mojo |
| OLD | NEW |