Loading services/backup/java/com/android/server/backup/transport/TransportConnection.java +11 −3 Original line number Diff line number Diff line Loading @@ -658,11 +658,13 @@ public class TransportConnection { * This class is a proxy to TransportClient methods that doesn't hold a strong reference to the * TransportClient, allowing it to be GC'ed. If the reference was lost it logs a message. */ private static class TransportConnectionMonitor implements ServiceConnection { @VisibleForTesting static class TransportConnectionMonitor implements ServiceConnection { private final Context mContext; private final WeakReference<TransportConnection> mTransportClientRef; private TransportConnectionMonitor(Context context, @VisibleForTesting TransportConnectionMonitor(Context context, TransportConnection transportConnection) { mContext = context; mTransportClientRef = new WeakReference<>(transportConnection); Loading Loading @@ -704,7 +706,13 @@ public class TransportConnection { /** @see TransportConnection#finalize() */ private void referenceLost(String caller) { try { mContext.unbindService(this); } catch (IllegalArgumentException e) { TransportUtils.log(Priority.WARN, TAG, caller + " called but unbindService failed: " + e.getMessage()); return; } TransportUtils.log( Priority.INFO, TAG, Loading services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -543,6 +544,18 @@ public class TransportConnectionTest { return future.get(); } @Test public void onBindingDied_referenceLost_doesNotThrow() { TransportConnection.TransportConnectionMonitor transportConnectionMonitor = new TransportConnection.TransportConnectionMonitor( mContext, /* transportConnection= */ null); doThrow(new IllegalArgumentException("Service not registered")).when( mContext).unbindService(any()); // Test no exception is thrown transportConnectionMonitor.onBindingDied(mTransportComponent); } private ServiceConnection verifyBindServiceAsUserAndCaptureServiceConnection(Context context) { ArgumentCaptor<ServiceConnection> connectionCaptor = ArgumentCaptor.forClass(ServiceConnection.class); Loading Loading
services/backup/java/com/android/server/backup/transport/TransportConnection.java +11 −3 Original line number Diff line number Diff line Loading @@ -658,11 +658,13 @@ public class TransportConnection { * This class is a proxy to TransportClient methods that doesn't hold a strong reference to the * TransportClient, allowing it to be GC'ed. If the reference was lost it logs a message. */ private static class TransportConnectionMonitor implements ServiceConnection { @VisibleForTesting static class TransportConnectionMonitor implements ServiceConnection { private final Context mContext; private final WeakReference<TransportConnection> mTransportClientRef; private TransportConnectionMonitor(Context context, @VisibleForTesting TransportConnectionMonitor(Context context, TransportConnection transportConnection) { mContext = context; mTransportClientRef = new WeakReference<>(transportConnection); Loading Loading @@ -704,7 +706,13 @@ public class TransportConnection { /** @see TransportConnection#finalize() */ private void referenceLost(String caller) { try { mContext.unbindService(this); } catch (IllegalArgumentException e) { TransportUtils.log(Priority.WARN, TAG, caller + " called but unbindService failed: " + e.getMessage()); return; } TransportUtils.log( Priority.INFO, TAG, Loading
services/robotests/backup/src/com/android/server/backup/transport/TransportConnectionTest.java +13 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -543,6 +544,18 @@ public class TransportConnectionTest { return future.get(); } @Test public void onBindingDied_referenceLost_doesNotThrow() { TransportConnection.TransportConnectionMonitor transportConnectionMonitor = new TransportConnection.TransportConnectionMonitor( mContext, /* transportConnection= */ null); doThrow(new IllegalArgumentException("Service not registered")).when( mContext).unbindService(any()); // Test no exception is thrown transportConnectionMonitor.onBindingDied(mTransportComponent); } private ServiceConnection verifyBindServiceAsUserAndCaptureServiceConnection(Context context) { ArgumentCaptor<ServiceConnection> connectionCaptor = ArgumentCaptor.forClass(ServiceConnection.class); Loading