| OLD | NEW | 
|   1 // Copyright 2014 The Crashpad Authors. All rights reserved. |   1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 
|   2 // |   2 // | 
|   3 // Licensed under the Apache License, Version 2.0 (the "License"); |   3 // Licensed under the Apache License, Version 2.0 (the "License"); | 
|   4 // you may not use this file except in compliance with the License. |   4 // you may not use this file except in compliance with the License. | 
|   5 // You may obtain a copy of the License at |   5 // You may obtain a copy of the License at | 
|   6 // |   6 // | 
|   7 //     http://www.apache.org/licenses/LICENSE-2.0 |   7 //     http://www.apache.org/licenses/LICENSE-2.0 | 
|   8 // |   8 // | 
|   9 // Unless required by applicable law or agreed to in writing, software |   9 // Unless required by applicable law or agreed to in writing, software | 
|  10 // distributed under the License is distributed on an "AS IS" BASIS, |  10 // distributed under the License is distributed on an "AS IS" BASIS, | 
|  11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  12 // See the License for the specific language governing permissions and |  12 // See the License for the specific language governing permissions and | 
|  13 // limitations under the License. |  13 // limitations under the License. | 
|  14  |  14  | 
|  15 #include "util/test/multiprocess_exec.h" |  15 #include "util/test/multiprocess_exec.h" | 
|  16  |  16  | 
|  17 #include "base/basictypes.h" |  17 #include "base/basictypes.h" | 
|  18 #include "base/strings/utf_string_conversions.h" |  18 #include "base/strings/utf_string_conversions.h" | 
|  19 #include "build/build_config.h" |  19 #include "build/build_config.h" | 
|  20 #include "gtest/gtest.h" |  20 #include "gtest/gtest.h" | 
|  21 #include "util/file/file_io.h" |  21 #include "util/file/file_io.h" | 
|  22 #include "util/test/executable_path.h" |  22 #include "util/test/paths.h" | 
|  23  |  23  | 
|  24 namespace crashpad { |  24 namespace crashpad { | 
|  25 namespace test { |  25 namespace test { | 
|  26 namespace { |  26 namespace { | 
|  27  |  27  | 
|  28 class TestMultiprocessExec final : public MultiprocessExec { |  28 class TestMultiprocessExec final : public MultiprocessExec { | 
|  29  public: |  29  public: | 
|  30   TestMultiprocessExec() : MultiprocessExec() {} |  30   TestMultiprocessExec() : MultiprocessExec() {} | 
|  31  |  31  | 
|  32   ~TestMultiprocessExec() {} |  32   ~TestMultiprocessExec() {} | 
|  33  |  33  | 
|  34  private: |  34  private: | 
|  35   void MultiprocessParent() override { |  35   void MultiprocessParent() override { | 
|  36     // Use Logging*File() instead of Checked*File() so that the test can fail |  36     // Use Logging*File() instead of Checked*File() so that the test can fail | 
|  37     // gracefully with a gtest assertion if the child does not execute properly. |  37     // gracefully with a gtest assertion if the child does not execute properly. | 
|  38  |  38  | 
|  39     char c = 'z'; |  39     char c = 'z'; | 
|  40     ASSERT_TRUE(LoggingWriteFile(WritePipeHandle(), &c, 1)); |  40     ASSERT_TRUE(LoggingWriteFile(WritePipeHandle(), &c, 1)); | 
|  41  |  41  | 
|  42     ASSERT_TRUE(LoggingReadFile(ReadPipeHandle(), &c, 1)); |  42     ASSERT_TRUE(LoggingReadFile(ReadPipeHandle(), &c, 1)); | 
|  43     EXPECT_EQ('Z', c); |  43     EXPECT_EQ('Z', c); | 
|  44   } |  44   } | 
|  45  |  45  | 
|  46   DISALLOW_COPY_AND_ASSIGN(TestMultiprocessExec); |  46   DISALLOW_COPY_AND_ASSIGN(TestMultiprocessExec); | 
|  47 }; |  47 }; | 
|  48  |  48  | 
|  49 TEST(MultiprocessExec, MultiprocessExec) { |  49 TEST(MultiprocessExec, MultiprocessExec) { | 
|  50   TestMultiprocessExec multiprocess_exec; |  50   TestMultiprocessExec multiprocess_exec; | 
|  51   base::FilePath test_executable = ExecutablePath(); |  51   base::FilePath test_executable = Paths::Executable(); | 
|  52 #if defined(OS_POSIX) |  52 #if defined(OS_POSIX) | 
|  53   std::string child_test_executable = test_executable.value(); |  53   std::string child_test_executable = test_executable.value(); | 
|  54 #elif defined(OS_WIN) |  54 #elif defined(OS_WIN) | 
|  55   std::string child_test_executable = |  55   std::string child_test_executable = | 
|  56       base::UTF16ToUTF8(test_executable.RemoveFinalExtension().value()); |  56       base::UTF16ToUTF8(test_executable.RemoveFinalExtension().value()); | 
|  57 #endif  // OS_POSIX |  57 #endif  // OS_POSIX | 
|  58   child_test_executable += "_multiprocess_exec_test_child"; |  58   child_test_executable += "_multiprocess_exec_test_child"; | 
|  59 #if defined(OS_WIN) |  59 #if defined(OS_WIN) | 
|  60   child_test_executable += ".exe"; |  60   child_test_executable += ".exe"; | 
|  61 #endif |  61 #endif | 
|  62   multiprocess_exec.SetChildCommand(child_test_executable, nullptr); |  62   multiprocess_exec.SetChildCommand(child_test_executable, nullptr); | 
|  63   multiprocess_exec.Run(); |  63   multiprocess_exec.Run(); | 
|  64 } |  64 } | 
|  65  |  65  | 
|  66 }  // namespace |  66 }  // namespace | 
|  67 }  // namespace test |  67 }  // namespace test | 
|  68 }  // namespace crashpad |  68 }  // namespace crashpad | 
| OLD | NEW |