tst_qtcprocess: Add testPipe

Change-Id: I5b54231d201960eb6909780e4a2c5b9860b7e523
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Jarek Kobus
2023-01-23 13:14:35 +01:00
parent 5fcf6fc5a4
commit 01828cfd8e

View File

@@ -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"