diff options
author | Arthur Eubanks <aeubanks@google.com> | 2017-10-18 14:46:04 -0700 |
---|---|---|
committer | Arthur Eubanks <aeubanks@google.com> | 2017-10-18 15:09:19 -0700 |
commit | 1228b179a65e3e1c5edfacf9618b02a8e0cdc4e0 (patch) | |
tree | 03f81fa03eb7be6988d57f66d79fca37f2cebc4d | |
parent | bcff3fdb8cf4eff1035261dee2b09d6af502de80 (diff) | |
download | contrib-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.java | 22 | ||||
-rw-r--r-- | tests/src/com/android/tradefed/targetprep/RestartSystemServerTargetPreparerTest.java | 47 |
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); |