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

Commit fd1d7295 authored by Bernardo Rufino's avatar Bernardo Rufino
Browse files

Increase PerformBackupTask unit coverage 2

With KV Refactor in mind.
* Split empty queue test into multiple tests.
* Tests around packages failing backup pre-conditions.
* Added verifications for event logging.
* Renamed some tests to better reflect important parts of it.
* More tests about one package.
* Introduced PackageData to help mock packages, much like TransportData.
* Some small refactors.

Test: atest PerformBackupTaskTest
Change-Id: I23aba2b26e82f8643cc1c90f9408510ab34045fd
parent c1b6ca05
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -497,6 +497,7 @@ public class BackupManagerService implements BackupManagerServiceInterface {
        mDataDir = dataDir;
    }

    @Nullable
    public DataChangedJournal getJournal() {
        return mJournal;
    }
+15 −10
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

/**
 * A journal of packages that have indicated that their data has changed (and therefore should be
@@ -64,12 +66,12 @@ public class DataChangedJournal {
    }

    /**
     * Invokes {@link Consumer#accept(String)} with every package name in the journal file.
     * Invokes {@link Consumer#accept(Object)} with every package name in the journal file.
     *
     * @param consumer The callback.
     * @throws IOException If there is an IO error reading from the file.
     */
    public void forEach(Consumer consumer) throws IOException {
    public void forEach(Consumer<String> consumer) throws IOException {
        try (
            BufferedInputStream bufferedInputStream = new BufferedInputStream(
                    new FileInputStream(mFile), BUFFER_SIZE_BYTES);
@@ -82,6 +84,17 @@ public class DataChangedJournal {
        }
    }

    /**
     * Returns a list with the packages in this journal.
     *
     * @throws IOException If there is an IO error reading from the file.
     */
    public List<String> getPackages() throws IOException {
        List<String> packages = new ArrayList<>();
        forEach(packages::add);
        return packages;
    }

    /**
     * Deletes the journal from the filesystem.
     *
@@ -109,14 +122,6 @@ public class DataChangedJournal {
        return mFile.toString();
    }

    /**
     * Consumer for iterating over package names in the journal.
     */
    @FunctionalInterface
    public interface Consumer {
        void accept(String packageName);
    }

    /**
     * Creates a new journal with a random file name in the given journal directory.
     *
+10 −3
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import android.util.EventLog;
import android.util.Slog;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.backup.IBackupTransport;
import com.android.internal.util.Preconditions;
import com.android.server.AppWidgetBackupBridge;
@@ -112,6 +113,11 @@ import java.util.concurrent.CountDownLatch;
 */
public class PerformBackupTask implements BackupRestoreTask {
    private static final String TAG = "PerformBackupTask";
    private static final String BLANK_STATE_FILE_NAME = "blank_state";
    @VisibleForTesting
    public static final String STAGING_FILE_SUFFIX = ".data";
    @VisibleForTesting
    public static final String NEW_STATE_FILE_SUFFIX = ".new";

    private BackupManagerService backupManagerService;
    private final Object mCancelLock = new Object();
@@ -651,10 +657,11 @@ public class PerformBackupTask implements BackupRestoreTask {
        }
        backupManagerService.addBackupTrace("invoking " + packageName);

        File blankStateName = new File(mStateDir, "blank_state");
        File blankStateName = new File(mStateDir, BLANK_STATE_FILE_NAME);
        mSavedStateName = new File(mStateDir, packageName);
        mBackupDataName = new File(backupManagerService.getDataDir(), packageName + ".data");
        mNewStateName = new File(mStateDir, packageName + ".new");
        mBackupDataName =
                new File(backupManagerService.getDataDir(), packageName + STAGING_FILE_SUFFIX);
        mNewStateName = new File(mStateDir, packageName + NEW_STATE_FILE_SUFFIX);
        if (MORE_DEBUG) Slog.d(TAG, "data file: " + mBackupDataName);

        mSavedState = null;
+479 −166

File changed.

Preview size limit exceeded, changes collapsed.

+5 −2
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@ package com.android.server.backup.restore;
import static com.android.server.backup.testing.BackupManagerServiceTestUtils.createBackupWakeLock;
import static com.android.server.backup.testing.BackupManagerServiceTestUtils.setUpBackupManagerServiceBasics;
import static com.android.server.backup.testing.BackupManagerServiceTestUtils.startBackupThreadAndGetLooper;

import static com.android.server.backup.testing.TestUtils.assertEventLogged;
import static com.android.server.backup.testing.TestUtils.assertEventNotLogged;
import static com.android.server.backup.testing.TransportData.backupTransport;

import static com.google.common.truth.Truth.assertThat;
@@ -210,7 +213,7 @@ public class ActiveRestoreSessionTest {
        mShadowBackupLooper.runToEndOfTasks();
        assertThat(result).isEqualTo(0);
        verify(mObserver).restoreSetsAvailable(aryEq(new RestoreSet[0]));
        assertThat(ShadowEventLog.hasEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE)).isFalse();
        assertEventNotLogged(EventLogTags.RESTORE_TRANSPORT_FAILURE);
    }

    @Test
@@ -225,7 +228,7 @@ public class ActiveRestoreSessionTest {
        mShadowBackupLooper.runToEndOfTasks();
        assertThat(result).isEqualTo(0);
        verify(mObserver).restoreSetsAvailable(isNull());
        assertThat(ShadowEventLog.hasEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE)).isTrue();
        assertEventLogged(EventLogTags.RESTORE_TRANSPORT_FAILURE);
        verify(mTransportManager)
                .disposeOfTransportClient(eq(transportMock.transportClient), any());
        assertThat(mWakeLock.isHeld()).isFalse();
Loading