From 622b968123f96fffcfe336908dc559c4e123759a Mon Sep 17 00:00:00 2001 From: Ruslan Tkhakokhov Date: Sat, 4 Dec 2021 11:12:20 +0000 Subject: [PATCH] Wrap IBackupTransport usages with BackupTransportClient Bug: 202716271 Change-Id: I4899fea3342f9e913fa1afa14ed7b67481f02908 --- .../server/backup/TransportManager.java | 11 ++-- .../transport/BackupTransportClient.java | 5 ++ .../backup/transport/TransportConnection.java | 60 ++++++++++--------- .../TransportConnectionListener.java | 11 ++-- .../backup/UserBackupManagerService.java | 7 ++- .../PerformFullTransportBackupTask.java | 8 +-- .../server/backup/internal/BackupHandler.java | 6 +- .../backup/internal/PerformClearTask.java | 4 +- .../internal/PerformInitializeTask.java | 5 +- .../backup/keyvalue/KeyValueBackupTask.java | 34 ++++++----- .../restore/PerformUnifiedRestoreTask.java | 15 ++--- .../backup/utils/BackupEligibilityRules.java | 4 +- .../internal/PerformInitializeTaskTest.java | 46 +++++++------- .../backup/testing/TransportTestUtils.java | 13 ++-- .../transport/TransportConnectionTest.java | 33 ++++++---- .../backup/UserBackupManagerServiceTest.java | 7 +-- 16 files changed, 144 insertions(+), 125 deletions(-) diff --git a/services/backup/backuplib/java/com/android/server/backup/TransportManager.java b/services/backup/backuplib/java/com/android/server/backup/TransportManager.java index 594140efe5f29..21a22f44f3ddb 100644 --- a/services/backup/backuplib/java/com/android/server/backup/TransportManager.java +++ b/services/backup/backuplib/java/com/android/server/backup/TransportManager.java @@ -39,6 +39,7 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.backup.IBackupTransport; import com.android.internal.util.Preconditions; +import com.android.server.backup.transport.BackupTransportClient; import com.android.server.backup.transport.OnTransportRegisteredListener; import com.android.server.backup.transport.TransportConnection; import com.android.server.backup.transport.TransportConnectionManager; @@ -641,7 +642,7 @@ public class TransportManager { TransportConnection transportConnection = mTransportConnectionManager.getTransportClient( transportComponent, extras, callerLogString); - final IBackupTransport transport; + final BackupTransportClient transport; try { transport = transportConnection.connectOrThrow(callerLogString); } catch (TransportNotAvailableException e) { @@ -653,10 +654,6 @@ public class TransportManager { int result; try { - // This is a temporary fix to allow blocking calls. - // TODO: b/147702043. Redesign IBackupTransport so as to make the calls non-blocking. - Binder.allowBlocking(transport.asBinder()); - String transportName = transport.name(); String transportDirName = transport.transportDirName(); registerTransport(transportComponent, transport); @@ -674,8 +671,8 @@ public class TransportManager { } /** If {@link RemoteException} is thrown the transport is guaranteed to not be registered. */ - private void registerTransport(ComponentName transportComponent, IBackupTransport transport) - throws RemoteException { + private void registerTransport(ComponentName transportComponent, + BackupTransportClient transport) throws RemoteException { checkCanUseTransport(); TransportDescription description = diff --git a/services/backup/backuplib/java/com/android/server/backup/transport/BackupTransportClient.java b/services/backup/backuplib/java/com/android/server/backup/transport/BackupTransportClient.java index a3f6eb6f98425..85ab48c5f7fb5 100644 --- a/services/backup/backuplib/java/com/android/server/backup/transport/BackupTransportClient.java +++ b/services/backup/backuplib/java/com/android/server/backup/transport/BackupTransportClient.java @@ -21,6 +21,7 @@ import android.app.backup.RestoreDescription; import android.app.backup.RestoreSet; import android.content.Intent; import android.content.pm.PackageInfo; +import android.os.Binder; import android.os.ParcelFileDescriptor; import android.os.RemoteException; @@ -35,6 +36,10 @@ public class BackupTransportClient { BackupTransportClient(IBackupTransport transportBinder) { mTransportBinder = transportBinder; + + // This is a temporary fix to allow blocking calls. + // TODO: b/147702043. Redesign IBackupTransport so as to make the calls non-blocking. + Binder.allowBlocking(mTransportBinder.asBinder()); } /** diff --git a/services/backup/backuplib/java/com/android/server/backup/transport/TransportConnection.java b/services/backup/backuplib/java/com/android/server/backup/transport/TransportConnection.java index da77eba083c3b..f9a3c36a3220e 100644 --- a/services/backup/backuplib/java/com/android/server/backup/transport/TransportConnection.java +++ b/services/backup/backuplib/java/com/android/server/backup/transport/TransportConnection.java @@ -59,7 +59,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; /** - * A {@link TransportConnection} manages the connection to an {@link IBackupTransport} service, + * A {@link TransportConnection} manages the connection to a {@link BackupTransportClient}, * obtained via the {@param bindIntent} parameter provided in the constructor. A * {@link TransportConnection} is responsible for only one connection to the transport service, * not more. @@ -67,9 +67,9 @@ import java.util.concurrent.ExecutionException; *

After retrieved using {@link TransportManager#getTransportClient(String, String)}, you can * call either {@link #connect(String)}, if you can block your thread, or {@link * #connectAsync(TransportConnectionListener, String)}, otherwise, to obtain a {@link - * IBackupTransport} instance. It's meant to be passed around as a token to a connected transport. - * When the connection is not needed anymore you should call {@link #unbind(String)} or indirectly - * via {@link TransportManager#disposeOfTransportClient(TransportConnection, String)}. + * BackupTransportClient} instance. It's meant to be passed around as a token to a connected + * transport. When the connection is not needed anymore you should call {@link #unbind(String)} or + * indirectly via {@link TransportManager#disposeOfTransportClient(TransportConnection, String)}. * *

DO NOT forget to unbind otherwise there will be dangling connections floating around. * @@ -106,7 +106,7 @@ public class TransportConnection { private int mState = State.IDLE; @GuardedBy("mStateLock") - private volatile IBackupTransport mTransport; + private volatile BackupTransportClient mTransport; TransportConnection( @UserIdInt int userId, @@ -174,10 +174,12 @@ public class TransportConnection { * trigger another one, just piggyback on the original request. * *

It's guaranteed that you are going to get a call back to {@param listener} after this - * call. However, the {@param IBackupTransport} parameter, the transport binder, is not - * guaranteed to be non-null, or if it's non-null it's not guaranteed to be usable - i.e. it can - * throw {@link DeadObjectException}s on method calls. You should check for both in your code. - * The reasons for a null transport binder are: + * call. However, the {@link BackupTransportClient} parameter in + * {@link TransportConnectionListener#onTransportConnectionResult(BackupTransportClient, + * TransportConnection)}, the transport client, is not guaranteed to be non-null, or if it's + * non-null it's not guaranteed to be usable - i.e. it can throw {@link DeadObjectException}s + * on method calls. You should check for both in your code. The reasons for a null transport + * client are: * *

* * If there is no PackageManager (PM) pseudo-package state file in the state directory, the - * specified transport will be initialized with {@link IBackupTransport#initializeDevice()}. + * specified transport will be initialized with {@link BackupTransportClient#initializeDevice()}. * *

The PM pseudo-package is the first package to be backed-up and sent to the transport in case * of incremental choice. If non-incremental, PM will only be backed-up if specified in the queue, @@ -141,8 +141,8 @@ import java.util.concurrent.atomic.AtomicInteger; * *

  • Unbind the agent. *
  • Assuming agent response, send the staged data that the agent wrote to disk to the transport - * via {@link IBackupTransport#performBackup(PackageInfo, ParcelFileDescriptor, int)}. - *
  • Call {@link IBackupTransport#finishBackup()} if previous call was successful. + * via {@link BackupTransportClient#performBackup(PackageInfo, ParcelFileDescriptor, int)}. + *
  • Call {@link BackupTransportClient#finishBackup()} if previous call was successful. *
  • Save the new state in the state file. During the agent call it was being written to * <state file>.new, here we rename it and replace the old one. *
  • Delete the stage file. @@ -155,7 +155,7 @@ import java.util.concurrent.atomic.AtomicInteger; *
  • Delete the {@link DataChangedJournal} provided. Note that this should not be the current * journal. *
  • Set {@link UserBackupManagerService} current token as {@link - * IBackupTransport#getCurrentRestoreSet()}, if applicable. + * BackupTransportClient#getCurrentRestoreSet()}, if applicable. *
  • Add the transport to the list of transports pending initialization ({@link * UserBackupManagerService#getPendingInits()}) and kick-off initialization if the transport * ever returned {@link BackupTransport#TRANSPORT_NOT_INITIALIZED}. @@ -194,7 +194,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { * @param backupManagerService The {@link UserBackupManagerService} instance. * @param transportConnection The {@link TransportConnection} that contains the transport used * for the operation. - * @param transportDirName The value of {@link IBackupTransport#transportDirName()} for the + * @param transportDirName The value of {@link BackupTransportClient#transportDirName()} for the * transport whose {@link TransportConnection} was provided above. * @param queue The list of package names that will be backed-up. * @param dataChangedJournal The old data-changed journal file that will be deleted when the @@ -417,7 +417,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { boolean noDataPackageEncountered = false; try { - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow("KVBT.informTransportOfEmptyBackups()"); for (String packageName : succeedingPackages) { @@ -467,8 +467,8 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { } /** Send the "no data changed" message to a transport for a specific package */ - private void sendNoDataChangedTo(IBackupTransport transport, PackageInfo packageInfo, int flags) - throws RemoteException { + private void sendNoDataChangedTo(BackupTransportClient transport, PackageInfo packageInfo, + int flags) throws RemoteException { ParcelFileDescriptor pfd; try { pfd = ParcelFileDescriptor.open(mBlankStateFile, MODE_READ_ONLY | MODE_CREATE); @@ -608,7 +608,8 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { mReporter.onQueueReady(mQueue); File pmState = new File(mStateDirectory, PM_PACKAGE); try { - IBackupTransport transport = mTransportConnection.connectOrThrow("KVBT.startTask()"); + BackupTransportClient transport = mTransportConnection.connectOrThrow( + "KVBT.startTask()"); String transportName = transport.name(); if (transportName.contains("EncryptedLocalTransport")) { // Temporary code for EiTF POC. Only supports non-incremental backups. @@ -764,7 +765,8 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { long currentToken = mBackupManagerService.getCurrentToken(); if (mHasDataToBackup && (status == BackupTransport.TRANSPORT_OK) && (currentToken == 0)) { try { - IBackupTransport transport = mTransportConnection.connectOrThrow(callerLogString); + BackupTransportClient transport = mTransportConnection.connectOrThrow( + callerLogString); transportName = transport.name(); mBackupManagerService.setCurrentToken(transport.getCurrentRestoreSet()); mBackupManagerService.writeRestoreTokens(); @@ -835,7 +837,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { @GuardedBy("mQueueLock") private void triggerTransportInitializationLocked() throws Exception { - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow("KVBT.triggerTransportInitializationLocked"); mBackupManagerService.getPendingInits().add(transport.name()); deletePmStateFile(); @@ -919,7 +921,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { } } - IBackupTransport transport = mTransportConnection.connectOrThrow( + BackupTransportClient transport = mTransportConnection.connectOrThrow( "KVBT.extractAgentData()"); long quota = transport.getBackupQuota(packageName, /* isFullBackup */ false); int transportFlags = transport.getTransportFlags(); @@ -1078,7 +1080,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { int status; try (ParcelFileDescriptor backupData = ParcelFileDescriptor.open(backupDataFile, MODE_READ_ONLY)) { - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow("KVBT.transportPerformBackup()"); mReporter.onTransportPerformBackup(packageName); int flags = getPerformBackupFlags(mUserInitiated, nonIncremental); @@ -1131,7 +1133,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { private void agentDoQuotaExceeded(@Nullable IBackupAgent agent, String packageName, long size) { if (agent != null) { try { - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow("KVBT.agentDoQuotaExceeded()"); long quota = transport.getBackupQuota(packageName, false); remoteCall( @@ -1227,7 +1229,7 @@ public class KeyValueBackupTask implements BackupRestoreTask, Runnable { mReporter.onRevertTask(); long delay; try { - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow("KVBT.revertTask()"); delay = transport.requestBackupTime(); } catch (Exception e) { diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java index 8c786d5565180..ac831af7612b7 100644 --- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java +++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java @@ -54,7 +54,6 @@ import android.util.EventLog; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.backup.IBackupTransport; import com.android.server.AppWidgetBackupBridge; import com.android.server.EventLogTags; import com.android.server.LocalServices; @@ -66,6 +65,7 @@ import com.android.server.backup.PackageManagerBackupAgent.Metadata; import com.android.server.backup.TransportManager; import com.android.server.backup.UserBackupManagerService; import com.android.server.backup.internal.OnTaskFinishedListener; +import com.android.server.backup.transport.BackupTransportClient; import com.android.server.backup.transport.TransportConnection; import com.android.server.backup.utils.BackupEligibilityRules; import com.android.server.backup.utils.BackupManagerMonitorUtils; @@ -397,7 +397,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { PackageInfo[] packages = mAcceptSet.toArray(new PackageInfo[0]); - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow("PerformUnifiedRestoreTask.startRestore()"); mStatus = transport.startRestore(mToken, packages); @@ -495,7 +495,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { private void dispatchNextRestore() { UnifiedRestoreState nextState = UnifiedRestoreState.FINAL; try { - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow( "PerformUnifiedRestoreTask.dispatchNextRestore()"); mRestoreDescription = transport.nextRestorePackage(); @@ -709,7 +709,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { boolean startedAgentRestore = false; try { - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow( "PerformUnifiedRestoreTask.initiateOneRestore()"); @@ -940,7 +940,8 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { String callerLogString = "PerformUnifiedRestoreTask$StreamFeederThread.run()"; try { - IBackupTransport transport = mTransportConnection.connectOrThrow(callerLogString); + BackupTransportClient transport = mTransportConnection.connectOrThrow( + callerLogString); while (status == BackupTransport.TRANSPORT_OK) { // have the transport write some of the restoring data to us int result = transport.getNextFullRestoreDataChunk(tWriteEnd); @@ -1032,7 +1033,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // Something went wrong somewhere. Whether it was at the transport // level is immaterial; we need to tell the transport to bail try { - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow(callerLogString); transport.abortFullRestore(); } catch (Exception e) { @@ -1095,7 +1096,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { String callerLogString = "PerformUnifiedRestoreTask.finalizeRestore()"; try { - IBackupTransport transport = + BackupTransportClient transport = mTransportConnection.connectOrThrow(callerLogString); transport.finishRestore(); } catch (Exception e) { diff --git a/services/backup/java/com/android/server/backup/utils/BackupEligibilityRules.java b/services/backup/java/com/android/server/backup/utils/BackupEligibilityRules.java index 652386f13bead..bd1ac2dcffda4 100644 --- a/services/backup/java/com/android/server/backup/utils/BackupEligibilityRules.java +++ b/services/backup/java/com/android/server/backup/utils/BackupEligibilityRules.java @@ -40,8 +40,8 @@ import android.os.UserHandle; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.backup.IBackupTransport; import com.android.internal.util.ArrayUtils; +import com.android.server.backup.transport.BackupTransportClient; import com.android.server.backup.transport.TransportConnection; import com.google.android.collect.Sets; @@ -237,7 +237,7 @@ public class BackupEligibilityRules { } if (transportConnection != null) { try { - IBackupTransport transport = + BackupTransportClient transport = transportConnection.connectOrThrow( "AppBackupUtils.appIsRunningAndEligibleForBackupWithTransport"); return transport.isAppEligibleForBackup( diff --git a/services/robotests/backup/src/com/android/server/backup/internal/PerformInitializeTaskTest.java b/services/robotests/backup/src/com/android/server/backup/internal/PerformInitializeTaskTest.java index bf4eeae4b4b28..856165100f994 100644 --- a/services/robotests/backup/src/com/android/server/backup/internal/PerformInitializeTaskTest.java +++ b/services/robotests/backup/src/com/android/server/backup/internal/PerformInitializeTaskTest.java @@ -43,13 +43,13 @@ import android.os.DeadObjectException; import android.platform.test.annotations.Presubmit; import android.util.Log; -import com.android.internal.backup.IBackupTransport; import com.android.server.backup.BackupManagerService; import com.android.server.backup.TransportManager; import com.android.server.backup.UserBackupManagerService; import com.android.server.backup.testing.TransportData; import com.android.server.backup.testing.TransportTestUtils; import com.android.server.backup.testing.TransportTestUtils.TransportMock; +import com.android.server.backup.transport.BackupTransportClient; import com.android.server.backup.transport.TransportConnection; import com.android.server.testing.shadows.ShadowSlog; @@ -75,7 +75,7 @@ public class PerformInitializeTaskTest { @Mock private UserBackupManagerService mBackupManagerService; @Mock private TransportManager mTransportManager; @Mock private OnTaskFinishedListener mListener; - @Mock private IBackupTransport mTransportBinder; + @Mock private BackupTransportClient mTransportClient; @Mock private IBackupObserver mObserver; @Mock private AlarmManager mAlarmManager; @Mock private PendingIntent mRunInitIntent; @@ -101,19 +101,19 @@ public class PerformInitializeTaskTest { @Test public void testRun_callsTransportCorrectly() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_OK); + configureTransport(mTransportClient, TRANSPORT_OK, TRANSPORT_OK); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); - verify(mTransportBinder).initializeDevice(); - verify(mTransportBinder).finishBackup(); + verify(mTransportClient).initializeDevice(); + verify(mTransportClient).finishBackup(); } @Test public void testRun_callsBackupManagerCorrectly() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_OK); + configureTransport(mTransportClient, TRANSPORT_OK, TRANSPORT_OK); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); @@ -127,7 +127,7 @@ public class PerformInitializeTaskTest { @Test public void testRun_callsObserverAndListenerCorrectly() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_OK); + configureTransport(mTransportClient, TRANSPORT_OK, TRANSPORT_OK); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); @@ -140,13 +140,13 @@ public class PerformInitializeTaskTest { @Test public void testRun_whenInitializeDeviceFails() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_ERROR, 0); + configureTransport(mTransportClient, TRANSPORT_ERROR, 0); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); - verify(mTransportBinder).initializeDevice(); - verify(mTransportBinder, never()).finishBackup(); + verify(mTransportClient).initializeDevice(); + verify(mTransportClient, never()).finishBackup(); verify(mBackupManagerService) .recordInitPending(true, mTransportName, mTransport.transportDirName); } @@ -155,7 +155,7 @@ public class PerformInitializeTaskTest { public void testRun_whenInitializeDeviceFails_callsObserverAndListenerCorrectly() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_ERROR, 0); + configureTransport(mTransportClient, TRANSPORT_ERROR, 0); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); @@ -168,7 +168,7 @@ public class PerformInitializeTaskTest { @Test public void testRun_whenInitializeDeviceFails_schedulesAlarm() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_ERROR, 0); + configureTransport(mTransportClient, TRANSPORT_ERROR, 0); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); @@ -179,13 +179,13 @@ public class PerformInitializeTaskTest { @Test public void testRun_whenFinishBackupFails() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_ERROR); + configureTransport(mTransportClient, TRANSPORT_OK, TRANSPORT_ERROR); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); - verify(mTransportBinder).initializeDevice(); - verify(mTransportBinder).finishBackup(); + verify(mTransportClient).initializeDevice(); + verify(mTransportClient).finishBackup(); verify(mBackupManagerService) .recordInitPending(true, mTransportName, mTransport.transportDirName); } @@ -193,7 +193,7 @@ public class PerformInitializeTaskTest { @Test public void testRun_whenFinishBackupFails_callsObserverAndListenerCorrectly() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_ERROR); + configureTransport(mTransportClient, TRANSPORT_OK, TRANSPORT_ERROR); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); @@ -206,7 +206,7 @@ public class PerformInitializeTaskTest { @Test public void testRun_whenFinishBackupFails_logs() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_ERROR); + configureTransport(mTransportClient, TRANSPORT_OK, TRANSPORT_ERROR); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); @@ -219,7 +219,7 @@ public class PerformInitializeTaskTest { @Test public void testRun_whenInitializeDeviceFails_logs() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_ERROR, 0); + configureTransport(mTransportClient, TRANSPORT_ERROR, 0); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); @@ -232,7 +232,7 @@ public class PerformInitializeTaskTest { @Test public void testRun_whenFinishBackupFails_schedulesAlarm() throws Exception { setUpTransport(mTransport); - configureTransport(mTransportBinder, TRANSPORT_OK, TRANSPORT_ERROR); + configureTransport(mTransportClient, TRANSPORT_OK, TRANSPORT_ERROR); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); performInitializeTask.run(); @@ -327,7 +327,7 @@ public class PerformInitializeTaskTest { List transportMocks = setUpTransports(mTransportManager, transport1, transport2); String registeredTransportName = transport2.transportName; - IBackupTransport registeredTransport = transportMocks.get(1).transport; + BackupTransportClient registeredTransport = transportMocks.get(1).transport; TransportConnection registeredTransportConnection = transportMocks.get(1).mTransportConnection; PerformInitializeTask performInitializeTask = @@ -357,7 +357,7 @@ public class PerformInitializeTaskTest { @Test public void testRun_whenTransportThrowsDeadObjectException() throws Exception { TransportMock transportMock = setUpTransport(mTransport); - IBackupTransport transport = transportMock.transport; + BackupTransportClient transport = transportMock.transport; TransportConnection transportConnection = transportMock.mTransportConnection; when(transport.initializeDevice()).thenThrow(DeadObjectException.class); PerformInitializeTask performInitializeTask = createPerformInitializeTask(mTransportName); @@ -380,7 +380,7 @@ public class PerformInitializeTaskTest { } private void configureTransport( - IBackupTransport transportMock, int initializeDeviceStatus, int finishBackupStatus) + BackupTransportClient transportMock, int initializeDeviceStatus, int finishBackupStatus) throws Exception { when(transportMock.initializeDevice()).thenReturn(initializeDeviceStatus); when(transportMock.finishBackup()).thenReturn(finishBackupStatus); @@ -389,7 +389,7 @@ public class PerformInitializeTaskTest { private TransportMock setUpTransport(TransportData transport) throws Exception { TransportMock transportMock = TransportTestUtils.setUpTransport(mTransportManager, transport); - mTransportBinder = transportMock.transport; + mTransportClient = transportMock.transport; return transportMock; } } diff --git a/services/robotests/backup/src/com/android/server/backup/testing/TransportTestUtils.java b/services/robotests/backup/src/com/android/server/backup/testing/TransportTestUtils.java index ce44f067aeaac..8131ac412d524 100644 --- a/services/robotests/backup/src/com/android/server/backup/testing/TransportTestUtils.java +++ b/services/robotests/backup/src/com/android/server/backup/testing/TransportTestUtils.java @@ -34,8 +34,8 @@ import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.os.RemoteException; -import com.android.internal.backup.IBackupTransport; import com.android.server.backup.TransportManager; +import com.android.server.backup.transport.BackupTransportClient; import com.android.server.backup.transport.TransportConnection; import com.android.server.backup.transport.TransportNotAvailableException; import com.android.server.backup.transport.TransportNotRegisteredException; @@ -160,7 +160,7 @@ public class TransportTestUtils { when(transportConnectionMock.getTransportComponent()).thenReturn(transportComponent); if (status == TransportStatus.REGISTERED_AVAILABLE) { // Transport registered and available - IBackupTransport transportMock = mockTransportBinder(transport); + BackupTransportClient transportMock = mockTransportBinder(transport); when(transportConnectionMock.connectOrThrow(any())).thenReturn(transportMock); when(transportConnectionMock.connect(any())).thenReturn(transportMock); @@ -179,8 +179,9 @@ public class TransportTestUtils { } } - private static IBackupTransport mockTransportBinder(TransportData transport) throws Exception { - IBackupTransport transportBinder = mock(IBackupTransport.class); + private static BackupTransportClient mockTransportBinder(TransportData transport) + throws Exception { + BackupTransportClient transportBinder = mock(BackupTransportClient.class); try { when(transportBinder.name()).thenReturn(transport.transportName); when(transportBinder.transportDirName()).thenReturn(transport.transportDirName); @@ -199,12 +200,12 @@ public class TransportTestUtils { public static class TransportMock { public final TransportData transportData; @Nullable public final TransportConnection mTransportConnection; - @Nullable public final IBackupTransport transport; + @Nullable public final BackupTransportClient transport; private TransportMock( TransportData transportData, @Nullable TransportConnection transportConnection, - @Nullable IBackupTransport transport) { + @Nullable BackupTransportClient transport) { this.transportData = transportData; this.mTransportConnection = transportConnection; this.transport = transport; diff --git a/services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java b/services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java index de4aec61aef26..6a82f16564140 100644 --- a/services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java +++ b/services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java @@ -84,9 +84,11 @@ public class TransportConnectionTest { @Mock private TransportConnectionListener mTransportConnectionListener; @Mock private TransportConnectionListener mTransportConnectionListener2; @Mock private IBackupTransport.Stub mTransportBinder; + @UserIdInt private int mUserId; private TransportStats mTransportStats; private TransportConnection mTransportConnection; + private BackupTransportClient mTransportClient; private ComponentName mTransportComponent; private String mTransportString; private Intent mBindIntent; @@ -116,6 +118,7 @@ public class TransportConnectionTest { "1", "caller", new Handler(mainLooper)); + mTransportClient = new BackupTransportClient(mTransportBinder); when(mContext.bindServiceAsUser( eq(mBindIntent), @@ -156,7 +159,8 @@ public class TransportConnectionTest { mShadowMainLooper.runToEndOfTasks(); verify(mTransportConnectionListener) - .onTransportConnectionResult(any(IBackupTransport.class), eq(mTransportConnection)); + .onTransportConnectionResult(any(BackupTransportClient.class), + eq(mTransportConnection)); } @Test @@ -169,9 +173,11 @@ public class TransportConnectionTest { connection.onServiceConnected(mTransportComponent, mTransportBinder); mShadowMainLooper.runToEndOfTasks(); verify(mTransportConnectionListener) - .onTransportConnectionResult(any(IBackupTransport.class), eq(mTransportConnection)); + .onTransportConnectionResult(any(BackupTransportClient.class), + eq(mTransportConnection)); verify(mTransportConnectionListener2) - .onTransportConnectionResult(any(IBackupTransport.class), eq(mTransportConnection)); + .onTransportConnectionResult(any(BackupTransportClient.class), + eq(mTransportConnection)); } @Test @@ -184,7 +190,8 @@ public class TransportConnectionTest { mShadowMainLooper.runToEndOfTasks(); verify(mTransportConnectionListener2) - .onTransportConnectionResult(any(IBackupTransport.class), eq(mTransportConnection)); + .onTransportConnectionResult(any(BackupTransportClient.class), + eq(mTransportConnection)); } @Test @@ -312,10 +319,10 @@ public class TransportConnectionTest { ServiceConnection connection = verifyBindServiceAsUserAndCaptureServiceConnection(mContext); connection.onServiceConnected(mTransportComponent, mTransportBinder); - IBackupTransport transportBinder = + BackupTransportClient transportClient = runInWorkerThread(() -> mTransportConnection.connect("caller2")); - assertThat(transportBinder).isNotNull(); + assertThat(transportClient).isNotNull(); } @Test @@ -325,10 +332,10 @@ public class TransportConnectionTest { connection.onServiceConnected(mTransportComponent, mTransportBinder); connection.onServiceDisconnected(mTransportComponent); - IBackupTransport transportBinder = + BackupTransportClient transportClient = runInWorkerThread(() -> mTransportConnection.connect("caller2")); - assertThat(transportBinder).isNull(); + assertThat(transportClient).isNull(); } @Test @@ -337,10 +344,10 @@ public class TransportConnectionTest { ServiceConnection connection = verifyBindServiceAsUserAndCaptureServiceConnection(mContext); connection.onBindingDied(mTransportComponent); - IBackupTransport transportBinder = + BackupTransportClient transportClient = runInWorkerThread(() -> mTransportConnection.connect("caller2")); - assertThat(transportBinder).isNull(); + assertThat(transportClient).isNull(); } @Test @@ -354,17 +361,17 @@ public class TransportConnectionTest { doAnswer( invocation -> { TransportConnectionListener listener = invocation.getArgument(0); - listener.onTransportConnectionResult(mTransportBinder, + listener.onTransportConnectionResult(mTransportClient, transportConnection); return null; }) .when(transportConnection) .connectAsync(any(), any()); - IBackupTransport transportBinder = + BackupTransportClient transportClient = runInWorkerThread(() -> transportConnection.connect("caller")); - assertThat(transportBinder).isNotNull(); + assertThat(transportClient).isNotNull(); } @Test diff --git a/services/tests/servicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java index aa7d6aa7de717..c36e1a841a7d6 100644 --- a/services/tests/servicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java @@ -31,13 +31,13 @@ import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import com.android.internal.backup.IBackupTransport; import android.platform.test.annotations.Presubmit; import androidx.test.runner.AndroidJUnit4; import com.android.server.backup.internal.OnTaskFinishedListener; import com.android.server.backup.params.BackupParams; +import com.android.server.backup.transport.BackupTransportClient; import com.android.server.backup.transport.TransportConnection; import com.android.server.backup.utils.BackupEligibilityRules; @@ -57,9 +57,8 @@ public class UserBackupManagerServiceTest { @Mock IBackupManagerMonitor mBackupManagerMonitor; @Mock IBackupObserver mBackupObserver; @Mock PackageManager mPackageManager; - @Mock - TransportConnection mTransportConnection; - @Mock IBackupTransport mBackupTransport; + @Mock TransportConnection mTransportConnection; + @Mock BackupTransportClient mBackupTransport; @Mock BackupEligibilityRules mBackupEligibilityRules;