version 1.1.2.1, 2006/04/18 03:15:28
|
version 1.1.2.2, 2006/04/24 19:15:09
|
|
|
#include "StressTestController.h" | #include "StressTestController.h" |
#include <Pegasus/Common/TimeValue.h> | #include <Pegasus/Common/TimeValue.h> |
#include <Pegasus/Common/FileSystem.h> | #include <Pegasus/Common/FileSystem.h> |
|
|
//#define DEBUG | //#define DEBUG |
#include <time.h> | #include <time.h> |
//Windows |
|
#ifdef PEGASUS_PLATFORM_WIN32_IX86_MSVC |
// |
|
// For Windows |
|
// |
|
#ifdef PEGASUS_OS_TYPE_WINDOWS |
#include <windows.h> /* for DWORD etc. */ | #include <windows.h> /* for DWORD etc. */ |
typedef DWORD pid_t; /* getpid() and others */ | typedef DWORD pid_t; /* getpid() and others */ |
#include <process.h> | #include <process.h> |
|
|
/** | /** |
* Message resource name | * Message resource name |
*/ | */ |
static const char MSG_PATH [] = "pegasus/pegasusCLI"; |
|
| |
static const char REQUIRED_ARGS_MISSING [] = | static const char REQUIRED_ARGS_MISSING [] = |
"Required arguments missing."; | "Required arguments missing."; |
|
|
| |
StressTestControllerCommand command=StressTestControllerCommand(); | StressTestControllerCommand command=StressTestControllerCommand(); |
| |
// generate log files and PID files |
// |
|
// Generate log files and PID files |
|
// |
if(!command.generateRequiredFileNames(strTime)) | if(!command.generateRequiredFileNames(strTime)) |
{ | { |
cout<<StressTestControllerCommand::COMMAND_NAME<<"::Failed to generate required files for tests. "<<endl; |
cout<<StressTestControllerCommand::COMMAND_NAME\ |
|
<<"::Failed to generate required files for tests. "<<endl; |
command.removeUnusedFiles(); | command.removeUnusedFiles(); |
exit (Command::RC_ERROR); | exit (Command::RC_ERROR); |
} | } |
|
|
cout<<"Cannot get file "<<command.getStressTestLogFile()<<endl; | cout<<"Cannot get file "<<command.getStressTestLogFile()<<endl; |
command.removeUnusedFiles(); | command.removeUnusedFiles(); |
exit (Command::RC_ERROR); | exit (Command::RC_ERROR); |
|
|
} | } |
strftime(strTime,256,"%d/%m/%Y at %H:%M:%S\n",&tmTime); | strftime(strTime,256,"%d/%m/%Y at %H:%M:%S\n",&tmTime); |
log_file<<StressTestControllerCommand::COMMAND_NAME<<"::Initiated on "<<strTime<<endl; |
log_file<<StressTestControllerCommand::COMMAND_NAME\ |
log_file<<StressTestControllerCommand::COMMAND_NAME<<"::Process ID: "<<getpid()<<endl; |
<<"::Initiated on "<<strTime<<endl; |
|
log_file<<StressTestControllerCommand::COMMAND_NAME\ |
|
<<"::Process ID: "<<getpid()<<endl; |
| |
MessageLoader::setPegasusMsgHomeRelative(argv[0]); |
|
try | try |
{ | { |
log_file<<StressTestControllerCommand::COMMAND_NAME; | log_file<<StressTestControllerCommand::COMMAND_NAME; |
|
|
{ | { |
String msg(cfe.getMessage()); | String msg(cfe.getMessage()); |
| |
log_file << StressTestControllerCommand::COMMAND_NAME << "::" << msg << endl; |
log_file<< StressTestControllerCommand::COMMAND_NAME << "::" \ |
cerr << StressTestControllerCommand::COMMAND_NAME << "::" << msg << endl; |
<< msg << endl; |
|
cerr<< StressTestControllerCommand::COMMAND_NAME << "::"\ |
|
<< msg << endl; |
| |
if (msg.find(String("Unknown flag")) != PEG_NOT_FOUND) | if (msg.find(String("Unknown flag")) != PEG_NOT_FOUND) |
{ | { |
MessageLoaderParms parms(ERR_OPTION_NOT_SUPPORTED_KEY,ERR_OPTION_NOT_SUPPORTED); |
|
parms.msg_src_path = MSG_PATH; |
|
cerr << StressTestControllerCommand::COMMAND_NAME << | cerr << StressTestControllerCommand::COMMAND_NAME << |
": " << MessageLoader::getMessage(parms) << endl; |
"::" << ERR_OPTION_NOT_SUPPORTED << endl; |
log_file<< StressTestControllerCommand::COMMAND_NAME << | log_file<< StressTestControllerCommand::COMMAND_NAME << |
": " << MessageLoader::getMessage(parms) << endl; |
"::" << ERR_OPTION_NOT_SUPPORTED << endl; |
} | } |
else | else |
{ | { |
MessageLoaderParms parms(ERR_USAGE_KEY,ERR_USAGE); |
|
parms.msg_src_path = MSG_PATH; |
|
cerr << StressTestControllerCommand::COMMAND_NAME << | cerr << StressTestControllerCommand::COMMAND_NAME << |
": " << MessageLoader::getMessage(parms) << endl; |
"::" << ERR_USAGE << endl; |
log_file << StressTestControllerCommand::COMMAND_NAME << | log_file << StressTestControllerCommand::COMMAND_NAME << |
": " << MessageLoader::getMessage(parms) << endl; |
"::" << ERR_USAGE << endl; |
} | } |
| |
log_file.close(); | log_file.close(); |
|
|
} | } |
catch(...) | catch(...) |
{ | { |
log_file<<StressTestControllerCommand::COMMAND_NAME<<"::Unknown exception caught when setting commands."<<endl; |
log_file<<StressTestControllerCommand::COMMAND_NAME<< |
cerr<<StressTestControllerCommand::COMMAND_NAME<<"::Unknown exception caught when setting commands."<<endl; |
"::Unknown exception caught when setting commands."<<endl; |
|
cerr<<StressTestControllerCommand::COMMAND_NAME<< |
|
"::Unknown exception caught when setting commands."<<endl; |
log_file.close(); | log_file.close(); |
command.removeUnusedFiles(); | command.removeUnusedFiles(); |
exit (Command::RC_ERROR); | exit (Command::RC_ERROR); |
|
|
{ | { |
// Check for file in default directory as well | // Check for file in default directory as well |
fileName = String::EMPTY; | fileName = String::EMPTY; |
fileName.append(command.pegasusRoot); |
|
fileName.append(StressTestControllerCommand::DEFAULT_CFGDIR); | fileName.append(StressTestControllerCommand::DEFAULT_CFGDIR); |
fileName.append(filename); | fileName.append(filename); |
| |
|
|
command.removeUnusedFiles(); | command.removeUnusedFiles(); |
exit (Command::RC_ERROR); | exit (Command::RC_ERROR); |
} | } |
log_file<<StressTestControllerCommand::COMMAND_NAME<<"::Using config file: "<<fileName<<endl; |
log_file<<StressTestControllerCommand::COMMAND_NAME<< |
|
"::Using config file: "<<fileName<<endl; |
} | } |
else | else |
|
{ |
fileName = filename; | fileName = filename; |
|
} |
| |
log_file<<StressTestControllerCommand::COMMAND_NAME<<"::Using config file: "<<fileName<<endl; |
log_file<<StressTestControllerCommand::COMMAND_NAME<< |
cout<<StressTestControllerCommand::COMMAND_NAME<<"::Using config file: "<<fileName<<endl; |
"::Using config file: "<<fileName<<endl; |
|
cout<<StressTestControllerCommand::COMMAND_NAME<< |
|
"::Using config file: "<<fileName<<endl; |
} | } |
else | else |
{ | { |
|
|
// Use default file in default dir. | // Use default file in default dir. |
// | // |
fileName = String::EMPTY; | fileName = String::EMPTY; |
fileName.append(command.pegasusRoot); |
|
fileName.append(StressTestControllerCommand::DEFAULT_CFGDIR); | fileName.append(StressTestControllerCommand::DEFAULT_CFGDIR); |
fileName.append(StressTestControllerCommand::FILENAME); | fileName.append(StressTestControllerCommand::FILENAME); |
// | // |
|
|
// | // |
if(useDefaults) | if(useDefaults) |
{ | { |
log_file<<StressTestControllerCommand::COMMAND_NAME<<"::Using hard coded default config values."<<endl; |
log_file<<StressTestControllerCommand::COMMAND_NAME<< |
cout<<StressTestControllerCommand::COMMAND_NAME<<"::Using hard coded default config values."<<endl; |
"::Using hard coded default config values."<<endl; |
|
cout<<StressTestControllerCommand::COMMAND_NAME<< |
|
"::Using hard coded default config values."<<endl; |
command.getDefaultClients(log_file); | command.getDefaultClients(log_file); |
} | } |
else | else |
|
|
{ | { |
String msg(e.getMessage()); | String msg(e.getMessage()); |
| |
log_file << StressTestControllerCommand::COMMAND_NAME << ": " << msg << endl; |
log_file << StressTestControllerCommand::COMMAND_NAME << |
cerr << StressTestControllerCommand::COMMAND_NAME << ": " << msg << endl; |
": " << msg << endl; |
|
cerr << StressTestControllerCommand::COMMAND_NAME << |
|
": " << msg << endl; |
log_file.close(); | log_file.close(); |
command.removeUnusedFiles(); | command.removeUnusedFiles(); |
exit (Command::RC_ERROR); | exit (Command::RC_ERROR); |
|
|
catch(Exception& e ) | catch(Exception& e ) |
{ | { |
String msg(e.getMessage()); | String msg(e.getMessage()); |
log_file << StressTestControllerCommand::COMMAND_NAME << "::" << msg << endl; |
log_file << StressTestControllerCommand::COMMAND_NAME << |
cerr << StressTestControllerCommand::COMMAND_NAME << "::Invalid Configuration "; |
"::" << msg << endl; |
|
cerr << StressTestControllerCommand::COMMAND_NAME << |
|
"::Invalid Configuration "; |
cerr << "in File: " << fileName << endl; | cerr << "in File: " << fileName << endl; |
cerr << msg << endl; | cerr << msg << endl; |
log_file.close(); | log_file.close(); |
|
|
catch(...) | catch(...) |
{ | { |
// throw what was caught | // throw what was caught |
log_file<<StressTestControllerCommand::COMMAND_NAME<<"::Unknown exception caught when acquiring configuration."<<endl; |
log_file<<StressTestControllerCommand::COMMAND_NAME<< |
cerr<<StressTestControllerCommand::COMMAND_NAME<<"::Unknown exception caught when acquiring configuration."<<endl; |
"::Unknown exception caught when acquiring configuration."<<endl; |
|
cerr<<StressTestControllerCommand::COMMAND_NAME<< |
|
"::Unknown exception caught when acquiring configuration."<<endl; |
log_file.close(); | log_file.close(); |
command.removeUnusedFiles(); | command.removeUnusedFiles(); |
exit (Command::RC_ERROR); | exit (Command::RC_ERROR); |
} | } |
| |
log_file << StressTestControllerCommand::COMMAND_NAME << "::Generating Client Commands"<< endl; |
log_file << StressTestControllerCommand::COMMAND_NAME << |
|
"::Generating Client Commands"<< endl; |
if(verboseEnabled) | if(verboseEnabled) |
cout << StressTestControllerCommand::COMMAND_NAME << "::Generating Client Commands"<< endl; |
{ |
|
cout << StressTestControllerCommand::COMMAND_NAME << |
|
"::Generating Client Commands"<< endl; |
|
} |
| |
// | // |
// TimeStamp | // TimeStamp |
// | // |
log_file<<StressTestControllerCommand::COMMAND_NAME<<"::Initiated on "<<strTime<<endl; |
log_file<<StressTestControllerCommand::COMMAND_NAME<< |
log_file<<StressTestControllerCommand::COMMAND_NAME<<"::Process ID: "<<getpid()<<endl; |
"::Initiated on "<<strTime<<endl; |
cout<<StressTestControllerCommand::COMMAND_NAME<<"::Initiated on "<<strTime<<endl; |
log_file<<StressTestControllerCommand::COMMAND_NAME<< |
cout<<StressTestControllerCommand::COMMAND_NAME<<"::Process ID: "<<getpid()<<endl; |
"::Process ID: "<<getpid()<<endl; |
|
cout<<StressTestControllerCommand::COMMAND_NAME<< |
|
"::Initiated on "<<strTime<<endl; |
|
cout<<StressTestControllerCommand::COMMAND_NAME<< |
|
"::Process ID: "<<getpid()<<endl; |
| |
if(!command.generateClientCommands(log_file)) | if(!command.generateClientCommands(log_file)) |
{ | { |
cerr << StressTestControllerCommand::COMMAND_NAME << "::Failed to Generate Client Commands."<< endl; |
cerr << StressTestControllerCommand::COMMAND_NAME << |
log_file << StressTestControllerCommand::COMMAND_NAME << "::Failed to Generate Client Commands."<< endl; |
"::Failed to Generate Client Commands."<< endl; |
|
log_file << StressTestControllerCommand::COMMAND_NAME << |
|
"::Failed to Generate Client Commands."<< endl; |
log_file.close(); | log_file.close(); |
command.removeUnusedFiles(); | command.removeUnusedFiles(); |
exit (Command::RC_ERROR); | exit (Command::RC_ERROR); |
} | } |
|
|
// | // |
// Getting current time | // Getting current time |
// | // |
|
|
strftime(strTime,256,"%d/%m/%Y at %H:%M:%S\n",&tmTime); | strftime(strTime,256,"%d/%m/%Y at %H:%M:%S\n",&tmTime); |
log_file << StressTestControllerCommand::COMMAND_NAME <<endl; | log_file << StressTestControllerCommand::COMMAND_NAME <<endl; |
log_file << " Preparing to execute Clients on "<<strTime<<endl; | log_file << " Preparing to execute Clients on "<<strTime<<endl; |
|
|
// Begin to run stress Tests | // Begin to run stress Tests |
rc = command.execute (cout, cerr); | rc = command.execute (cout, cerr); |
|
|
// | // |
// Getting current time after stress Tests are completed | // Getting current time after stress Tests are completed |
// | // |
tmTime = getCurrentActualTime(); | tmTime = getCurrentActualTime(); |
|
|
strftime(strTime,256,"%d/%m/%Y at %H:%M:%S\n",&tmTime); | strftime(strTime,256,"%d/%m/%Y at %H:%M:%S\n",&tmTime); |
|
|
// | // |
// Check overall status of tests | // Check overall status of tests |
// | // |
|
|
cout << StressTestControllerCommand::COMMAND_NAME; | cout << StressTestControllerCommand::COMMAND_NAME; |
cout << "::successfully completed on "<<strTime<<endl; | cout << "::successfully completed on "<<strTime<<endl; |
} | } |
|
cout <<"IMPORTANT: "; |
|
cout <<"Please check the Controller and the Client log file" |
|
<<endl; |
|
cout <<" for individual errors which may or may not have caused" |
|
<<endl; |
|
cout <<" a stress test failure. "<< endl; |
|
cout <<" Log Directory:"<<endl; |
|
cout <<" "<< |
|
FileSystem::extractFilePath(command.getStressTestLogFile())<<endl; |
|
cout <<"\n Controller log: "<< |
|
FileSystem::extractFileName(command.getStressTestLogFile())<<endl; |
|
cout <<" Client log: "<< |
|
FileSystem::extractFileName(command.getStressClientLogFile())<<endl; |
log_file.close(); | log_file.close(); |
exit (rc); | exit (rc); |
return rc; | return rc; |
} |
} /* main */ |