From 74f0fc6b1837d28397fb7b619ea717c586237789 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 7 Nov 2019 15:38:00 -0800 Subject: [PATCH] fastdeploy: fix tests. Actually log results of adb commands, so we can see why this fails. Fix the asan-detected use of a value from a reused part of the stack. Test: atest FastDeployTest on Linux (with an asan adb) Change-Id: I4d2bbae62a301e16065d604a2c9918077489cafb --- adb/client/fastdeploy.cpp | 17 ++++++----------- .../com/android/fastdeploy/FastDeployTest.java | 12 ++++++++---- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/adb/client/fastdeploy.cpp b/adb/client/fastdeploy.cpp index bdc9e5660..5fa0edbac 100644 --- a/adb/client/fastdeploy.cpp +++ b/adb/client/fastdeploy.cpp @@ -101,17 +101,12 @@ void fastdeploy_set_agent_update_strategy(FastDeploy_AgentUpdateStrategy agent_u static void push_to_device(const void* data, size_t byte_count, const char* dst, bool sync) { std::vector srcs; - { - TemporaryFile temp; - android::base::WriteFully(temp.fd, data, byte_count); - srcs.push_back(temp.path); - - // On Windows, the file needs to be flushed before pushing to device. - // closing the file flushes its content, but we still need to remove it after push. - // FileDeleter does exactly that. - temp.DoNotRemove(); - } - FileDeleter temp_deleter(srcs.back()); + TemporaryFile tf; + android::base::WriteFully(tf.fd, data, byte_count); + srcs.push_back(tf.path); + // On Windows, the file needs to be flushed before pushing to device, + // but can't be removed until after the push. + unix_close(tf.release()); if (!do_sync_push(srcs, dst, sync)) { error_exit("Failed to push fastdeploy agent to device."); diff --git a/adb/fastdeploy/deployagent/test/com/android/fastdeploy/FastDeployTest.java b/adb/fastdeploy/deployagent/test/com/android/fastdeploy/FastDeployTest.java index ef6ccaea6..4aa2f79bb 100644 --- a/adb/fastdeploy/deployagent/test/com/android/fastdeploy/FastDeployTest.java +++ b/adb/fastdeploy/deployagent/test/com/android/fastdeploy/FastDeployTest.java @@ -20,7 +20,9 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper; +import com.android.ddmlib.Log.LogLevel; import com.android.tradefed.device.DeviceNotAvailableException; +import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.testtype.DeviceJUnit4ClassRunner; import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test; @@ -68,17 +70,19 @@ public class FastDeployTest extends BaseHostJUnit4Test { } private boolean isAppInstalled(String packageName) throws DeviceNotAvailableException { - final String commandResult = getDevice().executeShellCommand("pm list packages"); + final String result = getDevice().executeShellCommand("pm list packages"); + CLog.logAndDisplay(LogLevel.INFO, result); final int prefixLength = "package:".length(); - return Arrays.stream(commandResult.split("\\r?\\n")) + return Arrays.stream(result.split("\\r?\\n")) .anyMatch(line -> line.substring(prefixLength).equals(packageName)); } // Mostly copied from PkgInstallSignatureVerificationTest.java. - private String fastInstallPackage(String apkPath) + private void fastInstallPackage(String apkPath) throws IOException, DeviceNotAvailableException { - return getDevice().executeAdbCommand("install", "-t", "--fastdeploy", "--force-agent", + String result = getDevice().executeAdbCommand("install", "-t", "--fastdeploy", "--force-agent", apkPath); + CLog.logAndDisplay(LogLevel.INFO, result); } }