Unit tests: use WSD's main socket-poll for test timeouts.

This commit is contained in:
Michael Meeks
2017-03-16 18:52:49 +00:00
parent 2c14723e58
commit ab67d605e6
3 changed files with 19 additions and 6 deletions

View File

@ -69,7 +69,7 @@ bool UnitBase::init(UnitType type, const std::string &unitLibPath)
if (!unitLibPath.empty())
{
Global = linkAndCreateUnit(type, unitLibPath);
if (Global)
if (Global && type == UnitType::Kit)
{
TimeoutThread.startFunc([](){
Poco::Thread::trySleep(Global->_timeoutMilliSeconds);
@ -184,6 +184,7 @@ void UnitBase::exitTest(TestResult result)
Poco::Util::Application::EXIT_OK :
Poco::Util::Application::EXIT_SOFTWARE;
TerminationFlag = true;
SocketPoll::wakeupWorld();
}
void UnitBase::timeout()

View File

@ -59,9 +59,6 @@ protected:
/// After this time we invoke 'timeout' default 30 seconds
void setTimeout(int timeoutMilliSeconds);
/// If the test times out this gets invoked, the default just exits.
virtual void timeout();
enum class TestResult
{
Failed,
@ -98,6 +95,14 @@ public:
return false;
}
/// If the test times out this gets invoked, the default just exits.
virtual void timeout();
int getTimeoutMilliSeconds() const
{
return _timeoutMilliSeconds;
}
static UnitBase& get()
{
assert(Global);

View File

@ -2518,14 +2518,21 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/)
time_t startTimeSpan = time(nullptr);
#endif
/// Something of a hack to get woken up on exit.
auto startStamp = std::chrono::steady_clock::now();
/// The main-poll does next to nothing:
SocketPoll mainWait("main");
while (!TerminationFlag && !ShutdownRequestFlag)
{
UnitWSD::get().invokeTest();
mainWait.poll(SocketPoll::DefaultPollTimeoutMs * 10);
mainWait.poll(SocketPoll::DefaultPollTimeoutMs * 2);
// Unit test timeout
if (std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::steady_clock::now() - startStamp).count() <
UnitWSD::get().getTimeoutMilliSeconds())
UnitWSD::get().timeout();
std::unique_lock<std::mutex> docBrokersLock(DocBrokersMutex);
cleanupDocBrokers();