summaryrefslogtreecommitdiff
path: root/services/robotests/backup
diff options
context:
space:
mode:
author Sarp Misoglu <sarpm@google.com> 2022-10-31 13:54:42 +0000
committer Sarp Misoglu <sarpm@google.com> 2022-11-20 20:44:29 +0000
commit104604674f01be4cf4b9d35d38ed14bd1046e987 (patch)
treee65a47ce130db12e8a43e7683ecbe3f80c0cd9c8 /services/robotests/backup
parentf9ca7a2ffd2e7fdad707e449f249c4826d02575d (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.java35
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);