From ee709179e6c4660983a8f5b5443d1468dbcf449f Mon Sep 17 00:00:00 2001 From: Gopinath Date: Wed, 13 Apr 2016 11:57:26 -0700 Subject: Add the timeout option for RunCommandTargetPreparer run commands with timeout option Change-Id: I6298802c453412ac4e2c4b8a0c937a5b2e75ca35 --- .../targetprep/RunCommandTargetPreparer.java | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'src/com/android/tradefed/targetprep') diff --git a/src/com/android/tradefed/targetprep/RunCommandTargetPreparer.java b/src/com/android/tradefed/targetprep/RunCommandTargetPreparer.java index 5b1131d70..1caf5d3bf 100644 --- a/src/com/android/tradefed/targetprep/RunCommandTargetPreparer.java +++ b/src/com/android/tradefed/targetprep/RunCommandTargetPreparer.java @@ -19,13 +19,14 @@ package com.android.tradefed.targetprep; import com.android.tradefed.build.IBuildInfo; import com.android.tradefed.config.Option; import com.android.tradefed.config.OptionClass; +import com.android.tradefed.device.CollectingOutputReceiver; import com.android.tradefed.device.DeviceNotAvailableException; import com.android.tradefed.device.ITestDevice; import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.util.RunUtil; - import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; @OptionClass(alias = "run-command") public class RunCommandTargetPreparer implements ITargetCleaner { @@ -42,18 +43,31 @@ public class RunCommandTargetPreparer implements ITargetCleaner { description = "Time to delay after running commands, in msecs") private long mDelayMsecs = 0; + @Option(name = "run-command-timeout", + description = "Timeout for execute shell command", + isTimeVal = true) + private long mRunCmdTimeout = 0; + + /** * {@inheritDoc} */ @Override public void setUp(ITestDevice device, IBuildInfo buildInfo) throws TargetSetupError, DeviceNotAvailableException { - if (mDisable) return; + if (mDisable) + return; for (String cmd : mCommands) { // If the command had any output, the executeShellCommand method will log it at the // VERBOSE level; so no need to do any logging from here. CLog.d("About to run setup command on device %s: %s", device.getSerialNumber(), cmd); - device.executeShellCommand(cmd); + if (mRunCmdTimeout > 0) { + CollectingOutputReceiver receiver = new CollectingOutputReceiver(); + device.executeShellCommand(cmd, receiver, mRunCmdTimeout, TimeUnit.MILLISECONDS, 0); + CLog.v("%s returned %s", cmd, receiver.getOutput()); + } else { + device.executeShellCommand(cmd); + } } CLog.d("Sleeping %d msecs on device %s", mDelayMsecs, device.getSerialNumber()); -- cgit v1.2.3