#include <cerrno>
#include <cstdlib>
#include <exception>
#include <iostream>
#include <string>
#include <sys/wait.h>
#include <unistd.h>
#include <cstring>
#include "boost/version.hpp"
#include "boost/filesystem/convenience.hpp"
#include "FWCore/Utilities/interface/EDMException.h"
#include "FWCore/Utilities/interface/Exception.h"
#include "FWCore/Utilities/interface/RegexMatch.h"
#include "FWCore/Utilities/interface/TestHelper.h"
Go to the source code of this file.
|
int | do_work (int argc, char *argv[], char **env) |
|
int | ptomaine (int argc, char *argv[], char **env) |
|
int | run_script (std::string const &shell, std::string const &script) |
|
int do_work |
( |
int |
argc, |
|
|
char * |
argv[], |
|
|
char ** |
env |
|
) |
| |
Definition at line 57 of file TestHelper.cc.
References dir2webdir::argc, beam_dqm_sourceclient-live_cfg::cerr, gather_cfg::cout, MillePedeFileConverter_cfg::e, mps_fire::i, castor_dqm_sourceclient_file_cfg::path, run_script(), fileinputsource_cfi::shell, AlCaHLTBitMon_QueryRunRegistry::string, and edm::untaintString().
Referenced by ptomaine().
58 bf::path currentPath(bf::initial_path().
string());
61 std::cout <<
"Usage: " <<
argv[0] <<
" shell subdir script1 script2 ... scriptN\n\n" 62 <<
"where shell is the path+shell (e.g., /bin/bash) intended to run the scripts\n" 63 <<
"and subdir is the subsystem/package/subdir in which the scripts are found\n" 64 <<
"(e.g., FWCore/Utilities/test)\n" 67 std::cout <<
"Current directory is: " << currentPath.string() <<
'\n';
70 for (
int i = 0;
env[
i] !=
nullptr; ++
i)
77 char const* goodDirectory =
"[A-Za-z0-9/_.-]+";
79 for (
int i = 0;
i <
argc; ++
i) {
86 std::cout <<
"Current directory is: " << currentPath.string() <<
'\n';
89 char const* topdir = std::getenv(
"SCRAMRT_LOCALRT");
91 topdir = std::getenv(
"LOCALRT");
94 std::cerr <<
"Invalid top directory '" << topdir <<
"'" << std::endl;
97 }
catch (std::runtime_error
const&
e) {
98 std::cerr <<
"Invalid top directory '" << topdir <<
"'" << std::endl;
103 char const* arch = std::getenv(
"SCRAM_ARCH");
108 #if (BOOST_VERSION / 100000) >= 1 && ((BOOST_VERSION / 100) % 1000) >= 47 109 std::string maybe_arch = exepath.parent_path().filename().string();
111 std::string maybe_arch = exepath.branch_path().leaf();
113 if (setenv(
"SCRAM_ARCH", maybe_arch.c_str(), 1) != 0) {
114 std::cerr <<
"SCRAM_ARCH not set and attempt to set it failed\n";
117 arch = std::getenv(
"SCRAM_ARCH");
123 std::cerr <<
"Neither SCRAMRT_LOCALRT nor LOCALRT is defined" << std::endl;
129 std::cerr <<
"Invalid test directory '" <<
argv[2] <<
"'" << std::endl;
132 }
catch (std::runtime_error
const& e) {
133 std::cerr <<
"Invalid test directory '" <<
argv[2] <<
"'" << std::endl;
148 std::cout <<
"topdir is: " << topdir <<
'\n';
149 std::cout <<
"testdir is: " << testdir <<
'\n';
150 std::cout <<
"tmpdir is: " << tmpdir <<
'\n';
151 std::cout <<
"testbin is: " << testbin <<
'\n';
153 if (setenv(
"LOCAL_TEST_DIR", testdir.c_str(), 1) != 0) {
154 std::cerr <<
"Could not set LOCAL_TEST_DIR to " << testdir << std::endl;
157 if (setenv(
"LOCAL_TMP_DIR", tmpdir.c_str(), 1) != 0) {
158 std::cerr <<
"Could not set LOCAL_TMP_DIR to " << tmpdir << std::endl;
161 if (setenv(
"LOCAL_TOP_DIR", topdir, 1) != 0) {
162 std::cerr <<
"Could not set LOCAL_TOP_DIR to " << topdir << std::endl;
165 if (setenv(
"LOCAL_TEST_BIN", testbin.c_str(), 1) != 0) {
166 std::cerr <<
"Could not set LOCAL_TEST_BIN to " << testbin << std::endl;
172 for (
int i = 3;
i < argc && rc == 0; ++
i) {
174 scriptname +=
argv[
i];
175 std::cout <<
"Running script: " << scriptname << std::endl;
179 std::cout <<
"status = " << rc << std::endl;
180 return rc == 0 ? 0 : -1;
bool untaintString(char const *pattern, char const *regexp)
int run_script(std::string const &shell, std::string const &script)
int ptomaine |
( |
int |
argc, |
|
|
char * |
argv[], |
|
|
char ** |
env |
|
) |
| |
int run_script |
( |
std::string const & |
shell, |
|
|
std::string const & |
script |
|
) |
| |
Definition at line 23 of file TestHelper.cc.
References beam_dqm_sourceclient-live_cfg::cerr, watchdog::const, and mps_update::status.
Referenced by do_work().
27 if ((pid = fork()) < 0) {
28 std::cerr <<
"fork failed, to run " << script << std::endl;
33 execlp(
shell.c_str(),
"sh",
"-c", script.c_str(),
static_cast<char const*
>(
nullptr));
34 std::cerr <<
"child failed becuase '" << strerror(errno) <<
"'\n";
37 while (waitpid(pid, &status, 0) < 0) {
39 std::cerr <<
"child process failed " << strerror(errno) <<
"\n";
43 if (WIFSIGNALED(status)) {
44 std::cerr <<
"child existed because of a signal " << WTERMSIG(status) <<
"\n";
48 if (WIFSIGNALED(status)) {
49 std::cerr <<
"child existed because of a signal " << WTERMSIG(status) <<
"\n";
51 if (WIFEXITED(status)) {