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

Commit 630472d5 authored by Niamh Walsh's avatar Niamh Walsh
Browse files

Add clear logs method to backup agent

Bug: 267314330
Test: atest BackupAgentTest.java BackupRestoreEventLoggerTest.java
Change-Id: I1e1def4b9aeda51ca11da762eaf822d9743502b7
parent eaaf5570
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -206,4 +206,9 @@ oneway interface IBackupAgent {
     */
    void getLoggerResults(
            in AndroidFuture<List<BackupRestoreEventLogger.DataTypeResult>> resultsFuture);

    /**
     * Clears the logs accumulated by the BackupAgent during a backup or restore operation.
     */
    void clearBackupRestoreEventLogger();
}
+26 −0
Original line number Diff line number Diff line
@@ -1058,6 +1058,18 @@ public abstract class BackupAgent extends ContextWrapper {
    public void onRestoreFinished() {
    }

    /**
     * Clears all pending logs currently stored in the agent's event logger.
     *
     * @hide
     */
    @VisibleForTesting
    public final void clearBackupRestoreEventLogger() {
        if (mLogger != null) {
            mLogger.clearData();
        }
    }

    // ----- Core implementation -----

    /** @hide */
@@ -1347,6 +1359,20 @@ public abstract class BackupAgent extends ContextWrapper {
                in.complete(Collections.emptyList());
            }
        }

        @Override
        public void clearBackupRestoreEventLogger() {
            final long ident = Binder.clearCallingIdentity();
            try {
                BackupAgent.this.clearBackupRestoreEventLogger();
            } catch (Exception e) {
                Log.d(TAG, "clearBackupRestoreEventLogger (" + BackupAgent.this.getClass().getName()
                        + ") threw", e);
                throw e;
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }
    }

    static class FailRunnable implements Runnable {
+11 −1
Original line number Diff line number Diff line
@@ -19,11 +19,11 @@ package android.app.backup;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.app.backup.BackupAnnotations.OperationType;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.ArrayMap;
import android.app.backup.BackupAnnotations.OperationType;
import android.util.Slog;

import java.lang.annotation.Retention;
@@ -229,6 +229,16 @@ public class BackupRestoreEventLogger {
        return mOperationType;
    }

    /**
     * Clears data logged. This method should only be used by B&R code in Android Framework.
     *
     * @hide
     */
    public void clearData() {
        mResults.clear();

    }

    private void logSuccess(@OperationType int operationType,
            @BackupRestoreDataType String dataType, int count) {
        DataTypeResult dataTypeResult = getDataTypeResult(operationType, dataType);
+24 −0
Original line number Diff line number Diff line
@@ -113,6 +113,30 @@ public class BackupAgentTest {
                .isEqualTo(DATA_TYPE_BACKED_UP);
    }

    @Test
    public void testClearLogger_clearsPendingLogs() throws Exception {
        BackupAgent agent = new TestFullBackupAgent();
        agent.onCreate(USER_HANDLE, BackupDestination.CLOUD, OperationType.BACKUP);

        agent.onFullBackup(new FullBackupDataOutput(/* quota = */ 0));
        agent.clearBackupRestoreEventLogger();

        assertThat(agent.getBackupRestoreEventLogger().getLoggingResults().size()).isEqualTo(0);
    }

    @Test
    public void testClearLoggerBetweenBackups_restartsSuccessCount() throws Exception {
        BackupAgent agent = new TestFullBackupAgent();
        agent.onCreate(USER_HANDLE, BackupDestination.CLOUD, OperationType.BACKUP);

        agent.onFullBackup(new FullBackupDataOutput(/* quota = */ 0));
        agent.clearBackupRestoreEventLogger();
        agent.onFullBackup(new FullBackupDataOutput(/* quota = */ 0));

        assertThat(agent.getBackupRestoreEventLogger().getLoggingResults().get(
                0).getSuccessCount()).isEqualTo(1);
    }

    private BackupAgent getAgentForBackupDestination(@BackupDestination int backupDestination) {
        BackupAgent agent = new TestFullBackupAgent();
        agent.onCreate(USER_HANDLE, backupDestination);
+13 −0
Original line number Diff line number Diff line
@@ -301,6 +301,19 @@ public class BackupRestoreEventLoggerTest {
                .isEqualTo(secondTypeErrorOneCount);
    }

    @Test
    public void testClearData_clearsAllResults() {
        mLogger = new BackupRestoreEventLogger(BACKUP);
        mLogger.logItemsBackedUp(DATA_TYPE_1, 5);
        mLogger.logItemsBackedUp(DATA_TYPE_2, 4);
        mLogger.logItemsBackupFailed(DATA_TYPE_2, 1, ERROR_1);
        assertThat(mLogger.getLoggingResults()).isNotEmpty();

        mLogger.clearData();

        assertThat(mLogger.getLoggingResults()).isEmpty();
    }

    private static DataTypeResult getResultForDataType(
            BackupRestoreEventLogger logger, @BackupRestoreDataType String dataType) {
        Optional<DataTypeResult> result = getResultForDataTypeIfPresent(logger, dataType);
Loading