Make NetworkManagementServiceTest pass again.
1. Mock the service manager so that NMS can fetch mock versions
of INetd and IBatteryStats.
2. Call LocalServices.removeServiceForTest to avoid a duplicate
service registration error. // check this
3. Change the timeout from 100ms to 200ms, as otherwise the tests
that check for IfaceClass fail.
4. Convert NetworkManagementServiceTest to JUnit 4.
5. Move NetworkManagementServiceTest to tests/net
Bug: 29337859
Bug: 32163131
Bug: 32561414
Bug: 62918393
Test: runtest frameworks-net
Change-Id: Ic7371b427b35809ccd446addf35c9d8ae99ccfd3
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index 6b621d2..3e44532 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -73,6 +73,7 @@
import android.os.BatteryStats;
import android.os.Binder;
import android.os.Handler;
+import android.os.IBinder;
import android.os.INetworkActivityListener;
import android.os.INetworkManagementService;
import android.os.PowerManager;
@@ -132,10 +133,27 @@
*/
public class NetworkManagementService extends INetworkManagementService.Stub
implements Watchdog.Monitor {
+
+ /**
+ * Helper class that encapsulates NetworkManagementService dependencies and makes them
+ * easier to mock in unit tests.
+ */
+ static class SystemServices {
+ public IBinder getService(String name) {
+ return ServiceManager.getService(name);
+ }
+ public void registerLocalService(NetworkManagementInternal nmi) {
+ LocalServices.addService(NetworkManagementInternal.class, nmi);
+ }
+ public INetd getNetd() {
+ return NetdService.get();
+ }
+ }
+
private static final String TAG = "NetworkManagement";
private static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
private static final String NETD_TAG = "NetdConnector";
- private static final String NETD_SERVICE_NAME = "netd";
+ static final String NETD_SERVICE_NAME = "netd";
private static final int MAX_UID_RANGES_PER_COMMAND = 10;
@@ -217,6 +235,8 @@
private final Handler mFgHandler;
private final Handler mDaemonHandler;
+ private final SystemServices mServices;
+
private INetd mNetdService;
private IBatteryStats mBatteryStats;
@@ -315,8 +335,10 @@
*
* @param context Binder context for this service
*/
- private NetworkManagementService(Context context, String socket) {
+ private NetworkManagementService(
+ Context context, String socket, SystemServices services) {
mContext = context;
+ mServices = services;
// make sure this is on the same looper as our NativeDaemonConnector for sync purposes
mFgHandler = new Handler(FgThread.get().getLooper());
@@ -338,7 +360,7 @@
// Add ourself to the Watchdog monitors.
Watchdog.getInstance().addMonitor(this);
- LocalServices.addService(NetworkManagementInternal.class, new LocalService());
+ mServices.registerLocalService(new LocalService());
synchronized (mTetheringStatsProviders) {
mTetheringStatsProviders.put(new NetdTetheringStatsProvider(), "netd");
@@ -352,11 +374,13 @@
mDaemonHandler = null;
mFgHandler = null;
mThread = null;
+ mServices = null;
}
- static NetworkManagementService create(Context context, String socket)
+ static NetworkManagementService create(Context context, String socket, SystemServices services)
throws InterruptedException {
- final NetworkManagementService service = new NetworkManagementService(context, socket);
+ final NetworkManagementService service =
+ new NetworkManagementService(context, socket, services);
final CountDownLatch connectedSignal = service.mConnectedSignal;
if (DBG) Slog.d(TAG, "Creating NetworkManagementService");
service.mThread.start();
@@ -370,7 +394,7 @@
}
public static NetworkManagementService create(Context context) throws InterruptedException {
- return create(context, NETD_SERVICE_NAME);
+ return create(context, NETD_SERVICE_NAME, new SystemServices());
}
public void systemReady() {
@@ -390,8 +414,8 @@
if (mBatteryStats != null) {
return mBatteryStats;
}
- mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService(
- BatteryStats.SERVICE_NAME));
+ mBatteryStats =
+ IBatteryStats.Stub.asInterface(mServices.getService(BatteryStats.SERVICE_NAME));
return mBatteryStats;
}
}
@@ -589,7 +613,7 @@
}
private void connectNativeNetdService() {
- mNetdService = NetdService.get();
+ mNetdService = mServices.getNetd();
}
/**