summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemi NGUYEN VAN <reminv@google.com>2020-03-18 18:24:43 +0900
committerRemi NGUYEN VAN <reminv@google.com>2020-03-18 18:24:43 +0900
commit62ea8f72dcb3d517ed0b44d58445b87ae2f9c324 (patch)
treea1ba8d9c83822948eb63395ac794dcd726823b1d
parentaa561db2185e79ef3cf91932864b7007f902dadd (diff)
Use NetworkStack.getService in NetworkStackClient
This avoids returning IBinder in Context.getSystemService, having a dedicated getter for the NetworkStack AIDL interface instead. Test: atest FrameworksNetTests NetworkStackTests Bug: 151243982 Change-Id: Ibeaeff5890631e14581a084863d9aeb3178c5d5c
-rw-r--r--common/networkstackclient/src/android/net/networkstack/ModuleNetworkStackClient.java19
-rw-r--r--tests/unit/src/android/net/networkstack/ModuleNetworkStackClientTest.kt19
2 files changed, 21 insertions, 17 deletions
diff --git a/common/networkstackclient/src/android/net/networkstack/ModuleNetworkStackClient.java b/common/networkstackclient/src/android/net/networkstack/ModuleNetworkStackClient.java
index cfbb760..cbbae37 100644
--- a/common/networkstackclient/src/android/net/networkstack/ModuleNetworkStackClient.java
+++ b/common/networkstackclient/src/android/net/networkstack/ModuleNetworkStackClient.java
@@ -16,12 +16,12 @@
package android.net.networkstack;
-import static android.content.Context.NETWORK_STACK_SERVICE;
import static android.os.Build.VERSION.SDK_INT;
import android.annotation.NonNull;
import android.content.Context;
import android.net.INetworkStackConnector;
+import android.net.NetworkStack;
import android.os.Build;
import android.os.IBinder;
import android.util.Log;
@@ -47,14 +47,14 @@ public class ModuleNetworkStackClient extends NetworkStackClientBase {
// TODO(b/149676685): change this check to "< R" once R is defined
if (SDK_INT < Build.VERSION_CODES.Q
|| (SDK_INT == Build.VERSION_CODES.Q && "REL".equals(Build.VERSION.CODENAME))) {
- // NETWORK_STACK_SERVICE is not available through getSystemService before R
+ // The NetworkStack connector is not available through NetworkStack before R
throw new UnsupportedOperationException(
"ModuleNetworkStackClient is not supported on API " + SDK_INT);
}
if (sInstance == null) {
sInstance = new ModuleNetworkStackClient();
- sInstance.startPolling(packageContext);
+ sInstance.startPolling();
}
return sInstance;
}
@@ -64,10 +64,10 @@ public class ModuleNetworkStackClient extends NetworkStackClientBase {
sInstance = null;
}
- private void startPolling(Context context) {
+ private void startPolling() {
// If the service is already registered (as it will be most of the time), do not poll and
// fulfill requests immediately.
- final IBinder nss = (IBinder) context.getSystemService(NETWORK_STACK_SERVICE);
+ final IBinder nss = NetworkStack.getService();
if (nss != null) {
// Calling onNetworkStackConnected here means that pending oneway Binder calls to the
// NetworkStack get sent from the current thread and not a worker thread; this is fine
@@ -75,21 +75,18 @@ public class ModuleNetworkStackClient extends NetworkStackClientBase {
onNetworkStackConnected(INetworkStackConnector.Stub.asInterface(nss));
return;
}
- new Thread(new PollingRunner(context)).start();
+ new Thread(new PollingRunner()).start();
}
private class PollingRunner implements Runnable {
- private final Context mContext;
- private PollingRunner(Context context) {
- mContext = context;
- }
+ private PollingRunner() {}
@Override
public void run() {
// Block until the NetworkStack connector is registered in ServiceManager.
IBinder nss;
- while ((nss = (IBinder) mContext.getSystemService(NETWORK_STACK_SERVICE)) == null) {
+ while ((nss = NetworkStack.getService()) == null) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
diff --git a/tests/unit/src/android/net/networkstack/ModuleNetworkStackClientTest.kt b/tests/unit/src/android/net/networkstack/ModuleNetworkStackClientTest.kt
index 661f9aa..1024af7 100644
--- a/tests/unit/src/android/net/networkstack/ModuleNetworkStackClientTest.kt
+++ b/tests/unit/src/android/net/networkstack/ModuleNetworkStackClientTest.kt
@@ -21,6 +21,7 @@ import android.net.IIpMemoryStoreCallbacks
import android.net.INetworkMonitorCallbacks
import android.net.INetworkStackConnector
import android.net.Network
+import android.net.NetworkStack
import android.net.dhcp.DhcpServingParamsParcel
import android.net.dhcp.IDhcpServerCallbacks
import android.net.ip.IIpClientCallbacks
@@ -28,6 +29,8 @@ import android.os.Build
import android.os.IBinder
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
+import com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn
+import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession
import com.android.networkstack.apishim.ShimUtils
import org.junit.After
import org.junit.Assume.assumeTrue
@@ -36,11 +39,11 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.any
import org.mockito.Mock
-import org.mockito.Mockito.doReturn
import org.mockito.Mockito.never
import org.mockito.Mockito.timeout
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
+import org.mockito.MockitoSession
@RunWith(AndroidJUnit4::class)
@SmallTest
@@ -49,6 +52,8 @@ class ModuleNetworkStackClientTest {
private val TEST_NETWORK = Network(43)
private val TEST_TIMEOUT_MS = 500L
+ private var mSession: MockitoSession? = null
+
@Mock
private lateinit var mContext: Context
@Mock
@@ -68,6 +73,7 @@ class ModuleNetworkStackClientTest {
fun setUp() {
// ModuleNetworkStackClient is only available after Q
assumeTrue(ShimUtils.isReleaseOrDevelopmentApiAbove(Build.VERSION_CODES.Q))
+ mSession = mockitoSession().spyStatic(NetworkStack::class.java).startMocking()
MockitoAnnotations.initMocks(this)
doReturn(mConnector).`when`(mConnectorBinder).queryLocalInterface(
INetworkStackConnector::class.qualifiedName!!)
@@ -75,12 +81,13 @@ class ModuleNetworkStackClientTest {
@After
fun tearDown() {
+ mSession?.finishMocking()
ModuleNetworkStackClient.resetInstanceForTest()
}
@Test
fun testIpClientServiceAvailableImmediately() {
- doReturn(mConnectorBinder).`when`(mContext).getSystemService(Context.NETWORK_STACK_SERVICE)
+ doReturn(mConnectorBinder).`when` { NetworkStack.getService() }
ModuleNetworkStackClient.getInstance(mContext).makeIpClient(TEST_IFNAME, mIpClientCb)
verify(mConnector).makeIpClient(TEST_IFNAME, mIpClientCb)
}
@@ -91,14 +98,14 @@ class ModuleNetworkStackClientTest {
Thread.sleep(TEST_TIMEOUT_MS)
verify(mConnector, never()).makeIpClient(any(), any())
- doReturn(mConnectorBinder).`when`(mContext).getSystemService(Context.NETWORK_STACK_SERVICE)
+ doReturn(mConnectorBinder).`when` { NetworkStack.getService() }
// Use a longer timeout as polling can cause larger delays
verify(mConnector, timeout(TEST_TIMEOUT_MS * 4)).makeIpClient(TEST_IFNAME, mIpClientCb)
}
@Test
fun testDhcpServerAvailableImmediately() {
- doReturn(mConnectorBinder).`when`(mContext).getSystemService(Context.NETWORK_STACK_SERVICE)
+ doReturn(mConnectorBinder).`when` { NetworkStack.getService() }
val testParams = DhcpServingParamsParcel()
ModuleNetworkStackClient.getInstance(mContext).makeDhcpServer(TEST_IFNAME, testParams,
mDhcpServerCb)
@@ -107,7 +114,7 @@ class ModuleNetworkStackClientTest {
@Test
fun testNetworkMonitorAvailableImmediately() {
- doReturn(mConnectorBinder).`when`(mContext).getSystemService(Context.NETWORK_STACK_SERVICE)
+ doReturn(mConnectorBinder).`when` { NetworkStack.getService() }
val testName = "NetworkMonitorName"
ModuleNetworkStackClient.getInstance(mContext).makeNetworkMonitor(TEST_NETWORK, testName,
mNetworkMonitorCb)
@@ -116,7 +123,7 @@ class ModuleNetworkStackClientTest {
@Test
fun testIpMemoryStoreAvailableImmediately() {
- doReturn(mConnectorBinder).`when`(mContext).getSystemService(Context.NETWORK_STACK_SERVICE)
+ doReturn(mConnectorBinder).`when` { NetworkStack.getService() }
ModuleNetworkStackClient.getInstance(mContext).fetchIpMemoryStore(mIpMemoryStoreCb)
verify(mConnector).fetchIpMemoryStore(mIpMemoryStoreCb)
}