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();