NsdService: disentangle NativeDaemonConnector from ctor
This patch disentangles the creation of NativeDaemonConnector from the
creation of NsdService by introducing a wrapper type DaemonConnection.
This allows to mock this dependency in unit tests.
Test: enhanced previously introduced new tests.
Bug: 37013369, 33298084
Change-Id: I894b7cddfc509f86d0134d214c88c063b81b5e0a
diff --git a/tests/net/java/android/net/nsd/NsdServiceTest.java b/tests/net/java/android/net/nsd/NsdServiceTest.java
index 64466bf..acc390c 100644
--- a/tests/net/java/android/net/nsd/NsdServiceTest.java
+++ b/tests/net/java/android/net/nsd/NsdServiceTest.java
@@ -16,6 +16,11 @@
package com.android.server;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.os.Handler;
@@ -25,6 +30,9 @@
import android.content.Context;
import android.content.ContentResolver;
import android.net.nsd.NsdManager;
+import com.android.server.NsdService.DaemonConnection;
+import com.android.server.NsdService.DaemonConnectionSupplier;
+import com.android.server.NsdService.NativeCallbackReceiver;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Before;
@@ -34,7 +42,6 @@
import org.mockito.MockitoAnnotations;
// TODOs:
-// - test daemon connection
// - test client disconnects
// - test client can send requests and receive replies
// - test NSD_ON ENABLE/DISABLED listening
@@ -45,6 +52,8 @@
@Mock Context mContext;
@Mock ContentResolver mResolver;
@Mock NsdService.NsdSettings mSettings;
+ @Mock DaemonConnection mDaemon;
+ NativeCallbackReceiver mDaemonCallback;
TestLooper mLooper;
TestHandler mHandler;
@@ -58,8 +67,13 @@
@Test
public void testClientsCanConnect() {
+ when(mSettings.isEnabled()).thenReturn(true);
+
NsdService service = makeService();
+
NsdManager client1 = connectClient(service);
+ verify(mDaemon, timeout(100).times(1)).execute("start-service");
+
NsdManager client2 = connectClient(service);
// TODO: disconnect client1
@@ -67,7 +81,13 @@
}
NsdService makeService() {
- return new NsdService(mContext, mSettings, mHandler);
+ DaemonConnectionSupplier supplier = (callback) -> {
+ mDaemonCallback = callback;
+ return mDaemon;
+ };
+ NsdService service = new NsdService(mContext, mSettings, mHandler, supplier);
+ verify(mDaemon, never()).execute(any(String.class));
+ return service;
}
NsdManager connectClient(NsdService service) {