2016-09-27 22:01:08 +03:00
|
|
|
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
2008-07-03 17:31:33 +04:00
|
|
|
#ifndef cmCTestMultiProcessHandler_h
|
|
|
|
#define cmCTestMultiProcessHandler_h
|
|
|
|
|
2016-08-24 23:01:40 +03:00
|
|
|
#include <cmConfigure.h> // IWYU pragma: keep
|
|
|
|
|
2008-07-03 17:31:33 +04:00
|
|
|
#include <cmCTestTestHandler.h>
|
2016-08-24 23:01:40 +03:00
|
|
|
#include <map>
|
|
|
|
#include <set>
|
|
|
|
#include <stddef.h>
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
2016-04-29 16:40:20 +03:00
|
|
|
|
2016-08-24 23:01:40 +03:00
|
|
|
class cmCTest;
|
|
|
|
class cmCTestRunTest;
|
2008-07-03 17:31:33 +04:00
|
|
|
|
|
|
|
/** \class cmCTestMultiProcessHandler
|
|
|
|
* \brief run parallel ctest
|
|
|
|
*
|
2012-08-13 21:42:58 +04:00
|
|
|
* cmCTestMultiProcessHandler
|
2008-07-03 17:31:33 +04:00
|
|
|
*/
|
2012-08-13 21:42:58 +04:00
|
|
|
class cmCTestMultiProcessHandler
|
2008-07-03 17:31:33 +04:00
|
|
|
{
|
2010-07-01 22:10:49 +04:00
|
|
|
friend class TestComparator;
|
2016-05-16 17:34:04 +03:00
|
|
|
|
2008-07-03 17:31:33 +04:00
|
|
|
public:
|
2016-05-16 17:34:04 +03:00
|
|
|
struct TestSet : public std::set<int>
|
|
|
|
{
|
|
|
|
};
|
|
|
|
struct TestMap : public std::map<int, TestSet>
|
|
|
|
{
|
|
|
|
};
|
|
|
|
struct TestList : public std::vector<int>
|
|
|
|
{
|
|
|
|
};
|
|
|
|
struct PropertiesMap
|
|
|
|
: public std::map<int, cmCTestTestHandler::cmCTestTestProperties*>
|
|
|
|
{
|
|
|
|
};
|
2009-08-26 20:09:06 +04:00
|
|
|
|
2008-07-03 17:31:33 +04:00
|
|
|
cmCTestMultiProcessHandler();
|
2009-09-10 19:16:08 +04:00
|
|
|
virtual ~cmCTestMultiProcessHandler();
|
2008-07-03 17:31:33 +04:00
|
|
|
// Set the tests
|
2009-09-09 01:10:35 +04:00
|
|
|
void SetTests(TestMap& tests, PropertiesMap& properties);
|
2008-07-03 17:31:33 +04:00
|
|
|
// Set the max number of tests that can be run at the same time.
|
|
|
|
void SetParallelLevel(size_t);
|
2015-06-09 15:50:44 +03:00
|
|
|
void SetTestLoad(unsigned long load);
|
2009-09-10 19:16:08 +04:00
|
|
|
virtual void RunTests();
|
2009-08-28 19:08:39 +04:00
|
|
|
void PrintTestList();
|
2010-08-31 18:41:23 +04:00
|
|
|
void PrintLabels();
|
2009-09-02 18:08:40 +04:00
|
|
|
|
2014-02-10 09:21:34 +04:00
|
|
|
void SetPassFailVectors(std::vector<std::string>* passed,
|
|
|
|
std::vector<std::string>* failed)
|
2016-05-16 17:34:04 +03:00
|
|
|
{
|
2009-09-02 18:08:40 +04:00
|
|
|
this->Passed = passed;
|
|
|
|
this->Failed = failed;
|
2016-05-16 17:34:04 +03:00
|
|
|
}
|
2008-07-03 17:31:33 +04:00
|
|
|
void SetTestResults(std::vector<cmCTestTestHandler::cmCTestTestResult>* r)
|
2016-05-16 17:34:04 +03:00
|
|
|
{
|
|
|
|
this->TestResults = r;
|
|
|
|
}
|
2009-08-26 20:09:06 +04:00
|
|
|
|
2016-05-16 17:34:04 +03:00
|
|
|
void SetCTest(cmCTest* ctest) { this->CTest = ctest; }
|
2009-08-26 20:09:06 +04:00
|
|
|
|
2016-05-16 17:34:04 +03:00
|
|
|
void SetTestHandler(cmCTestTestHandler* handler)
|
|
|
|
{
|
|
|
|
this->TestHandler = handler;
|
|
|
|
}
|
2009-08-26 20:09:06 +04:00
|
|
|
|
2016-05-16 17:34:04 +03:00
|
|
|
cmCTestTestHandler* GetTestHandler() { return this->TestHandler; }
|
2015-02-17 22:23:56 +03:00
|
|
|
|
|
|
|
void SetQuiet(bool b) { this->Quiet = b; }
|
2010-03-02 23:34:37 +03:00
|
|
|
protected:
|
2008-07-03 17:31:33 +04:00
|
|
|
// Start the next test or tests as many as are allowed by
|
|
|
|
// ParallelLevel
|
|
|
|
void StartNextTests();
|
|
|
|
void StartTestProcess(int test);
|
|
|
|
bool StartTest(int test);
|
2009-08-27 18:37:30 +04:00
|
|
|
// Mark the checkpoint for the given test
|
|
|
|
void WriteCheckpoint(int index);
|
2010-02-26 00:23:49 +03:00
|
|
|
|
|
|
|
void UpdateCostData();
|
2009-09-09 01:10:35 +04:00
|
|
|
void ReadCostData();
|
2010-02-26 00:23:49 +03:00
|
|
|
// Return index of a test based on its name
|
2016-05-26 22:58:51 +03:00
|
|
|
int SearchByName(std::string const& name);
|
2010-02-26 00:23:49 +03:00
|
|
|
|
2009-09-09 01:10:35 +04:00
|
|
|
void CreateTestCostList();
|
2013-12-21 01:44:37 +04:00
|
|
|
|
|
|
|
void GetAllTestDependencies(int test, TestList& dependencies);
|
|
|
|
void CreateSerialTestCostList();
|
|
|
|
|
|
|
|
void CreateParallelTestCostList();
|
|
|
|
|
2009-08-27 18:37:30 +04:00
|
|
|
// Removes the checkpoint file
|
|
|
|
void MarkFinished();
|
2009-09-08 21:39:13 +04:00
|
|
|
void EraseTest(int index);
|
2008-07-03 17:31:33 +04:00
|
|
|
// Return true if there are still tests running
|
|
|
|
// check all running processes for output and exit case
|
|
|
|
bool CheckOutput();
|
2009-08-27 18:37:30 +04:00
|
|
|
void RemoveTest(int index);
|
2016-05-16 17:34:04 +03:00
|
|
|
// Check if we need to resume an interrupted test set
|
2009-08-27 18:37:30 +04:00
|
|
|
void CheckResume();
|
2016-05-16 17:34:04 +03:00
|
|
|
// Check if there are any circular dependencies
|
2009-11-02 20:52:50 +03:00
|
|
|
bool CheckCycles();
|
2009-09-02 18:08:40 +04:00
|
|
|
int FindMaxIndex();
|
2009-09-07 18:26:17 +04:00
|
|
|
inline size_t GetProcessorsUsed(int index);
|
2015-06-09 15:50:44 +03:00
|
|
|
std::string GetName(int index);
|
2010-03-02 23:34:37 +03:00
|
|
|
|
|
|
|
void LockResources(int index);
|
|
|
|
void UnlockResources(int index);
|
2008-07-03 17:31:33 +04:00
|
|
|
// map from test number to set of depend tests
|
2008-07-04 18:28:22 +04:00
|
|
|
TestMap Tests;
|
2010-07-01 22:10:49 +04:00
|
|
|
TestList SortedTests;
|
2016-05-16 17:34:04 +03:00
|
|
|
// Total number of tests we'll be running
|
2009-08-31 17:50:35 +04:00
|
|
|
size_t Total;
|
2016-05-16 17:34:04 +03:00
|
|
|
// Number of tests that are complete
|
2009-08-31 17:50:35 +04:00
|
|
|
size_t Completed;
|
2009-09-07 18:26:17 +04:00
|
|
|
size_t RunningCount;
|
2010-06-15 18:29:35 +04:00
|
|
|
bool StopTimePassed;
|
2016-05-16 17:34:04 +03:00
|
|
|
// list of test properties (indices concurrent to the test map)
|
2009-08-26 20:09:06 +04:00
|
|
|
PropertiesMap Properties;
|
2008-07-03 17:31:33 +04:00
|
|
|
std::map<int, bool> TestRunningMap;
|
|
|
|
std::map<int, bool> TestFinishMap;
|
2014-02-10 09:21:34 +04:00
|
|
|
std::map<int, std::string> TestOutput;
|
|
|
|
std::vector<std::string>* Passed;
|
|
|
|
std::vector<std::string>* Failed;
|
2010-03-01 19:59:00 +03:00
|
|
|
std::vector<std::string> LastTestsFailed;
|
2010-03-02 23:34:37 +03:00
|
|
|
std::set<std::string> LockedResources;
|
2008-07-03 17:31:33 +04:00
|
|
|
std::vector<cmCTestTestHandler::cmCTestTestResult>* TestResults;
|
|
|
|
size_t ParallelLevel; // max number of process that can be run at once
|
2015-06-09 15:50:44 +03:00
|
|
|
unsigned long TestLoad;
|
2016-05-16 17:34:04 +03:00
|
|
|
std::set<cmCTestRunTest*> RunningTests; // current running tests
|
|
|
|
cmCTestTestHandler* TestHandler;
|
2010-03-01 19:59:00 +03:00
|
|
|
cmCTest* CTest;
|
2013-10-19 11:28:18 +04:00
|
|
|
bool HasCycles;
|
2015-02-17 22:23:56 +03:00
|
|
|
bool Quiet;
|
2015-06-01 16:42:44 +03:00
|
|
|
bool SerialTestRunning;
|
2008-07-03 17:31:33 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|