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

Commit a7e83246 authored by Daniel Perez's avatar Daniel Perez
Browse files

Add Backup & Restore Metrics for Wifi settings.

Note that I couldn't add a test getWifiSettingsBackupData() because I was unable to mock WifiManager.retrieveWifiBackupData().

Bug: 379861078
Change-Id: Ie717f5b543bddd07fab8ba7ab24e5db64acad8c5
Flag: com.android.server.backup.enable_metrics_settings_backup_agents
Tested: atest SettingsBackupAgentTest
parent e15a6d04
Loading
Loading
Loading
Loading
+36 −2
Original line number Diff line number Diff line
@@ -220,6 +220,11 @@ public class SettingsBackupAgent extends BackupAgentHelper {
        "failed_to_convert_network_policies";
    private static final String ERROR_UNKNOWN_BACKUP_SERIALIZATION_VERSION =
        "unknown_backup_serialization_version";
    private static final String INTERRUPTED_EXCEPTION = "interrupted_exception";
    private static final String ERROR_FAILED_TO_RETRIEVE_WIFI_SETTINGS_BACKUP_DATA =
        "failed_to_retrieve_wifi_settings_backup_data";
    private static final String ERROR_FAILED_TO_RESTORE_WIFI_SETTINGS_BACKUP_DATA =
        "failed_to_restore_wifi_settings_backup_data";


    // Name of the temporary file we use during full backup/restore.  This is
@@ -1692,21 +1697,50 @@ public class SettingsBackupAgent extends BackupAgentHelper {
                    });
            // cts requires B&R with 10 seconds
            if (latch.await(10, TimeUnit.SECONDS) && backupWifiData.value != null) {
                if (areAgentMetricsEnabled) {
                    numberOfSettingsPerKey.put(KEY_WIFI_SETTINGS_BACKUP_DATA, 1);
                }
                return backupWifiData.value;
            }
        } catch (InterruptedException ie) {
            Log.e(TAG, "fail to retrieveWifiBackupData, " + ie);
            if (areAgentMetricsEnabled) {
                mBackupRestoreEventLogger.logItemsBackupFailed(
                    KEY_WIFI_SETTINGS_BACKUP_DATA,
                    /* count= */ 1,
                    INTERRUPTED_EXCEPTION);
            }
        }
        Log.e(TAG, "fail to retrieveWifiBackupData");
        if (areAgentMetricsEnabled) {
            mBackupRestoreEventLogger.logItemsBackupFailed(
                KEY_WIFI_SETTINGS_BACKUP_DATA,
                /* count= */ 1,
                ERROR_FAILED_TO_RETRIEVE_WIFI_SETTINGS_BACKUP_DATA);
        }
        return new byte[0];
    }

    private void restoreWifiData(byte[] data) {
    @VisibleForTesting
    void restoreWifiData(byte[] data) {
        if (DEBUG_BACKUP) {
            Log.v(TAG, "Applying restored all wifi data");
        }
        if (areAgentMetricsEnabled) {
            try {
                mWifiManager.restoreWifiBackupData(data);
                mBackupRestoreEventLogger.logItemsRestored(
                    KEY_WIFI_SETTINGS_BACKUP_DATA, /* count= */ 1);
            } catch (Exception e) {
                mBackupRestoreEventLogger.logItemsRestoreFailed(
                    KEY_WIFI_SETTINGS_BACKUP_DATA,
                    /* count= */ 1,
                    ERROR_FAILED_TO_RESTORE_WIFI_SETTINGS_BACKUP_DATA);
            }
        } else {
            mWifiManager.restoreWifiBackupData(data);
        }
    }

    private void updateWindowManagerIfNeeded(Integer previousDensity) {
        int newDensity;
+45 −0
Original line number Diff line number Diff line
@@ -19,6 +19,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 com.android.providers.settings.SettingsBackupRestoreKeys.KEY_SIM_SPECIFIC_SETTINGS_2;
import static com.android.providers.settings.SettingsBackupRestoreKeys.KEY_WIFI_SETTINGS_BACKUP_DATA;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
@@ -969,6 +970,50 @@ public class SettingsBackupAgentTest extends BaseSettingsProviderTest {
        assertNull(getLoggingResultForDatatype(KEY_SIM_SPECIFIC_SETTINGS_2, mAgentUnderTest));
    }

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

        mAgentUnderTest.restoreWifiData(new byte[0]);

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

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

        mAgentUnderTest.restoreWifiData(new byte[0]);

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

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

        mAgentUnderTest.restoreWifiData(new byte[0]);

        assertNull(getLoggingResultForDatatype(KEY_WIFI_SETTINGS_BACKUP_DATA, mAgentUnderTest));
    }

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