aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Eubanks <aeubanks@google.com>2017-10-18 14:46:04 -0700
committerArthur Eubanks <aeubanks@google.com>2017-10-18 15:09:19 -0700
commit1228b179a65e3e1c5edfacf9618b02a8e0cdc4e0 (patch)
tree03f81fa03eb7be6988d57f66d79fca37f2cebc4d
parentbcff3fdb8cf4eff1035261dee2b09d6af502de80 (diff)
downloadcontrib-1228b179a65e3e1c5edfacf9618b02a8e0cdc4e0.tar.gz
Fix RestartSystemServerTargetPreparer
Make it set sys.boot_complete to 0, then poll for when it turns to 1 before exiting. Test: run_tradefed_tests.sh Change-Id: I783d1ceaf0a849eedf5d31a4ef5dea6cecd820f5
-rw-r--r--src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparer.java22
-rw-r--r--tests/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparerTest.java47
2 files changed, 65 insertions, 4 deletions
diff --git a/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparer.java b/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparer.java
index 18d9027..11d7fba 100644
--- a/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparer.java
+++ b/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparer.java
@@ -16,6 +16,7 @@
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.DeviceNotAvailableException;
import com.android.tradefed.device.ITestDevice;
@@ -24,7 +25,12 @@ import com.android.tradefed.util.RunUtil;
@OptionClass(alias = "restart-system-server")
public class RestartSystemServerTargetPreparer implements ITargetPreparer {
- private static final long SLEEP_MILLIS = 5000L;
+ @Option(name = "poll-interval-millis",
+ description = "Time interval to poll if system server has restarted")
+ private long mPollIntervalMillis = 3000L;
+ @Option(name = "max-tries",
+ description = "Max number of tries to poll")
+ private int mMaxTries = 10;
private IRunUtil mRunUtil;
@@ -39,8 +45,20 @@ public class RestartSystemServerTargetPreparer implements ITargetPreparer {
@Override
public void setUp(ITestDevice device, IBuildInfo buildInfo)
throws TargetSetupError, BuildError, DeviceNotAvailableException {
+ device.executeShellCommand("setprop sys.boot_completed 0");
String pid = device.executeShellCommand("pidof system_server");
device.executeShellCommand("kill " + pid);
- mRunUtil.sleep(SLEEP_MILLIS);
+ boolean success = false;
+ for (int tries = 0; tries < mMaxTries; ++tries) {
+ if (device.executeShellCommand("getprop sys.boot_completed").equals("1")) {
+ success = true;
+ break;
+ }
+ mRunUtil.sleep(mPollIntervalMillis);
+ }
+ if (!success) {
+ throw new TargetSetupError("Gave up on waiting for system server to restart",
+ device.getDeviceDescriptor());
+ }
}
}
diff --git a/tests/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparerTest.java b/tests/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparerTest.java
index 21c5a13..975252e 100644
--- a/tests/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparerTest.java
+++ b/tests/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparerTest.java
@@ -16,6 +16,7 @@
package com.android.tradefed.targetprep;
import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.config.OptionSetter;
import com.android.tradefed.device.ITestDevice;
import com.android.tradefed.util.IRunUtil;
@@ -45,11 +46,53 @@ public class RestartSystemServerTargetPreparerTest {
}
@Test
- public void testSetUp() throws Exception {
- EasyMock.expect(mMockDevice.executeShellCommand("pidof system_server")).andReturn("123").once();
+ public void testSetUp_bootCompleteImmediate() throws Exception {
+ EasyMock.expect(mMockDevice.executeShellCommand("setprop sys.boot_completed 0")).andReturn(
+ null).once();
+ EasyMock.expect(mMockDevice.executeShellCommand("pidof system_server")).andReturn(
+ "123").once();
EasyMock.expect(mMockDevice.executeShellCommand("kill 123")).andReturn(null).once();
+ EasyMock.expect(mMockDevice.executeShellCommand("getprop sys.boot_completed")).andReturn(
+ "1").once();
+ EasyMock.replay(mMockDevice, mMockBuildInfo);
+
+ mRestartSystemServerTargetPreparer.setUp(mMockDevice, mMockBuildInfo);
+ EasyMock.verify(mMockDevice, mMockBuildInfo);
+ }
+
+ @Test
+ public void testSetUp_bootCompleteAfterOneTry() throws Exception {
+ EasyMock.expect(mMockDevice.executeShellCommand("setprop sys.boot_completed 0")).andReturn(
+ null).once();
+ EasyMock.expect(mMockDevice.executeShellCommand("pidof system_server")).andReturn(
+ "123").once();
+ EasyMock.expect(mMockDevice.executeShellCommand("kill 123")).andReturn(null).once();
+ EasyMock.expect(mMockDevice.executeShellCommand("getprop sys.boot_completed")).andReturn(
+ "0").once();
+ mMockRunUtil.sleep(EasyMock.anyLong());
+ EasyMock.expectLastCall().once();
+ EasyMock.expect(mMockDevice.executeShellCommand("getprop sys.boot_completed")).andReturn(
+ "1").once();
+ EasyMock.replay(mMockDevice, mMockBuildInfo);
+
+ mRestartSystemServerTargetPreparer.setUp(mMockDevice, mMockBuildInfo);
+ EasyMock.verify(mMockDevice, mMockBuildInfo);
+ }
+
+ @Test(expected = TargetSetupError.class)
+ public void testSetUp_giveUp() throws Exception {
+ OptionSetter optionSetter = new OptionSetter(mRestartSystemServerTargetPreparer);
+ optionSetter.setOptionValue("max-tries", "1");
+ EasyMock.expect(mMockDevice.executeShellCommand("setprop sys.boot_completed 0")).andReturn(
+ null).once();
+ EasyMock.expect(mMockDevice.executeShellCommand("pidof system_server")).andReturn(
+ "123").once();
+ EasyMock.expect(mMockDevice.executeShellCommand("kill 123")).andReturn(null).once();
+ EasyMock.expect(mMockDevice.executeShellCommand("getprop sys.boot_completed")).andReturn(
+ "0").once();
mMockRunUtil.sleep(EasyMock.anyLong());
EasyMock.expectLastCall().once();
+ EasyMock.expect(mMockDevice.getDeviceDescriptor()).andReturn(null);
EasyMock.replay(mMockDevice, mMockBuildInfo);
mRestartSystemServerTargetPreparer.setUp(mMockDevice, mMockBuildInfo);