Set root before pulling recovery.log
It will fail to pull otherwise
Test: unit tests
Bug: 200595141
Change-Id: I86ae879c79ca2f69dce74dc250ecca0d74ccc5ae
diff --git a/javatests/com/android/tradefed/device/WaitDeviceRecoveryTest.java b/javatests/com/android/tradefed/device/WaitDeviceRecoveryTest.java
index 8da7046..56340c6 100644
--- a/javatests/com/android/tradefed/device/WaitDeviceRecoveryTest.java
+++ b/javatests/com/android/tradefed/device/WaitDeviceRecoveryTest.java
@@ -144,50 +144,19 @@
}
@Test
- public void testRecoverDevice_unavailable_recovery() throws Exception {
- doReturn(TestDeviceState.RECOVERY).when(mMockMonitor).getDeviceState();
-
- UsbDevice mockDevice = Mockito.mock(UsbDevice.class);
- doReturn(mockDevice).when(mMockUsbHelper).getDevice("serial");
-
- doReturn(null, mMockDevice).when(mMockMonitor).waitForDeviceAvailable();
- doReturn(null, mMockDevice).when(mMockMonitor).waitForDeviceOnline(Mockito.anyLong());
- doReturn(mMockDevice).when(mMockMonitor).waitForDeviceInRecovery();
-
- // Device recovers successfully
- mRecovery.recoverDevice(mMockMonitor, false);
-
- verify(mMockRunUtil).sleep(Mockito.anyLong());
- verify(mMockMonitor).waitForDeviceBootloaderStateUpdate();
- verify(mMockDevice).reboot(null);
-
- verify(mockDevice).reset();
- }
-
- @Test
public void testRecoverDevice_unavailable_recovery_fail() throws Exception {
- // expect initial sleep
-
when(mMockMonitor.getDeviceState()).thenReturn(TestDeviceState.RECOVERY);
when(mMockMonitor.waitForDeviceOnline(Mockito.anyLong())).thenReturn(null);
- UsbDevice mockDevice = Mockito.mock(UsbDevice.class);
- doReturn(mockDevice).when(mMockUsbHelper).getDevice("serial");
- when(mMockMonitor.waitForDeviceAvailable()).thenReturn(null);
-
- when(mMockMonitor.waitForDeviceInRecovery()).thenReturn(null);
-
try {
mRecovery.recoverDevice(mMockMonitor, false);
fail("DeviceNotAvailableException not thrown");
} catch (DeviceNotAvailableException e) {
// expected
}
- verify(mMockMonitor, times(3)).getDeviceState();
+ verify(mMockMonitor, times(2)).getDeviceState();
verify(mMockRunUtil).sleep(Mockito.anyLong());
verify(mMockMonitor).waitForDeviceBootloaderStateUpdate();
-
- verify(mockDevice).reset();
}
@Test
diff --git a/src/com/android/tradefed/device/WaitDeviceRecovery.java b/src/com/android/tradefed/device/WaitDeviceRecovery.java
index 1f301a6..2cbd6ec 100644
--- a/src/com/android/tradefed/device/WaitDeviceRecovery.java
+++ b/src/com/android/tradefed/device/WaitDeviceRecovery.java
@@ -501,7 +501,9 @@
private boolean attemptDeviceUnavailableRecovery(
IDeviceStateMonitor monitor, boolean recoverTillOnline) {
TestDeviceState state = monitor.getDeviceState();
- if (TestDeviceState.FASTBOOT.equals(state) || TestDeviceState.FASTBOOTD.equals(state)) {
+ if (TestDeviceState.FASTBOOT.equals(state)
+ || TestDeviceState.FASTBOOTD.equals(state)
+ || TestDeviceState.RECOVERY.equals(state)) {
CLog.d("Device is in '%s' state skipping USB reset attempt.", state);
return false;
}
diff --git a/src/com/android/tradefed/invoker/TestInvocation.java b/src/com/android/tradefed/invoker/TestInvocation.java
index 2d68fb9..9ff5c65 100644
--- a/src/com/android/tradefed/invoker/TestInvocation.java
+++ b/src/com/android/tradefed/invoker/TestInvocation.java
@@ -1356,6 +1356,8 @@
continue;
}
try {
+ // We need root to access the recovery logs so attempt to set it
+ device.enableAdbRoot();
File recovery_log = device.pullFile(RECOVERY_LOG_DEVICE_PATH);
if (recovery_log == null) {
return;
diff --git a/src/com/android/tradefed/targetprep/RecoveryLogPreparer.java b/src/com/android/tradefed/targetprep/RecoveryLogPreparer.java
index 0d675be..51a9072 100644
--- a/src/com/android/tradefed/targetprep/RecoveryLogPreparer.java
+++ b/src/com/android/tradefed/targetprep/RecoveryLogPreparer.java
@@ -50,7 +50,7 @@
ITestDevice device = testInformation.getDevice();
if (TestDeviceState.RECOVERY.equals(device.getDeviceState())) {
- // Track we entered the recovery mode handling
+ // Track when we entered the recovery mode handling
InvocationMetricLogger.addInvocationMetrics(
InvocationMetricKey.AUTO_RECOVERY_MODE_COUNT, 1);
device.enableAdbRoot();