From 47bcb6385423374c19c3b830b7c16d6de0714fc6 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 8 Mar 2022 00:28:34 +0100 Subject: [PATCH] Add new types of blocking processes Change-Id: I7668d0ac94a4e949f7ea67d8a1c0c144af5bd541 Reviewed-by: Eike Ziller Reviewed-by: Qt CI Bot Reviewed-by: --- .../auto/utils/qtcprocess/tst_qtcprocess.cpp | 47 +++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp index c4ad1563c14..d81790b45d3 100644 --- a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp +++ b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp @@ -198,6 +198,7 @@ private slots: void notRunningAfterStartingNonExistingProgram(); void processChannelForwarding_data(); void processChannelForwarding(); + void killBlockingProcess_data(); void killBlockingProcess(); void flushFinishedWhileWaitingForReadyRead(); @@ -1223,16 +1224,56 @@ protected: bool MessageHandler::ok = true; QtMessageHandler MessageHandler::oldMessageHandler = 0; +enum class BlockType { + EndlessLoop, + InfiniteSleep, + MutexDeadlock, + EventLoop +}; + void tst_QtcProcess::KillBlockingProcess::main() { std::cout << "Blocking process successfully executed." << std::endl; - while (true) - ; + const BlockType blockType = BlockType(qEnvironmentVariableIntValue(envVar())); + switch (blockType) { + case BlockType::EndlessLoop: + while (true) + ; + break; + case BlockType::InfiniteSleep: + QThread::sleep(INT_MAX); + break; + case BlockType::MutexDeadlock: { + QMutex mutex; + mutex.lock(); + mutex.lock(); + break; + } + case BlockType::EventLoop: { + QEventLoop loop; + loop.exec(); + break; + } + + } + exit(1); +} + +void tst_QtcProcess::killBlockingProcess_data() +{ + QTest::addColumn("blockType"); + + QTest::newRow("EndlessLoop") << BlockType::EndlessLoop; + QTest::newRow("InfiniteSleep") << BlockType::InfiniteSleep; + QTest::newRow("MutexDeadlock") << BlockType::MutexDeadlock; + QTest::newRow("EventLoop") << BlockType::EventLoop; } void tst_QtcProcess::killBlockingProcess() { - SubCreatorConfig subConfig(KillBlockingProcess::envVar(), {}); + QFETCH(BlockType, blockType); + + SubCreatorConfig subConfig(KillBlockingProcess::envVar(), QString::number(int(blockType))); MessageHandler msgHandler; {