introduce reboot interval
- do reboot only for given interval (still based on package) so that reboot does not
happen too often : one reboot per 30 mins by default
- add additional delay after reboot to make sure that things are ready: 2 mins now
Change-Id: I05120a00e0837a831985446b01fba9b5eabb60bf
diff --git a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java
index 7be1e34..da07f3b 100644
--- a/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java
+++ b/tools/tradefed-host/src/com/android/cts/tradefed/testtype/CtsTest.java
@@ -47,6 +47,9 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
+import java.lang.InterruptedException;
+import java.lang.System;
+import java.lang.Thread;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -137,6 +140,14 @@
"Reboot after each package run")
private boolean mRebootPerPackage = false;
+ @Option(name = "reboot-wait-time", description =
+ "Additional wait time in ms after boot complete. Meaningful only with reboot-per-package option")
+ private int mRebootWaitTimeMSec = 120000;
+
+ @Option(name = "reboot-interval", description =
+ "Interval between each reboot in min. Meaningful only with reboot-per-package option")
+ private int mRebootIntervalMin = 30;
+
/** data structure for a {@link IRemoteTest} and its known tests */
class TestPackage {
private final IRemoteTest mTestForPackage;
@@ -337,7 +348,8 @@
// always collect the device info, even for resumed runs, since test will likely be
// running on a different device
collectDeviceInfo(getDevice(), mCtsBuild, listener);
-
+ long prevTime = System.currentTimeMillis();
+ long intervalInMSec = mRebootIntervalMin * 60 * 1000;
while (!mRemainingTestPkgs.isEmpty()) {
TestPackage knownTests = mRemainingTestPkgs.get(0);
@@ -352,25 +364,34 @@
forwardPackageDetails(knownTests.getPackageDef(), listener);
test.run(filter);
mRemainingTestPkgs.remove(0);
- if (mRebootPerPackage) {
- Log.i(LOG_TAG, String.format("Rebooting after running package %s",
- knownTests.getPackageDef().getName()));
- final int TIMEOUT_MS = 4 * 60 * 1000;
- TestDeviceOptions options = mDevice.getOptions();
- // store default value and increase time-out for reboot
- int rebootTimeout = options.getRebootTimeout();
- long onlineTimeout = options.getOnlineTimeout();
- options.setRebootTimeout(TIMEOUT_MS);
- options.setOnlineTimeout(TIMEOUT_MS);
- mDevice.setOptions(options);
+ if (mRebootPerPackage && (mRemainingTestPkgs.size() > 0)) {
+ long currentTime = System.currentTimeMillis();
+ if ((currentTime - prevTime) > intervalInMSec) {
+ Log.i(LOG_TAG, String.format("Rebooting after running package %s",
+ knownTests.getPackageDef().getName()));
+ final int TIMEOUT_MS = 4 * 60 * 1000;
+ TestDeviceOptions options = mDevice.getOptions();
+ // store default value and increase time-out for reboot
+ int rebootTimeout = options.getRebootTimeout();
+ long onlineTimeout = options.getOnlineTimeout();
+ options.setRebootTimeout(TIMEOUT_MS);
+ options.setOnlineTimeout(TIMEOUT_MS);
+ mDevice.setOptions(options);
- mDevice.reboot();
+ mDevice.reboot();
- // restore default values
- options.setRebootTimeout(rebootTimeout);
- options.setOnlineTimeout(onlineTimeout);
- mDevice.setOptions(options);
- Log.i(LOG_TAG, "Rebooting done");
+ // restore default values
+ options.setRebootTimeout(rebootTimeout);
+ options.setOnlineTimeout(onlineTimeout);
+ mDevice.setOptions(options);
+ Log.i(LOG_TAG, "Rebooting done");
+ try {
+ Thread.sleep(mRebootWaitTimeMSec);
+ } catch (InterruptedException e) {
+ Log.i(LOG_TAG, "Boot wait interrupted");
+ }
+ prevTime = System.currentTimeMillis();
+ }
}
}