Qnx: Reuse setExtraCommandsToTest()

Change-Id: I09e6160c1cbff9d74ac1ad3e824a0137d5964aae
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2022-11-24 08:16:00 +01:00
parent 6dc1a1e98f
commit fbe8d85401
2 changed files with 32 additions and 83 deletions

View File

@@ -22,10 +22,13 @@ QnxDeviceTester::QnxDeviceTester(QObject *parent)
connect(m_genericTester, &DeviceTester::finished, connect(m_genericTester, &DeviceTester::finished,
this, &QnxDeviceTester::handleGenericTestFinished); this, &QnxDeviceTester::handleGenericTestFinished);
connect(&m_process, &QtcProcess::done, this, &QnxDeviceTester::handleProcessDone); connect(&m_varRunProcess, &QtcProcess::done, this, &QnxDeviceTester::handleVarRunDone);
}
m_commandsToTest = { void QnxDeviceTester::testDevice(const ProjectExplorer::IDevice::Ptr &deviceConfiguration)
"awk", {
QTC_ASSERT(m_state == Inactive, return);
static const QStringList s_commandsToTest = {"awk",
"cat", "cat",
"cut", "cut",
"df", "df",
@@ -41,15 +44,14 @@ QnxDeviceTester::QnxDeviceTester(QObject *parent)
"sed", "sed",
"sleep", "sleep",
"tail", "tail",
"uname" "uname"};
};
}
void QnxDeviceTester::testDevice(const ProjectExplorer::IDevice::Ptr &deviceConfiguration)
{
QTC_ASSERT(m_state == Inactive, return);
m_deviceConfiguration = deviceConfiguration; m_deviceConfiguration = deviceConfiguration;
m_state = GenericTest; m_state = GenericTest;
QnxDevice::ConstPtr qnxDevice = m_deviceConfiguration.dynamicCast<const QnxDevice>();
m_genericTester->setExtraCommandsToTest(
s_commandsToTest + versionSpecificCommandsToTest(qnxDevice->qnxVersion()));
m_genericTester->testDevice(deviceConfiguration); m_genericTester->testDevice(deviceConfiguration);
} }
@@ -77,70 +79,23 @@ void QnxDeviceTester::handleGenericTestFinished(TestResult result)
const CommandLine cmd {m_deviceConfiguration->filePath("/bin/sh"), const CommandLine cmd {m_deviceConfiguration->filePath("/bin/sh"),
{"-c", QLatin1String("rm %1 > /dev/null 2>&1; echo ABC > %1 && rm %1") {"-c", QLatin1String("rm %1 > /dev/null 2>&1; echo ABC > %1 && rm %1")
.arg("/var/run/qtc_xxxx.pid")}}; .arg("/var/run/qtc_xxxx.pid")}};
m_process.setCommand(cmd); m_varRunProcess.setCommand(cmd);
m_process.start(); m_varRunProcess.start();
}
void QnxDeviceTester::handleProcessDone()
{
if (m_state == VarRunTest)
handleVarRunDone();
else if (m_state == CommandsTest)
handleCommandDone();
else
QTC_CHECK(false);
} }
void QnxDeviceTester::handleVarRunDone() void QnxDeviceTester::handleVarRunDone()
{ {
if (m_process.result() == ProcessResult::FinishedWithSuccess) { if (m_varRunProcess.result() == ProcessResult::FinishedWithSuccess) {
emit progressMessage(Tr::tr("Files can be created in /var/run.") + '\n'); emit progressMessage(Tr::tr("Files can be created in /var/run.") + '\n');
} else { } else {
m_result = TestFailure; m_result = TestFailure;
const QString message = m_process.result() == ProcessResult::StartFailed const QString message = m_varRunProcess.result() == ProcessResult::StartFailed
? Tr::tr("An error occurred while checking that files can be created in /var/run.") ? Tr::tr("An error occurred while checking that files can be created in /var/run.")
+ '\n' + m_process.errorString() + '\n' + m_varRunProcess.errorString()
: Tr::tr("Files cannot be created in /var/run."); : Tr::tr("Files cannot be created in /var/run.");
emit errorMessage(message + '\n'); emit errorMessage(message + '\n');
} }
setFinished(m_result);
QnxDevice::ConstPtr qnxDevice = m_deviceConfiguration.dynamicCast<const QnxDevice>();
m_commandsToTest.append(versionSpecificCommandsToTest(qnxDevice->qnxVersion()));
testNextCommand();
}
void QnxDeviceTester::handleCommandDone()
{
const QString command = m_commandsToTest[m_currentCommandIndex];
if (m_process.result() == ProcessResult::FinishedWithSuccess) {
emit progressMessage(Tr::tr("%1 found.").arg(command) + '\n');
} else {
m_result = TestFailure;
const QString message = m_process.result() == ProcessResult::StartFailed
? Tr::tr("An error occurred while checking for %1.").arg(command)
+ '\n' + m_process.errorString()
: Tr::tr("%1 not found.").arg(command);
emit errorMessage(message + '\n');
}
++m_currentCommandIndex;
testNextCommand();
}
void QnxDeviceTester::testNextCommand()
{
m_state = CommandsTest;
m_process.close();
if (m_commandsToTest.size() == m_currentCommandIndex) {
setFinished(TestSuccess);
return;
}
const QString command = m_commandsToTest[m_currentCommandIndex];
emit progressMessage(Tr::tr("Checking for %1...").arg(command));
m_process.setCommand({m_deviceConfiguration->filePath("command"), {"-v", command}});
m_process.start();
} }
void QnxDeviceTester::setFinished(TestResult result) void QnxDeviceTester::setFinished(TestResult result)
@@ -149,7 +104,7 @@ void QnxDeviceTester::setFinished(TestResult result)
m_result = result; m_result = result;
m_state = Inactive; m_state = Inactive;
disconnect(m_genericTester, nullptr, this, nullptr); disconnect(m_genericTester, nullptr, this, nullptr);
m_process.close(); m_varRunProcess.close();
emit finished(m_result); emit finished(m_result);
} }

View File

@@ -25,16 +25,12 @@ private:
enum State { enum State {
Inactive, Inactive,
GenericTest, GenericTest,
VarRunTest, VarRunTest
CommandsTest
}; };
void handleGenericTestFinished(ProjectExplorer::DeviceTester::TestResult result); void handleGenericTestFinished(ProjectExplorer::DeviceTester::TestResult result);
void handleProcessDone();
void handleVarRunDone(); void handleVarRunDone();
void handleCommandDone();
void testNextCommand();
void setFinished(ProjectExplorer::DeviceTester::TestResult result); void setFinished(ProjectExplorer::DeviceTester::TestResult result);
QStringList versionSpecificCommandsToTest(int versionNumber) const; QStringList versionSpecificCommandsToTest(int versionNumber) const;
@@ -44,9 +40,7 @@ private:
ProjectExplorer::DeviceTester::TestResult m_result = TestSuccess; ProjectExplorer::DeviceTester::TestResult m_result = TestSuccess;
State m_state = Inactive; State m_state = Inactive;
int m_currentCommandIndex = 0; Utils::QtcProcess m_varRunProcess;
QStringList m_commandsToTest;
Utils::QtcProcess m_process;
}; };
} // namespace Internal } // namespace Internal