AndroidTestRunner: simplify user Id code
Move common args to function and add user Id to info struct, also to be used more in upcoming patches. Change-Id: I14fd07f7daa52ef0369df16aceca05f0fa96f473 Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io> (cherry picked from commit 0c6827702075284ae344fd66590225a1af70c5f1) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
b6c102b742
commit
ce377c971f
@ -145,6 +145,7 @@ struct TestInfo
|
|||||||
{
|
{
|
||||||
int sdkVersion = -1;
|
int sdkVersion = -1;
|
||||||
int pid = -1;
|
int pid = -1;
|
||||||
|
QString userId;
|
||||||
|
|
||||||
std::atomic<bool> isPackageInstalled { false };
|
std::atomic<bool> isPackageInstalled { false };
|
||||||
std::atomic<bool> isTestRunnerInterrupted { false };
|
std::atomic<bool> isTestRunnerInterrupted { false };
|
||||||
@ -512,6 +513,24 @@ static void obtainSdkVersion()
|
|||||||
qCritical() << "Unable to obtain the SDK version of the target.";
|
qCritical() << "Unable to obtain the SDK version of the target.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QString userId()
|
||||||
|
{
|
||||||
|
// adb get-current-user command is available starting from API level 26.
|
||||||
|
QByteArray userId;
|
||||||
|
if (g_testInfo.sdkVersion >= 26) {
|
||||||
|
const QStringList userIdArgs = {"shell"_L1, "cmd"_L1, "activity"_L1, "get-current-user"_L1};
|
||||||
|
if (!execAdbCommand(userIdArgs, &userId, false)) {
|
||||||
|
qCritical() << "Error: failed to retrieve the user ID";
|
||||||
|
userId.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userId.isEmpty())
|
||||||
|
userId = "0";
|
||||||
|
|
||||||
|
return QString::fromUtf8(userId.simplified());
|
||||||
|
}
|
||||||
|
|
||||||
static QStringList runningDevices()
|
static QStringList runningDevices()
|
||||||
{
|
{
|
||||||
QByteArray output;
|
QByteArray output;
|
||||||
@ -526,27 +545,19 @@ static QStringList runningDevices()
|
|||||||
return devices;
|
return devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QString runCommandAsUserArgs(const QString &cmd)
|
||||||
|
{
|
||||||
|
return "run-as %1 --user %2 %3"_L1.arg(g_options.package, g_testInfo.userId, cmd);
|
||||||
|
}
|
||||||
|
|
||||||
static bool pullFiles()
|
static bool pullFiles()
|
||||||
{
|
{
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
QByteArray userId;
|
|
||||||
// adb get-current-user command is available starting from API level 26.
|
|
||||||
if (g_testInfo.sdkVersion >= 26) {
|
|
||||||
const QStringList userIdArgs = {"shell"_L1, "cmd"_L1, "activity"_L1, "get-current-user"_L1};
|
|
||||||
if (!execAdbCommand(userIdArgs, &userId, false)) {
|
|
||||||
qCritical() << "Error: failed to retrieve the user ID";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
userId = "0";
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto it = g_options.outFiles.constBegin(); it != g_options.outFiles.end(); ++it) {
|
for (auto it = g_options.outFiles.constBegin(); it != g_options.outFiles.end(); ++it) {
|
||||||
// Get only stdout from cat and get rid of stderr and fail later if the output is empty
|
// Get only stdout from cat and get rid of stderr and fail later if the output is empty
|
||||||
const QString outSuffix = it.key();
|
const QString outSuffix = it.key();
|
||||||
const QString catCmd = "cat files/output.%1 2> /dev/null"_L1.arg(outSuffix);
|
const QString catCmd = "cat files/output.%1 2> /dev/null"_L1.arg(outSuffix);
|
||||||
const QStringList fullCatArgs = { "shell"_L1, "run-as %1 --user %2 %3"_L1.arg(
|
const QStringList fullCatArgs = { "shell"_L1, runCommandAsUserArgs(catCmd) };
|
||||||
g_options.package, QString::fromUtf8(userId.simplified()), catCmd) };
|
|
||||||
|
|
||||||
bool catSuccess = false;
|
bool catSuccess = false;
|
||||||
QByteArray output;
|
QByteArray output;
|
||||||
@ -798,6 +809,8 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
obtainSdkVersion();
|
obtainSdkVersion();
|
||||||
|
|
||||||
|
g_testInfo.userId = userId();
|
||||||
|
|
||||||
QString manifest = g_options.buildPath + "/AndroidManifest.xml"_L1;
|
QString manifest = g_options.buildPath + "/AndroidManifest.xml"_L1;
|
||||||
g_options.package = packageNameFromAndroidManifest(manifest);
|
g_options.package = packageNameFromAndroidManifest(manifest);
|
||||||
if (g_options.activity.isEmpty())
|
if (g_options.activity.isEmpty())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user