From 5de5f1cf0a957c3a81bd55d4021c84041250f024 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 21 Mar 2022 16:24:22 +0100 Subject: [PATCH] QtcProcess: Add a test for crashing app Ensure that when waitForFinished() didn't timeout but the process has terminated, it returns true, like QProcess does, in contrary to what QProcess' documentation says. Change-Id: I6af5034f4df7fc2e14a83bab74334a8abefe7a0f Reviewed-by: Reviewed-by: Alessandro Portale Reviewed-by: Eike Ziller --- .../auto/utils/qtcprocess/tst_qtcprocess.cpp | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp index 8e3ee778bc3..b53d0d05b91 100644 --- a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp +++ b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp @@ -202,6 +202,7 @@ private slots: void killBlockingProcess(); void flushFinishedWhileWaitingForReadyRead(); void emitOneErrorOnCrash(); + void crashAfterOneSecond(); void cleanupTestCase(); @@ -221,6 +222,7 @@ private: SUB_CREATOR_PROCESS(SubProcessChannelForwarding); SUB_CREATOR_PROCESS(KillBlockingProcess); SUB_CREATOR_PROCESS(EmitOneErrorOnCrash); + SUB_CREATOR_PROCESS(CrashAfterOneSecond); // In order to get a value associated with the certain subprocess use SubProcessClass::envVar(). // The classes above define different custom executables. Inside initTestCase() @@ -1339,6 +1341,28 @@ void tst_QtcProcess::emitOneErrorOnCrash() QCOMPARE(errorCount, 1); } +void tst_QtcProcess::CrashAfterOneSecond::main() +{ + QThread::sleep(1); + abort(); +} + +void tst_QtcProcess::crashAfterOneSecond() +{ + SubCreatorConfig subConfig(CrashAfterOneSecond::envVar(), {}); + TestProcess process; + subConfig.setupSubProcess(&process); + + process.start(); + QVERIFY(process.waitForStarted(1000)); + QElapsedTimer timer; + timer.start(); + // Please note that QProcess documentation says it should return false, but apparently + // it doesn't (try running this test with QTC_USE_QPROCESS=) + QVERIFY(process.waitForFinished(2000)); + QVERIFY(timer.elapsed() < 2000); +} + QTEST_MAIN(tst_QtcProcess) #include "tst_qtcprocess.moc"