Rewrite testBadApkOnly (1/n)

When tradefed fails to run a test, it will try to recover the device
which might lead to another reboot. This interferes with our test
flow which also involves reboot. See b/150749023#comment2 for more
details.

Let's rewrite the test to prevent auto-recovery of tradefed from kicking
in. Generally, it is a bad practice to depend our test flow on a failed
test due to reboot. We should call #waitForDeviceNotAvailable to wait
for reboot to happen and then call #waitForDeviceAvailable before
continuing next tests.

Bug: 150749023
Test: atest StagedRollbackTest#testBadApkOnly
Change-Id: Ia39630585c3b7344174a8c66d0a33f05a2d80cc7
This commit is contained in:
JW Wang
2020-03-04 17:28:05 +08:00
parent 71b352b211
commit 45bf445ed4
2 changed files with 5 additions and 9 deletions

View File

@@ -127,18 +127,12 @@ public class StagedRollbackTest {
/**
* Test rollbacks of staged installs involving only apks with bad update.
* Trigger rollback phase. This is expected to fail due to watchdog
* rebooting the test out from under it.
* Trigger rollback phase.
*/
@Test
public void testBadApkOnly_Phase3() throws Exception {
// One more crash to trigger rollback
RollbackUtils.sendCrashBroadcast(TestApp.A, 1);
// We expect the device to be rebooted automatically. Wait for that to happen.
// This device method will fail and the host will catch the assertion.
// If reboot doesn't happen, the host will fail the assertion.
Thread.sleep(TimeUnit.SECONDS.toMillis(120));
}
/**

View File

@@ -22,7 +22,6 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
import static org.testng.Assert.assertThrows;
import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
@@ -136,7 +135,10 @@ public class StagedRollbackTest extends BaseHostJUnit4Test {
getDevice().reboot();
runPhase("testBadApkOnly_Phase2");
assertThrows(AssertionError.class, () -> runPhase("testBadApkOnly_Phase3"));
// Trigger rollback and wait for reboot to happen
runPhase("testBadApkOnly_Phase3");
assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(2)));
getDevice().waitForDeviceAvailable();
runPhase("testBadApkOnly_Phase4");