iOS: Move process id gathering from devicectl to a function

And add a test to document what we expect from devicectl.

Change-Id: Ic69af99a472976a6c06801a646af59f8139d5624
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Eike Ziller
2024-02-01 13:24:43 +01:00
parent a1039de35e
commit e32d3da321
4 changed files with 60 additions and 9 deletions

View File

@@ -96,4 +96,15 @@ Utils::expected_str<QUrl> parseAppInfo(const QByteArray &rawOutput, const QStrin
return {};
}
Utils::expected_str<qint64> parseProcessIdentifier(const QByteArray &rawOutput)
{
const expected_str<QJsonValue> result = parseDevicectlResult(rawOutput);
if (!result)
return make_unexpected(result.error());
const QJsonArray matchingProcesses = (*result)["runningProcesses"].toArray();
if (matchingProcesses.size() > 0)
return matchingProcesses.first()["processIdentifier"].toInteger(-1);
return -1;
}
} // namespace Ios::Internal

View File

@@ -23,5 +23,6 @@ Utils::expected_str<QJsonValue> parseDevicectlResult(const QByteArray &rawOutput
Utils::expected_str<QMap<QString, QString>> parseDeviceInfo(const QByteArray &rawOutput,
const QString &deviceUsbId);
Utils::expected_str<QUrl> parseAppInfo(const QByteArray &rawOutput, const QString &bundleIdentifier);
Utils::expected_str<qint64> parseProcessIdentifier(const QByteArray &rawOutput);
} // namespace Ios::Internal

View File

@@ -178,17 +178,12 @@ GroupItem DeviceCtlRunner::findProcess(Storage<AppInfo> &appInfo)
return SetupResult::Continue;
};
const auto onDone = [this, appInfo](const Process &process) {
const Utils::expected_str<QJsonValue> resultValue = parseDevicectlResult(
process.rawStdOut());
if (resultValue) {
const QJsonArray matchingProcesses = (*resultValue)["runningProcesses"].toArray();
if (matchingProcesses.size() > 0) {
appInfo->processIdentifier
= matchingProcesses.first()["processIdentifier"].toInteger(-1);
}
const Utils::expected_str<qint64> pid = parseProcessIdentifier(process.rawStdOut());
if (pid) {
appInfo->processIdentifier = *pid;
return DoneResult::Success;
}
reportFailure(resultValue.error());
reportFailure(pid.error());
return DoneResult::Error;
};
return ProcessTask(onSetup, onDone);