Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b6ae901 authored by Al Sutton's avatar Al Sutton
Browse files

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
parent b7380d16
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -395,7 +395,8 @@ public class KeyValueBackupReporter {
        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");
        }
+5 −1
Original line number Diff line number Diff line
@@ -535,6 +535,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable {
        }

        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 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable {
        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 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable {
        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 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable {
            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);
+12 −0
Original line number Diff line number Diff line
@@ -77,4 +77,16 @@ public class KeyValueBackupReporterTest {

        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);
    }
}
+15 −16
Original line number Diff line number Diff line
@@ -226,7 +226,8 @@ public class KeyValueBackupTaskTest {
        // Needed to be able to use a real BMS instead of a mock
        setUpBinderCallerAndApplicationAsSystem(mApplication);
        mBackupManagerService =
                spy(createUserBackupManagerServiceAndRunTasks(
                spy(
                        createUserBackupManagerServiceAndRunTasks(
                                USER_ID, mContext, mBaseStateDir, mDataDir, mTransportManager));
        setUpBackupManagerServiceBasics(
                mBackupManagerService,
@@ -335,9 +336,7 @@ public class KeyValueBackupTaskTest {
                .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 @@ public class KeyValueBackupTaskTest {
    }

    /**
     * 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 @@ public class KeyValueBackupTaskTest {

        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 @@ public class KeyValueBackupTaskTest {
    }

    @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 @@ public class KeyValueBackupTaskTest {
        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 @@ public class KeyValueBackupTaskTest {
        runTask(task);

        verify(mReporter).onPackageBackupTransportFailure(PM_PACKAGE.packageName);
        verify(mReporter).onTransportNotInitialized();
        verify(mReporter).onTransportNotInitialized(mTransport.transportName);
        verify(mReporter).onBackupFinished(BackupManager.ERROR_TRANSPORT_ABORTED);
    }

@@ -1771,8 +1771,9 @@ public class KeyValueBackupTaskTest {
        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);
@@ -2321,9 +2322,7 @@ public class KeyValueBackupTaskTest {
        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 {