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

Commit 5c16b5bc authored by Niamh Walsh's avatar Niamh Walsh Committed by Android (Google) Code Review
Browse files

Merge "Add clear logs method to backup agent"

parents 15ea9319 630472d5
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
@@ -1050,6 +1050,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 */
@@ -1339,6 +1351,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