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

Commit 1ae30675 authored by Daniel Perez's avatar Daniel Perez Committed by Android (Google) Code Review
Browse files

Merge "Add Backup & Restore Metrics for Wifi Config settings." into main

parents e245241d 4ac5263f
Loading
Loading
Loading
Loading
+23 −4
Original line number Diff line number Diff line
@@ -212,6 +212,8 @@ public class SettingsBackupAgent extends BackupAgentHelper {
    private static final String ERROR_IO_EXCEPTION = "io_exception";
    private static final String ERROR_FAILED_TO_RESTORE_SOFTAP_CONFIG =
        "failed_to_restore_softap_config";
    private static final String ERROR_FAILED_TO_RESTORE_WIFI_CONFIG =
        "failed_to_restore_wifi_config";


    // Name of the temporary file we use during full backup/restore.  This is
@@ -1455,8 +1457,14 @@ public class SettingsBackupAgent extends BackupAgentHelper {
        return baos.toByteArray();
    }

    private byte[] getNewWifiConfigData() {
        return mWifiManager.retrieveBackupData();
    @VisibleForTesting
    byte[] getNewWifiConfigData() {
        byte[] data = mWifiManager.retrieveBackupData();
        if (areAgentMetricsEnabled) {
            // We're unable to determine how many settings this includes, so we'll just log 1.
            numberOfSettingsPerKey.put(KEY_WIFI_NEW_CONFIG, 1);
        }
        return data;
    }

    private byte[] getLocaleSettings() {
@@ -1468,12 +1476,23 @@ public class SettingsBackupAgent extends BackupAgentHelper {
        return localeList.toLanguageTags().getBytes();
    }

    private void restoreNewWifiConfigData(byte[] bytes) {
    @VisibleForTesting
    void restoreNewWifiConfigData(byte[] bytes) {
        if (DEBUG_BACKUP) {
            Log.v(TAG, "Applying restored wifi data");
        }
        if (areAgentMetricsEnabled) {
            try {
                mWifiManager.restoreBackupData(bytes);
                mBackupRestoreEventLogger.logItemsRestored(KEY_WIFI_NEW_CONFIG, /* count= */ 1);
            } catch (Exception e) {
                mBackupRestoreEventLogger.logItemsRestoreFailed(
                    KEY_WIFI_NEW_CONFIG, /* count= */ 1, ERROR_FAILED_TO_RESTORE_WIFI_CONFIG);
            }
        } else {
            mWifiManager.restoreBackupData(bytes);
        }
    }

    private void restoreNetworkPolicies(byte[] data) {
        NetworkPolicyManager networkPolicyManager =
+72 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.providers.settings;

import static com.android.providers.settings.SettingsBackupRestoreKeys.KEY_WIFI_NEW_CONFIG;
import static com.android.providers.settings.SettingsBackupRestoreKeys.KEY_SOFTAP_CONFIG;

import static junit.framework.Assert.assertEquals;
@@ -28,6 +29,8 @@ import static org.junit.Assert.assertArrayEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.when;

import android.annotation.Nullable;
@@ -69,6 +72,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

@@ -834,6 +838,74 @@ public class SettingsBackupAgentTest extends BaseSettingsProviderTest {
        assertNull(getLoggingResultForDatatype(KEY_SOFTAP_CONFIG, mAgentUnderTest));
    }

    @Test
    @EnableFlags(com.android.server.backup.Flags.FLAG_ENABLE_METRICS_SETTINGS_BACKUP_AGENTS)
    public void getNewWifiConfigData_flagIsEnabled_numberOfSettingsInKeyAreRecorded() {
        mAgentUnderTest.onCreate(
            UserHandle.SYSTEM, BackupDestination.CLOUD, OperationType.BACKUP);
        when(mWifiManager.retrieveBackupData()).thenReturn(null);

        mAgentUnderTest.getNewWifiConfigData();

        assertEquals(mAgentUnderTest.getNumberOfSettingsPerKey(KEY_WIFI_NEW_CONFIG), 1);
    }

    @Test
    @DisableFlags(com.android.server.backup.Flags.FLAG_ENABLE_METRICS_SETTINGS_BACKUP_AGENTS)
    public void getNewWifiConfigData_flagIsNotEnabled_numberOfSettingsInKeyAreNotRecorded() {
        mAgentUnderTest.onCreate(
            UserHandle.SYSTEM, BackupDestination.CLOUD, OperationType.BACKUP);
        when(mWifiManager.retrieveBackupData()).thenReturn(null);

        mAgentUnderTest.getNewWifiConfigData();

        assertEquals(mAgentUnderTest.getNumberOfSettingsPerKey(KEY_WIFI_NEW_CONFIG), 0);
    }

    @Test
    @EnableFlags(com.android.server.backup.Flags.FLAG_ENABLE_METRICS_SETTINGS_BACKUP_AGENTS)
    public void
        restoreNewWifiConfigData_flagIsEnabled_restoreIsSuccessful_successMetricsAreLogged() {
        mAgentUnderTest.onCreate(
            UserHandle.SYSTEM, BackupDestination.CLOUD, OperationType.RESTORE);
        doNothing().when(mWifiManager).restoreBackupData(any());

        mAgentUnderTest.restoreNewWifiConfigData(new byte[] {});

        DataTypeResult loggingResult =
            getLoggingResultForDatatype(KEY_WIFI_NEW_CONFIG, mAgentUnderTest);
        assertNotNull(loggingResult);
        assertEquals(loggingResult.getSuccessCount(), 1);
    }

    @Test
    @EnableFlags(com.android.server.backup.Flags.FLAG_ENABLE_METRICS_SETTINGS_BACKUP_AGENTS)
    public void
        restoreNewWifiConfigData_flagIsEnabled_restoreIsNotSuccessful_failureMetricsAreLogged() {
        mAgentUnderTest.onCreate(
            UserHandle.SYSTEM, BackupDestination.CLOUD, OperationType.RESTORE);
        doThrow(new RuntimeException()).when(mWifiManager).restoreBackupData(any());

        mAgentUnderTest.restoreNewWifiConfigData(new byte[] {});

        DataTypeResult loggingResult =
            getLoggingResultForDatatype(KEY_WIFI_NEW_CONFIG, mAgentUnderTest);
        assertNotNull(loggingResult);
        assertEquals(loggingResult.getFailCount(), 1);
    }

    @Test
    @DisableFlags(com.android.server.backup.Flags.FLAG_ENABLE_METRICS_SETTINGS_BACKUP_AGENTS)
    public void restoreNewWifiConfigData_flagIsNotEnabled_metricsAreNotLogged() {
        mAgentUnderTest.onCreate(
            UserHandle.SYSTEM, BackupDestination.CLOUD, OperationType.RESTORE);
        doNothing().when(mWifiManager).restoreBackupData(any());

        mAgentUnderTest.restoreNewWifiConfigData(new byte[] {});

        assertNull(getLoggingResultForDatatype(KEY_WIFI_NEW_CONFIG, mAgentUnderTest));
    }

    private byte[] generateBackupData(Map<String, String> keyValueData) {
        int totalBytes = 0;
        for (String key : keyValueData.keySet()) {