Add a test API for testing NetworkStack.getService

NetworkStack.getService was introduced to avoid relying on
Context#getSystemService to obtain the NetworkStack binder token.
To allow it to be mocked in tests, a method is introduced to allow tests
to specify a mock NetworkStack token for their own process.

Test: atest NetworkStackTests, using the change
Bug: 151243982
Change-Id: I04058a007f2dfe1044cabeb3ac508404873665ad
This commit is contained in:
Remi NGUYEN VAN
2020-03-19 11:25:50 +09:00
parent 438018d1c0
commit fc9119df29
2 changed files with 18 additions and 0 deletions

View File

@@ -45,6 +45,9 @@ public class NetworkStack {
public static final String PERMISSION_MAINLINE_NETWORK_STACK =
"android.permission.MAINLINE_NETWORK_STACK";
@Nullable
private static volatile IBinder sMockService;
/**
* Get an {@link IBinder} representing the NetworkStack stable AIDL Interface, if registered.
* @hide
@@ -53,9 +56,23 @@ public class NetworkStack {
@SystemApi
@TestApi
public static IBinder getService() {
final IBinder mockService = sMockService;
if (mockService != null) return mockService;
return ServiceManager.getService(Context.NETWORK_STACK_SERVICE);
}
/**
* Set a mock service for testing, to be returned by future calls to {@link #getService()}.
*
* <p>Passing a {@code null} {@code mockService} resets {@link #getService()} to normal
* behavior.
* @hide
*/
@TestApi
public static void setServiceForTest(@Nullable IBinder mockService) {
sMockService = mockService;
}
private NetworkStack() {}
/**