From a4517cdb7d99d076bfed2a81ec9511fcae68487a Mon Sep 17 00:00:00 2001 From: Bernardo Rufino Date: Fri, 19 Jan 2018 11:22:44 +0000 Subject: Remove use of streams in TransportManager Test: m -j RunFrameworksServicesRoboTests Change-Id: Ie5d81ca9e8c8fcda482fa520aa46841800b88210 --- .../android/server/backup/TransportManager.java | 23 +++++++------ .../server/backup/TransportManagerTest.java | 40 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/services/backup/java/com/android/server/backup/TransportManager.java b/services/backup/java/com/android/server/backup/TransportManager.java index 5b901ee2b3da..6d9231dcddfa 100644 --- a/services/backup/java/com/android/server/backup/TransportManager.java +++ b/services/backup/java/com/android/server/backup/TransportManager.java @@ -29,6 +29,7 @@ import android.content.pm.ResolveInfo; import android.os.RemoteException; import android.os.UserHandle; import android.util.ArrayMap; +import android.util.ArraySet; import android.util.Slog; import com.android.internal.annotations.GuardedBy; @@ -47,8 +48,6 @@ import java.util.Map; import java.util.Set; import java.util.function.Consumer; import java.util.function.Predicate; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** Handles in-memory bookkeeping of all BackupTransport objects. */ public class TransportManager { @@ -119,10 +118,10 @@ public class TransportManager { void onPackageChanged(String packageName, String... components) { // Unfortunately this can't be atomic because we risk a deadlock if // registerTransportsFromPackage() is put inside the synchronized block - Set transportComponents = - Stream.of(components) - .map(component -> new ComponentName(packageName, component)) - .collect(Collectors.toSet()); + Set transportComponents = new ArraySet<>(components.length); + for (String componentName : components) { + transportComponents.add(new ComponentName(packageName, componentName)); + } synchronized (mTransportLock) { mRegisteredTransportsDescriptionMap.keySet().removeIf(transportComponents::contains); } @@ -151,11 +150,13 @@ public class TransportManager { */ String[] getRegisteredTransportNames() { synchronized (mTransportLock) { - return mRegisteredTransportsDescriptionMap - .values() - .stream() - .map(transportDescription -> transportDescription.name) - .toArray(String[]::new); + String[] transportNames = new String[mRegisteredTransportsDescriptionMap.size()]; + int i = 0; + for (TransportDescription description : mRegisteredTransportsDescriptionMap.values()) { + transportNames[i] = description.name; + i++; + } + return transportNames; } } diff --git a/services/robotests/src/com/android/server/backup/TransportManagerTest.java b/services/robotests/src/com/android/server/backup/TransportManagerTest.java index 6753d73590d3..068fe8137467 100644 --- a/services/robotests/src/com/android/server/backup/TransportManagerTest.java +++ b/services/robotests/src/com/android/server/backup/TransportManagerTest.java @@ -532,6 +532,46 @@ public class TransportManagerTest { () -> transportManager.getTransportDirName(mTransportA2.transportName)); } + @Test + public void testGetRegisteredTransportNames() throws Exception { + setUpPackage(PACKAGE_A, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); + setUpPackage(PACKAGE_B, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); + TransportData[] transportsData = {mTransportA1, mTransportA2, mTransportB1}; + setUpTransports(transportsData); + TransportManager transportManager = + createTransportManager(mTransportA1, mTransportA2, mTransportB1); + transportManager.registerTransports(); + + String[] transportNames = transportManager.getRegisteredTransportNames(); + + assertThat(transportNames) + .asList() + .containsExactlyElementsIn( + Stream.of(transportsData) + .map(transportData -> transportData.transportName) + .collect(toList())); + } + + @Test + public void testGetRegisteredTransportComponents() throws Exception { + setUpPackage(PACKAGE_A, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); + setUpPackage(PACKAGE_B, ApplicationInfo.PRIVATE_FLAG_PRIVILEGED); + TransportData[] transportsData = {mTransportA1, mTransportA2, mTransportB1}; + setUpTransports(transportsData); + TransportManager transportManager = + createTransportManager(mTransportA1, mTransportA2, mTransportB1); + transportManager.registerTransports(); + + ComponentName[] transportNames = transportManager.getRegisteredTransportComponents(); + + assertThat(transportNames) + .asList() + .containsExactlyElementsIn( + Stream.of(transportsData) + .map(TransportData::getTransportComponent) + .collect(toList())); + } + private List setUpTransports(TransportData... transports) throws Exception { setUpTransportsForTransportManager(mShadowPackageManager, transports); List transportMocks = new ArrayList<>(transports.length); -- cgit v1.2.3-59-g8ed1b