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

Commit 821a48fd authored by beatricemarch's avatar beatricemarch
Browse files

Increase number of supported datatypes

Increase number of datatypes so that shared backup agents that support
multiple components can define enough datatypes

Test: atest SystemBackupAgentTest, atest BackupRestoreEventLoggerTest
Bug: 296844513
Change-Id: I3f810ccfe2ca68253aa43b1dd3a0a0316dee4e63
parent 71da30a0
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ import android.os.Parcelable;
import android.util.ArrayMap;
import android.util.Slog;

import com.android.server.backup.Flags;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.nio.charset.StandardCharsets;
@@ -56,7 +58,7 @@ public final class BackupRestoreEventLogger {
     *
     * @hide
     */
    public static final int DATA_TYPES_ALLOWED = 15;
    public static final int DATA_TYPES_ALLOWED = 150;

    /**
     * Denotes that the annotated element identifies a data type as required by the logging methods
@@ -299,7 +301,7 @@ public final class BackupRestoreEventLogger {
        }

        if (!mResults.containsKey(dataType)) {
            if (mResults.keySet().size() == DATA_TYPES_ALLOWED) {
            if (mResults.keySet().size() == getDataTypesAllowed()) {
                // This is a new data type and we're already at capacity.
                Slog.d(TAG, "Logger is full, ignoring new data type");
                return null;
@@ -315,6 +317,14 @@ public final class BackupRestoreEventLogger {
        return mHashDigest.digest(metaData.getBytes(StandardCharsets.UTF_8));
    }

    private int getDataTypesAllowed(){
        if (Flags.enableIncreaseDatatypesForAgentLogging()) {
            return DATA_TYPES_ALLOWED;
        } else {
            return 15;
        }
    }

    /**
     * Encapsulate logging results for a single data type.
     */
+58 −5
Original line number Diff line number Diff line
@@ -26,10 +26,14 @@ import static junit.framework.Assert.fail;
import android.app.backup.BackupRestoreEventLogger.DataTypeResult;
import android.os.Parcel;
import android.platform.test.annotations.Presubmit;
import android.platform.test.flag.junit.SetFlagsRule;

import androidx.test.runner.AndroidJUnit4;

import com.android.server.backup.Flags;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

@@ -43,7 +47,9 @@ import java.util.Optional;
@Presubmit
@RunWith(AndroidJUnit4.class)
public class BackupRestoreEventLoggerTest {
    private static final int DATA_TYPES_ALLOWED = 15;
    private static final int DATA_TYPES_ALLOWED_AFTER_FLAG = 150;

    private static final int DATA_TYPES_ALLOWED_BEFORE_FLAG = 15;

    private static final String DATA_TYPE_1 = "data_type_1";
    private static final String DATA_TYPE_2 = "data_type_2";
@@ -55,6 +61,9 @@ public class BackupRestoreEventLoggerTest {
    private BackupRestoreEventLogger mLogger;
    private MessageDigest mHashDigest;

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    @Before
    public void setUp() throws Exception {
        mHashDigest = MessageDigest.getInstance("SHA-256");
@@ -83,10 +92,53 @@ public class BackupRestoreEventLoggerTest {
    }

    @Test
    public void testBackupLogger_onlyAcceptsAllowedNumberOfDataTypes() {
    public void testBackupLogger_datatypeLimitFlagOff_onlyAcceptsAllowedNumberOfDataTypes() {
        mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_INCREASE_DATATYPES_FOR_AGENT_LOGGING);
        mLogger = new BackupRestoreEventLogger(BACKUP);

        for (int i = 0; i < DATA_TYPES_ALLOWED_BEFORE_FLAG; i++) {
            String dataType = DATA_TYPE_1 + i;
            mLogger.logItemsBackedUp(dataType, /* count */ 5);
            mLogger.logItemsBackupFailed(dataType, /* count */ 5, /* error */ null);
            mLogger.logBackupMetadata(dataType, METADATA_1);

            assertThat(getResultForDataTypeIfPresent(mLogger, dataType)).isNotEqualTo(
                    Optional.empty());
        }

        mLogger.logItemsBackedUp(DATA_TYPE_2, /* count */ 5);
        mLogger.logItemsBackupFailed(DATA_TYPE_2, /* count */ 5, /* error */ null);
        mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1);
        assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_2)).isEqualTo(Optional.empty());
    }

    @Test
    public void testRestoreLogger_datatypeLimitFlagOff_onlyAcceptsAllowedNumberOfDataTypes() {
        mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_INCREASE_DATATYPES_FOR_AGENT_LOGGING);
        mLogger = new BackupRestoreEventLogger(RESTORE);

        for (int i = 0; i < DATA_TYPES_ALLOWED_BEFORE_FLAG; i++) {
            String dataType = DATA_TYPE_1 + i;
            mLogger.logItemsRestored(dataType, /* count */ 5);
            mLogger.logItemsRestoreFailed(dataType, /* count */ 5, /* error */ null);
            mLogger.logRestoreMetadata(dataType, METADATA_1);

            assertThat(getResultForDataTypeIfPresent(mLogger, dataType)).isNotEqualTo(
                    Optional.empty());
        }

        mLogger.logItemsRestored(DATA_TYPE_2, /* count */ 5);
        mLogger.logItemsRestoreFailed(DATA_TYPE_2, /* count */ 5, /* error */ null);
        mLogger.logRestoreMetadata(DATA_TYPE_2, METADATA_1);
        assertThat(getResultForDataTypeIfPresent(mLogger, DATA_TYPE_2)).isEqualTo(Optional.empty());
    }

    @Test
    public void testBackupLogger_datatypeLimitFlagOn_onlyAcceptsAllowedNumberOfDataTypes() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_INCREASE_DATATYPES_FOR_AGENT_LOGGING);
        mLogger = new BackupRestoreEventLogger(BACKUP);

        for (int i = 0; i < DATA_TYPES_ALLOWED; i++) {
        for (int i = 0; i < DATA_TYPES_ALLOWED_AFTER_FLAG; i++) {
            String dataType = DATA_TYPE_1 + i;
            mLogger.logItemsBackedUp(dataType, /* count */ 5);
            mLogger.logItemsBackupFailed(dataType, /* count */ 5, /* error */ null);
@@ -103,10 +155,11 @@ public class BackupRestoreEventLoggerTest {
    }

    @Test
    public void testRestoreLogger_onlyAcceptsAllowedNumberOfDataTypes() {
    public void testRestoreLogger_datatypeLimitFlagOn_onlyAcceptsAllowedNumberOfDataTypes() {
        mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_INCREASE_DATATYPES_FOR_AGENT_LOGGING);
        mLogger = new BackupRestoreEventLogger(RESTORE);

        for (int i = 0; i < DATA_TYPES_ALLOWED; i++) {
        for (int i = 0; i < DATA_TYPES_ALLOWED_AFTER_FLAG; i++) {
            String dataType = DATA_TYPE_1 + i;
            mLogger.logItemsRestored(dataType, /* count */ 5);
            mLogger.logItemsRestoreFailed(dataType, /* count */ 5, /* error */ null);
+9 −0
Original line number Diff line number Diff line
@@ -33,3 +33,12 @@ flag {
    bug: "320633449"
    is_fixed_read_only: true
}

flag {
    name: "enable_increase_datatypes_for_agent_logging"
    namespace: "onboarding"
    description: "Increase the number of a supported datatypes that an agent can define for its "
            "logger."
    bug: "296844513"
    is_fixed_read_only: true
}
 No newline at end of file