xref: /aosp_15_r20/external/libchrome/base/test/multiprocess_test.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "base/test/multiprocess_test.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include "base/base_switches.h"
8*635a8641SAndroid Build Coastguard Worker #include "base/command_line.h"
9*635a8641SAndroid Build Coastguard Worker #include "base/files/file_path.h"
10*635a8641SAndroid Build Coastguard Worker #include "base/files/file_util.h"
11*635a8641SAndroid Build Coastguard Worker #include "base/threading/thread_restrictions.h"
12*635a8641SAndroid Build Coastguard Worker #include "build/build_config.h"
13*635a8641SAndroid Build Coastguard Worker 
14*635a8641SAndroid Build Coastguard Worker namespace base {
15*635a8641SAndroid Build Coastguard Worker 
16*635a8641SAndroid Build Coastguard Worker #if !defined(OS_ANDROID) && !defined(__ANDROID_HOST__)
SpawnMultiProcessTestChild(const std::string & procname,const CommandLine & base_command_line,const LaunchOptions & options)17*635a8641SAndroid Build Coastguard Worker Process SpawnMultiProcessTestChild(const std::string& procname,
18*635a8641SAndroid Build Coastguard Worker                                    const CommandLine& base_command_line,
19*635a8641SAndroid Build Coastguard Worker                                    const LaunchOptions& options) {
20*635a8641SAndroid Build Coastguard Worker   CommandLine command_line(base_command_line);
21*635a8641SAndroid Build Coastguard Worker   // TODO(viettrungluu): See comment above |MakeCmdLine()| in the header file.
22*635a8641SAndroid Build Coastguard Worker   // This is a temporary hack, since |MakeCmdLine()| has to provide a full
23*635a8641SAndroid Build Coastguard Worker   // command line.
24*635a8641SAndroid Build Coastguard Worker   if (!command_line.HasSwitch(switches::kTestChildProcess))
25*635a8641SAndroid Build Coastguard Worker     command_line.AppendSwitchASCII(switches::kTestChildProcess, procname);
26*635a8641SAndroid Build Coastguard Worker 
27*635a8641SAndroid Build Coastguard Worker   return LaunchProcess(command_line, options);
28*635a8641SAndroid Build Coastguard Worker }
29*635a8641SAndroid Build Coastguard Worker 
WaitForMultiprocessTestChildExit(const Process & process,TimeDelta timeout,int * exit_code)30*635a8641SAndroid Build Coastguard Worker bool WaitForMultiprocessTestChildExit(const Process& process,
31*635a8641SAndroid Build Coastguard Worker                                       TimeDelta timeout,
32*635a8641SAndroid Build Coastguard Worker                                       int* exit_code) {
33*635a8641SAndroid Build Coastguard Worker   return process.WaitForExitWithTimeout(timeout, exit_code);
34*635a8641SAndroid Build Coastguard Worker }
35*635a8641SAndroid Build Coastguard Worker 
TerminateMultiProcessTestChild(const Process & process,int exit_code,bool wait)36*635a8641SAndroid Build Coastguard Worker bool TerminateMultiProcessTestChild(const Process& process,
37*635a8641SAndroid Build Coastguard Worker                                     int exit_code,
38*635a8641SAndroid Build Coastguard Worker                                     bool wait) {
39*635a8641SAndroid Build Coastguard Worker   return process.Terminate(exit_code, wait);
40*635a8641SAndroid Build Coastguard Worker }
41*635a8641SAndroid Build Coastguard Worker 
42*635a8641SAndroid Build Coastguard Worker #endif  // !OS_ANDROID && !__ANDROID_HOST__
43*635a8641SAndroid Build Coastguard Worker 
GetMultiProcessTestChildBaseCommandLine()44*635a8641SAndroid Build Coastguard Worker CommandLine GetMultiProcessTestChildBaseCommandLine() {
45*635a8641SAndroid Build Coastguard Worker   base::ScopedAllowBlockingForTesting allow_blocking;
46*635a8641SAndroid Build Coastguard Worker   CommandLine cmd_line = *CommandLine::ForCurrentProcess();
47*635a8641SAndroid Build Coastguard Worker   cmd_line.SetProgram(MakeAbsoluteFilePath(cmd_line.GetProgram()));
48*635a8641SAndroid Build Coastguard Worker   return cmd_line;
49*635a8641SAndroid Build Coastguard Worker }
50*635a8641SAndroid Build Coastguard Worker 
51*635a8641SAndroid Build Coastguard Worker // MultiProcessTest ------------------------------------------------------------
52*635a8641SAndroid Build Coastguard Worker 
53*635a8641SAndroid Build Coastguard Worker MultiProcessTest::MultiProcessTest() = default;
54*635a8641SAndroid Build Coastguard Worker 
55*635a8641SAndroid Build Coastguard Worker // Don't compile on ARC.
56*635a8641SAndroid Build Coastguard Worker #if 0
57*635a8641SAndroid Build Coastguard Worker Process MultiProcessTest::SpawnChild(const std::string& procname) {
58*635a8641SAndroid Build Coastguard Worker   LaunchOptions options;
59*635a8641SAndroid Build Coastguard Worker #if defined(OS_WIN)
60*635a8641SAndroid Build Coastguard Worker   options.start_hidden = true;
61*635a8641SAndroid Build Coastguard Worker #endif
62*635a8641SAndroid Build Coastguard Worker   return SpawnChildWithOptions(procname, options);
63*635a8641SAndroid Build Coastguard Worker }
64*635a8641SAndroid Build Coastguard Worker 
65*635a8641SAndroid Build Coastguard Worker Process MultiProcessTest::SpawnChildWithOptions(const std::string& procname,
66*635a8641SAndroid Build Coastguard Worker                                                 const LaunchOptions& options) {
67*635a8641SAndroid Build Coastguard Worker   return SpawnMultiProcessTestChild(procname, MakeCmdLine(procname), options);
68*635a8641SAndroid Build Coastguard Worker }
69*635a8641SAndroid Build Coastguard Worker #endif
70*635a8641SAndroid Build Coastguard Worker 
MakeCmdLine(const std::string & procname)71*635a8641SAndroid Build Coastguard Worker CommandLine MultiProcessTest::MakeCmdLine(const std::string& procname) {
72*635a8641SAndroid Build Coastguard Worker   CommandLine command_line = GetMultiProcessTestChildBaseCommandLine();
73*635a8641SAndroid Build Coastguard Worker   command_line.AppendSwitchASCII(switches::kTestChildProcess, procname);
74*635a8641SAndroid Build Coastguard Worker   return command_line;
75*635a8641SAndroid Build Coastguard Worker }
76*635a8641SAndroid Build Coastguard Worker 
77*635a8641SAndroid Build Coastguard Worker }  // namespace base
78