diff options
author | 2022-10-31 13:54:42 +0000 | |
---|---|---|
committer | 2022-11-20 20:44:29 +0000 | |
commit | 104604674f01be4cf4b9d35d38ed14bd1046e987 (patch) | |
tree | e65a47ce130db12e8a43e7683ecbe3f80c0cd9c8 /services/robotests/backup | |
parent | f9ca7a2ffd2e7fdad707e449f249c4826d02575d (diff) |
Pass agent logs to monitor after package B&R
In this change B&R tasks ask for logs from each BackupAgent after it is
backed up or restored. These logs are then immediately passed on to the
BackupManagerMonitor.
Bug: 252760247
Change-Id: Iaf43ce61e98bb4b42c05c18a46031a06d41abb12
Test: $ atest BackupFrameworksServicesRoboTests:KeyValueBackupTaskTest
$ atest BackupManagerMonitorUtilsTest
Unfortunately, the other classes are not unit testable.
For manual testing, I implemented some fake loggers for various
BackupAgents, passed in a fake BackupManagerMonitor, ran B&R with the
following commands, and observed that the monitor received the logs.
1. $ adb shell bmgr backupnow --all
2. $ adb shell bmgr restore ... (for one KV and one FullBackup package)
Diffstat (limited to 'services/robotests/backup')
-rw-r--r-- | services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java index 962a07ac6553..298cbf3e61b9 100644 --- a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java +++ b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java @@ -77,6 +77,8 @@ import android.app.backup.BackupAgent; import android.app.backup.BackupDataInput; import android.app.backup.BackupDataOutput; import android.app.backup.BackupManager; +import android.app.backup.BackupManagerMonitor; +import android.app.backup.BackupRestoreEventLogger; import android.app.backup.BackupTransport; import android.app.backup.IBackupCallback; import android.app.backup.IBackupManager; @@ -89,6 +91,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; import android.net.Uri; +import android.os.Bundle; import android.os.ConditionVariable; import android.os.DeadObjectException; import android.os.Handler; @@ -100,6 +103,7 @@ import android.platform.test.annotations.Presubmit; import android.util.Pair; import com.android.internal.backup.IBackupTransport; +import com.android.internal.infra.AndroidFuture; import com.android.server.EventLogTags; import com.android.server.LocalServices; import com.android.server.backup.BackupRestoreTask; @@ -131,6 +135,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.InOrder; import org.mockito.Mock; @@ -1448,6 +1453,36 @@ public class KeyValueBackupTaskTest { } @Test + public void testRunTask_whenFinishBackupSucceeds_sendsAgentLogsToMonitor() throws Exception { + TransportMock transportMock = setUpInitializedTransport(mTransport); + AgentMock agentMock = setUpAgentWithData(PACKAGE_1); + KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1); + // Mock the agent logging and returning its logs. + List<BackupRestoreEventLogger.DataTypeResult> results = new ArrayList<>(); + results.add(new BackupRestoreEventLogger.DataTypeResult("testDataTypeResult")); + doAnswer( + invocation -> { + AndroidFuture<List<BackupRestoreEventLogger.DataTypeResult>> in = + invocation.getArgument(0); + in.complete(results); + return null; + }) + .when(agentMock.agentBinder) + .getLoggerResults(any()); + + runTask(task); + + ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class); + verify(mMonitor).onEvent(bundleCaptor.capture()); + Bundle eventBundle = bundleCaptor.getValue(); + List<BackupRestoreEventLogger.DataTypeResult> sentLoggingResults = + eventBundle.getParcelableArrayList( + BackupManagerMonitor.EXTRA_LOG_AGENT_LOGGING_RESULTS, + BackupRestoreEventLogger.DataTypeResult.class); + assertThat(sentLoggingResults.get(0).getDataType()).isEqualTo("testDataTypeResult"); + } + + @Test public void testRunTask_whenFinishBackupSucceeds_notifiesCorrectly() throws Exception { TransportMock transportMock = setUpInitializedTransport(mTransport); setUpAgentWithData(PACKAGE_1); |