From 1365a1c7a76a73838909d63acb60ebdfcbdff62e Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Wed, 25 Nov 2020 19:05:16 +0200 Subject: [PATCH] Android: fix androidtestrunner passing when output file doesn't exist Task-number: QTBUG-88508 Change-Id: If19d2b272b1760228b6a1e6e1af6db3bfbf0ec1e Reviewed-by: BogDan Vatra --- src/tools/androidtestrunner/main.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/tools/androidtestrunner/main.cpp b/src/tools/androidtestrunner/main.cpp index e0a69bb9cb6..45b1b6202ea 100644 --- a/src/tools/androidtestrunner/main.cpp +++ b/src/tools/androidtestrunner/main.cpp @@ -415,10 +415,21 @@ static bool pullFiles() bool ret = true; for (auto it = g_options.outFiles.constBegin(); it != g_options.outFiles.end(); ++it) { QByteArray output; - if (!execCommand(QStringLiteral("%1 shell run-as %2 cat files/output.%3") + + // If the output file doesn't exist, adb still returns 0 exit code. + // Thus we need to explicitly check "echo $?". + if (!execCommand(QStringLiteral("%1 shell \'run-as %2 cat files/output.%3; echo $?\'") .arg(g_options.adbCommand, g_options.package, it.key()), &output)) { return false; } + + // Handle the exit code then remove it from the output. + bool ok; + int ret = output.right(3).toInt(&ok); + if (ret || !ok) + return false; + + output.chop(3); auto checkerIt = g_options.checkFiles.find(it.key()); ret = ret && checkerIt != g_options.checkFiles.end() && checkerIt.value()(output); if (it.value() == QStringLiteral("-")){