From ea2710c7993cc35a4fc3937317523494c86aa643 Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Thu, 26 Apr 2018 17:52:03 +0900 Subject: [PATCH] Fix testRegisterUsageCallback failure in setUp LocalServices.addService in NetworkStatsService is currently failing with IllegalStateException "Overriding service registration". Setting up LocalServices in the test to avoid this issue might be possible, but moving the registration to the only non-test caller of that constructor as done here solves the issue and avoids side-effects from a constructor. Test: this test passes in master through runtest frameworks-net Bug: b/78487385 Bug: b/80082746 Change-Id: I884a7a8bd7db3fcd220b785ba9914ac8c77720f0 --- .../java/com/android/server/net/NetworkStatsService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java index 31072415dc..2e8e4a9a29 100644 --- a/services/core/java/com/android/server/net/NetworkStatsService.java +++ b/services/core/java/com/android/server/net/NetworkStatsService.java @@ -324,6 +324,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub { wakeLock, getDefaultClock(), TelephonyManager.getDefault(), new DefaultNetworkStatsSettings(context), new NetworkStatsObservers(), getDefaultSystemDir(), getDefaultBaseDir()); + service.registerLocalService(); HandlerThread handlerThread = new HandlerThread(TAG); Handler.Callback callback = new HandlerCallback(service); @@ -333,6 +334,8 @@ public class NetworkStatsService extends INetworkStatsService.Stub { return service; } + // This must not be called outside of tests, even within the same package, as this constructor + // does not register the local service. Use the create() helper above. @VisibleForTesting NetworkStatsService(Context context, INetworkManagementService networkManager, AlarmManager alarmManager, PowerManager.WakeLock wakeLock, Clock clock, @@ -349,7 +352,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub { mSystemDir = checkNotNull(systemDir, "missing systemDir"); mBaseDir = checkNotNull(baseDir, "missing baseDir"); mUseBpfTrafficStats = new File("/sys/fs/bpf/traffic_uid_stats_map").exists(); + } + private void registerLocalService() { LocalServices.addService(NetworkStatsManagerInternal.class, new NetworkStatsManagerInternalImpl()); }