Re-add the logging to track when a backup transport is used which hasn't been initialised.

Test: atest RunBackupFrameworksServicesRoboTests
Fixes: 110781477
Change-Id: I8645fb4eab24dc531b93e865003d894dc1877d99
diff --git a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java
index 535c7cb..4632cb0 100644
--- a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java
+++ b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java
@@ -395,7 +395,8 @@
         Slog.e(TAG, "Transport threw reporting restore set: " + e);
     }
 
-    void onTransportNotInitialized() {
+    void onTransportNotInitialized(@Nullable String transportName) {
+        EventLog.writeEvent(EventLogTags.BACKUP_RESET, transportName);
         if (MORE_DEBUG) {
             Slog.d(TAG, "Transport requires initialization, rerunning");
         }
diff --git a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java
index 294eb01..e5e11ea 100644
--- a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java
+++ b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java
@@ -535,6 +535,7 @@
         }
 
         String callerLogString = "KVBT.finishTask()";
+        String transportName = null;
 
         // If the backup data was not empty, we succeeded and this is the first time
         // we've done a backup, we can record the current backup dataset token.
@@ -542,6 +543,7 @@
         if (mHasDataToBackup && (status == BackupTransport.TRANSPORT_OK) && (currentToken == 0)) {
             try {
                 IBackupTransport transport = mTransportClient.connectOrThrow(callerLogString);
+                transportName = transport.name();
                 mBackupManagerService.setCurrentToken(transport.getCurrentRestoreSet());
                 mBackupManagerService.writeRestoreTokens();
             } catch (Exception e) {
@@ -553,7 +555,7 @@
         synchronized (mQueueLock) {
             mBackupManagerService.setBackupRunning(false);
             if (status == BackupTransport.TRANSPORT_NOT_INITIALIZED) {
-                mReporter.onTransportNotInitialized();
+                mReporter.onTransportNotInitialized(transportName);
                 try {
                     triggerTransportInitializationLocked();
                 } catch (Exception e) {
@@ -861,6 +863,8 @@
             status = transport.performBackup(packageInfo, backupData, flags);
             if (status == BackupTransport.TRANSPORT_OK) {
                 status = transport.finishBackup();
+            } else if (status == BackupTransport.TRANSPORT_NOT_INITIALIZED) {
+                mReporter.onTransportNotInitialized(transport.name());
             }
         } catch (Exception e) {
             mReporter.onPackageBackupTransportError(packageName, e);
diff --git a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupReporterTest.java b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupReporterTest.java
index a1b8a95..14b4dc3 100644
--- a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupReporterTest.java
+++ b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupReporterTest.java
@@ -77,4 +77,16 @@
 
         assertThat(observer).isEqualTo(mObserver);
     }
+
+    /**
+     * Ensure that EventLog is called when logging the transport uninitialised issue.
+     */
+    @Test
+    public void testOnTransportNotInitialized_callsEventLog() {
+        ShadowEventLog.setUp();
+
+        mReporter.onTransportNotInitialized("transport");
+
+        assertThat(ShadowEventLog.getEntries().size()).isEqualTo(1);
+    }
 }
diff --git a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java
index cc64323..43691e0 100644
--- a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java
+++ b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java
@@ -226,8 +226,9 @@
         // Needed to be able to use a real BMS instead of a mock
         setUpBinderCallerAndApplicationAsSystem(mApplication);
         mBackupManagerService =
-                spy(createUserBackupManagerServiceAndRunTasks(
-                        USER_ID, mContext, mBaseStateDir, mDataDir, mTransportManager));
+                spy(
+                        createUserBackupManagerServiceAndRunTasks(
+                                USER_ID, mContext, mBaseStateDir, mDataDir, mTransportManager));
         setUpBackupManagerServiceBasics(
                 mBackupManagerService,
                 mApplication,
@@ -335,9 +336,7 @@
                 .isEqualTo("packageState".getBytes());
     }
 
-    /**
-     * Do not update backup token if the backup queue was empty
-     */
+    /** Do not update backup token if the backup queue was empty */
     @Test
     public void testRunTask_whenQueueEmptyOnFirstBackup_doesNotUpdateCurrentToken()
             throws Exception {
@@ -725,8 +724,8 @@
     }
 
     /**
-     * Agent unavailable means {@link UserBackupManagerService#bindToAgentSynchronous(ApplicationInfo,
-     * int)} returns {@code null}.
+     * Agent unavailable means {@link
+     * UserBackupManagerService#bindToAgentSynchronous(ApplicationInfo, int)} returns {@code null}.
      *
      * @see #setUpAgent(PackageData)
      */
@@ -759,8 +758,8 @@
 
         runTask(task);
 
-        assertThat(Files.readAllBytes(getStateFile(mTransport, PACKAGE_1))).isEqualTo(
-                "newState".getBytes());
+        assertThat(Files.readAllBytes(getStateFile(mTransport, PACKAGE_1)))
+                .isEqualTo("newState".getBytes());
     }
 
     @Test
@@ -795,7 +794,8 @@
     }
 
     @Test
-    public void testRunTask_whenNonIncrementalAndBindToAgentThrowsSecurityException() throws Exception {
+    public void testRunTask_whenNonIncrementalAndBindToAgentThrowsSecurityException()
+            throws Exception {
         TransportMock transportMock = setUpInitializedTransport(mTransport);
         setUpAgent(PACKAGE_1);
         doThrow(SecurityException.class)
@@ -1665,7 +1665,7 @@
         runTask(task);
 
         verify(mReporter).onPackageBackupTransportFailure(PACKAGE_1.packageName);
-        verify(mReporter).onTransportNotInitialized();
+        verify(mReporter).onTransportNotInitialized(mTransport.transportName);
         verify(mReporter).onBackupFinished(BackupManager.ERROR_TRANSPORT_ABORTED);
     }
 
@@ -1682,7 +1682,7 @@
         runTask(task);
 
         verify(mReporter).onPackageBackupTransportFailure(PM_PACKAGE.packageName);
-        verify(mReporter).onTransportNotInitialized();
+        verify(mReporter).onTransportNotInitialized(mTransport.transportName);
         verify(mReporter).onBackupFinished(BackupManager.ERROR_TRANSPORT_ABORTED);
     }
 
@@ -1771,9 +1771,10 @@
         TransportMock transportMock = setUpInitializedTransport(mTransport);
         when(transportMock.transport.performBackup(any(), any(), anyInt()))
                 .thenReturn(BackupTransport.TRANSPORT_NOT_INITIALIZED);
-        // First one is in startTask(), second is the one we want.
+        // First one is in startTask(), second is in finishTask(), the third is the one we want.
         when(transportMock.transport.name())
                 .thenReturn(mTransport.transportName)
+                .thenReturn(mTransport.transportName)
                 .thenThrow(DeadObjectException.class);
         setUpAgentWithData(PACKAGE_1);
         KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1);
@@ -2321,9 +2322,7 @@
         expectThrows(IllegalArgumentException.class, () -> task.handleCancel(false));
     }
 
-    /**
-     * Do not update backup token if no data was moved.
-     */
+    /** Do not update backup token if no data was moved. */
     @Test
     public void testRunTask_whenNoDataToBackupOnFirstBackup_doesNotUpdateCurrentToken()
             throws Exception {