| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*============================================================================
- CMake - Cross Platform Makefile Generator
- Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
- ============================================================================*/
- #include "cmCTestBatchTestHandler.h"
- #include "cmProcess.h"
- #include "cmStandardIncludes.h"
- #include "cmCTest.h"
- #include "cmSystemTools.h"
- #include <stdlib.h>
- cmCTestBatchTestHandler::~cmCTestBatchTestHandler()
- {
- }
- //---------------------------------------------------------
- void cmCTestBatchTestHandler::RunTests()
- {
- this->WriteBatchScript();
- this->SubmitBatchScript();
- }
- //---------------------------------------------------------
- void cmCTestBatchTestHandler::WriteBatchScript()
- {
- this->Script = this->CTest->GetBinaryDir()
- + "/Testing/CTestBatch.txt";
- std::fstream fout;
- fout.open(this->Script.c_str(), std::ios::out);
- fout << "#!/bin/sh\n";
- for(TestMap::iterator i = this->Tests.begin(); i != this->Tests.end(); ++i)
- {
- this->WriteSrunArgs(i->first, fout);
- this->WriteTestCommand(i->first, fout);
- fout << "\n";
- }
- fout.flush();
- fout.close();
- }
- //---------------------------------------------------------
- void cmCTestBatchTestHandler::WriteSrunArgs(int test, std::fstream& fout)
- {
- cmCTestTestHandler::cmCTestTestProperties* properties =
- this->Properties[test];
- fout << "srun ";
- //fout << "--jobid=" << test << " ";
- fout << "-J=" << properties->Name << " ";
- //Write dependency information
- /*if(this->Tests[test].size() > 0)
- {
- fout << "-P=afterany";
- for(TestSet::iterator i = this->Tests[test].begin();
- i != this->Tests[test].end(); ++i)
- {
- fout << ":" << *i;
- }
- fout << " ";
- }*/
- if(properties->RunSerial)
- {
- fout << "--exclusive ";
- }
- if(properties->Processors > 1)
- {
- fout << "-n" << properties->Processors << " ";
- }
- }
- //---------------------------------------------------------
- void cmCTestBatchTestHandler::WriteTestCommand(int test, std::fstream& fout)
- {
- std::vector<std::string> args = this->Properties[test]->Args;
- std::vector<std::string> processArgs;
- std::string command;
- command = this->TestHandler->FindTheExecutable(args[1].c_str());
- command = cmSystemTools::ConvertToOutputPath(command.c_str());
- //Prepends memcheck args to our command string if this is a memcheck
- this->TestHandler->GenerateTestCommand(processArgs, test);
- processArgs.push_back(command);
- for(std::vector<std::string>::iterator arg = processArgs.begin();
- arg != processArgs.end(); ++arg)
- {
- fout << *arg << " ";
- }
- std::vector<std::string>::iterator i = args.begin();
- ++i; //the test name
- ++i; //the executable (command)
- if(args.size() > 2)
- {
- fout << "'";
- }
- while(i != args.end())
- {
- fout << "\"" << *i << "\""; //args to the test executable
- ++i;
- if(i == args.end() && args.size() > 2)
- {
- fout << "'";
- }
- fout << " ";
- }
- //TODO ZACH build TestResult.FullCommandLine
- //this->TestResult.FullCommandLine = this->TestCommand;
- }
- //---------------------------------------------------------
- void cmCTestBatchTestHandler::SubmitBatchScript()
- {
- cmProcess sbatch;
- std::vector<std::string> args;
- args.push_back(this->Script);
- args.push_back("-o");
- args.push_back(this->CTest->GetBinaryDir()
- + "/Testing/CTestBatch.txt");
- sbatch.SetCommand("sbatch");
- sbatch.SetCommandArguments(args);
- /*if(sbatch.StartProcess())
- {
- //success condition
- }
- else
- {
- //fail condition
- }*/
- }
|