From 01828cfd8e47f6c612f83680b65710863167a209 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 23 Jan 2023 13:14:35 +0100 Subject: [PATCH] tst_qtcprocess: Add testPipe Change-Id: I5b54231d201960eb6909780e4a2c5b9860b7e523 Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: Marcus Tillmanns --- .../auto/utils/qtcprocess/tst_qtcprocess.cpp | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp index 62f93bca0cf..a26924089e0 100644 --- a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp +++ b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp @@ -134,6 +134,7 @@ private slots: void recursiveBlockingProcess(); void quitBlockingProcess_data(); void quitBlockingProcess(); + void tarPipe(); void cleanupTestCase(); @@ -1439,6 +1440,60 @@ void tst_QtcProcess::quitBlockingProcess() } } +void tst_QtcProcess::tarPipe() +{ + if (!FilePath::fromString("tar").searchInPath().isExecutableFile()) + QSKIP("This test uses \"tar\" command."); + + QtcProcess sourceProcess; + QtcProcess targetProcess; + + targetProcess.setProcessMode(ProcessMode::Writer); + + QObject::connect(&sourceProcess, &QtcProcess::readyReadStandardOutput, + &targetProcess, [&sourceProcess, &targetProcess]() { + targetProcess.writeRaw(sourceProcess.readAllRawStandardOutput()); + }); + + QTemporaryDir sourceDir; + QVERIFY(sourceDir.isValid()); + QTemporaryDir destinationDir; + QVERIFY(destinationDir.isValid()); + + const FilePath sourcePath = FilePath::fromString(sourceDir.path()); + const FilePath sourceArchive = sourcePath / "archive"; + QVERIFY(sourceArchive.createDir()); + const FilePath sourceFile = sourceArchive / "file1.txt"; + QVERIFY(sourceFile.writeFileContents("bla bla")); + + const FilePath destinationPath = FilePath::fromString(destinationDir.path()); + const FilePath destinationArchive = destinationPath / "archive"; + const FilePath destinationFile = destinationArchive / "file1.txt"; + + QVERIFY(!destinationArchive.exists()); + QVERIFY(!destinationFile.exists()); + + sourceProcess.setCommand({"tar", {"cvf", "-", "-C", sourcePath.nativePath(), "."}}); + targetProcess.setCommand({"tar", {"xvf", "-", "-C", destinationPath.nativePath()}}); + + targetProcess.start(); + QVERIFY(targetProcess.waitForStarted()); + + sourceProcess.start(); + QVERIFY(sourceProcess.waitForFinished()); + + if (targetProcess.isRunning()) { + targetProcess.closeWriteChannel(); + QVERIFY(targetProcess.waitForFinished(2000)); + } + + QCOMPARE(targetProcess.exitCode(), 0); + QCOMPARE(targetProcess.result(), ProcessResult::FinishedWithSuccess); + QVERIFY(destinationArchive.exists()); + QVERIFY(destinationFile.exists()); + QCOMPARE(sourceFile.fileSize(), destinationFile.fileSize()); +} + QTEST_GUILESS_MAIN(tst_QtcProcess) #include "tst_qtcprocess.moc"