blob: 49ae07dd3e8d99d57ba806851b9e53474c95128c [file] [log] [blame]
jcivelli@chromium.orgc30c76f2012-06-27 10:12:24 +09001// Copyright (c) 2012 The Chromium Authors. All rights reserved.
jeremy@chromium.org012e9992008-10-30 05:46:04 +09002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "multiprocess_func_list.h"
6
7#include <map>
8
9// Helper functions to maintain mapping of "test name"->test func.
10// The information is accessed via a global map.
11namespace multi_process_function_list {
maruel@chromium.orge5743442009-03-05 21:46:38 +090012
jeremy@chromium.org012e9992008-10-30 05:46:04 +090013namespace {
14
jcivelli@chromium.orgc30c76f2012-06-27 10:12:24 +090015struct ProcessFunctions {
16 ProcessFunctions() : main(NULL), setup(NULL) {}
17 ProcessFunctions(TestMainFunctionPtr main, SetupFunctionPtr setup)
18 : main(main),
19 setup(setup) {
20 }
21 TestMainFunctionPtr main;
22 SetupFunctionPtr setup;
23};
24
25typedef std::map<std::string, ProcessFunctions> MultiProcessTestMap;
maruel@chromium.orge5743442009-03-05 21:46:38 +090026
jeremy@chromium.org012e9992008-10-30 05:46:04 +090027// Retrieve a reference to the global 'func name' -> func ptr map.
jcivelli@chromium.orgc30c76f2012-06-27 10:12:24 +090028MultiProcessTestMap& GetMultiprocessFuncMap() {
jeremy@chromium.org012e9992008-10-30 05:46:04 +090029 static MultiProcessTestMap test_name_to_func_ptr_map;
30 return test_name_to_func_ptr_map;
31}
maruel@chromium.orge5743442009-03-05 21:46:38 +090032
jeremy@chromium.org012e9992008-10-30 05:46:04 +090033} // namespace
34
jcivelli@chromium.orgc30c76f2012-06-27 10:12:24 +090035AppendMultiProcessTest::AppendMultiProcessTest(
36 std::string test_name,
37 TestMainFunctionPtr main_func_ptr,
38 SetupFunctionPtr setup_func_ptr) {
39 GetMultiprocessFuncMap()[test_name] =
40 ProcessFunctions(main_func_ptr, setup_func_ptr);
jeremy@chromium.org012e9992008-10-30 05:46:04 +090041}
42
43int InvokeChildProcessTest(std::string test_name) {
jcivelli@chromium.orgc30c76f2012-06-27 10:12:24 +090044 MultiProcessTestMap& func_lookup_table = GetMultiprocessFuncMap();
jeremy@chromium.org012e9992008-10-30 05:46:04 +090045 MultiProcessTestMap::iterator it = func_lookup_table.find(test_name);
46 if (it != func_lookup_table.end()) {
jcivelli@chromium.orgc30c76f2012-06-27 10:12:24 +090047 const ProcessFunctions& process_functions = it->second;
48 if (process_functions.setup)
49 (*process_functions.setup)();
50 if (process_functions.main)
51 return (*process_functions.main)();
jeremy@chromium.org012e9992008-10-30 05:46:04 +090052 }
maruel@chromium.orge5743442009-03-05 21:46:38 +090053
jeremy@chromium.org012e9992008-10-30 05:46:04 +090054 return -1;
55}
56
57} // namespace multi_process_function_list