Add unit test when querying TYPE_WIFI + null/empty/non-null subscriberId
Starting with API level 31, the subscriberId is applicable for the wifi network. Considering applications may use null or an empty string as subscriberId (for instance, cts), frameworks create MATCH_WIFI_WILDCARD NetworkTemplate when querying wifi network with null or an empty string which is the behavior before API level 31. Bug: 188915450 Test: atest -c NetworkStatsManagerTest Change-Id: Id4ae06840e1749997e970b8f1ec391060967bd47
This commit is contained in:
@@ -24,8 +24,8 @@ import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.argThat;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -52,6 +52,7 @@ import org.mockito.invocation.InvocationOnMock;
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
@SmallTest
|
||||
public class NetworkStatsManagerTest {
|
||||
private static final String TEST_SUBSCRIBER_ID = "subid";
|
||||
|
||||
private @Mock INetworkStatsService mService;
|
||||
private @Mock INetworkStatsSession mStatsSession;
|
||||
@@ -69,7 +70,6 @@ public class NetworkStatsManagerTest {
|
||||
|
||||
@Test
|
||||
public void testQueryDetails() throws RemoteException {
|
||||
final String subscriberId = "subid";
|
||||
final long startTime = 1;
|
||||
final long endTime = 100;
|
||||
final int uid1 = 10001;
|
||||
@@ -113,7 +113,7 @@ public class NetworkStatsManagerTest {
|
||||
.then((InvocationOnMock inv) -> {
|
||||
NetworkTemplate template = inv.getArgument(0);
|
||||
assertEquals(MATCH_MOBILE_ALL, template.getMatchRule());
|
||||
assertEquals(subscriberId, template.getSubscriberId());
|
||||
assertEquals(TEST_SUBSCRIBER_ID, template.getSubscriberId());
|
||||
return history1;
|
||||
});
|
||||
|
||||
@@ -124,13 +124,13 @@ public class NetworkStatsManagerTest {
|
||||
.then((InvocationOnMock inv) -> {
|
||||
NetworkTemplate template = inv.getArgument(0);
|
||||
assertEquals(MATCH_MOBILE_ALL, template.getMatchRule());
|
||||
assertEquals(subscriberId, template.getSubscriberId());
|
||||
assertEquals(TEST_SUBSCRIBER_ID, template.getSubscriberId());
|
||||
return history2;
|
||||
});
|
||||
|
||||
|
||||
NetworkStats stats = mManager.queryDetails(
|
||||
ConnectivityManager.TYPE_MOBILE, subscriberId, startTime, endTime);
|
||||
ConnectivityManager.TYPE_MOBILE, TEST_SUBSCRIBER_ID, startTime, endTime);
|
||||
|
||||
NetworkStats.Bucket bucket = new NetworkStats.Bucket();
|
||||
|
||||
@@ -166,35 +166,30 @@ public class NetworkStatsManagerTest {
|
||||
assertFalse(stats.hasNextBucket());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryDetails_NoSubscriberId() throws RemoteException {
|
||||
private void runQueryDetailsAndCheckTemplate(int networkType, String subscriberId,
|
||||
NetworkTemplate expectedTemplate) throws RemoteException {
|
||||
final long startTime = 1;
|
||||
final long endTime = 100;
|
||||
final int uid1 = 10001;
|
||||
final int uid2 = 10002;
|
||||
|
||||
reset(mStatsSession);
|
||||
when(mService.openSessionForUsageStats(anyInt(), anyString())).thenReturn(mStatsSession);
|
||||
when(mStatsSession.getRelevantUids()).thenReturn(new int[] { uid1, uid2 });
|
||||
|
||||
NetworkStats stats = mManager.queryDetails(
|
||||
ConnectivityManager.TYPE_MOBILE, null, startTime, endTime);
|
||||
|
||||
when(mStatsSession.getHistoryIntervalForUid(any(NetworkTemplate.class),
|
||||
anyInt(), anyInt(), anyInt(), anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(new NetworkStatsHistory(10, 0));
|
||||
NetworkStats stats = mManager.queryDetails(
|
||||
networkType, subscriberId, startTime, endTime);
|
||||
|
||||
verify(mStatsSession, times(1)).getHistoryIntervalForUid(
|
||||
argThat((NetworkTemplate t) ->
|
||||
// No subscriberId: MATCH_MOBILE_WILDCARD template
|
||||
t.getMatchRule() == NetworkTemplate.MATCH_MOBILE_WILDCARD),
|
||||
eq(expectedTemplate),
|
||||
eq(uid1), eq(android.net.NetworkStats.SET_ALL),
|
||||
eq(android.net.NetworkStats.TAG_NONE),
|
||||
eq(NetworkStatsHistory.FIELD_ALL), eq(startTime), eq(endTime));
|
||||
|
||||
verify(mStatsSession, times(1)).getHistoryIntervalForUid(
|
||||
argThat((NetworkTemplate t) ->
|
||||
// No subscriberId: MATCH_MOBILE_WILDCARD template
|
||||
t.getMatchRule() == NetworkTemplate.MATCH_MOBILE_WILDCARD),
|
||||
eq(expectedTemplate),
|
||||
eq(uid2), eq(android.net.NetworkStats.SET_ALL),
|
||||
eq(android.net.NetworkStats.TAG_NONE),
|
||||
eq(NetworkStatsHistory.FIELD_ALL), eq(startTime), eq(endTime));
|
||||
@@ -202,6 +197,25 @@ public class NetworkStatsManagerTest {
|
||||
assertFalse(stats.hasNextBucket());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNetworkTemplateWhenRunningQueryDetails_NoSubscriberId() throws RemoteException {
|
||||
runQueryDetailsAndCheckTemplate(ConnectivityManager.TYPE_MOBILE,
|
||||
null /* subscriberId */, NetworkTemplate.buildTemplateMobileWildcard());
|
||||
runQueryDetailsAndCheckTemplate(ConnectivityManager.TYPE_WIFI,
|
||||
"" /* subscriberId */, NetworkTemplate.buildTemplateWifiWildcard());
|
||||
runQueryDetailsAndCheckTemplate(ConnectivityManager.TYPE_WIFI,
|
||||
null /* subscriberId */, NetworkTemplate.buildTemplateWifiWildcard());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNetworkTemplateWhenRunningQueryDetails_MergedCarrierWifi()
|
||||
throws RemoteException {
|
||||
runQueryDetailsAndCheckTemplate(ConnectivityManager.TYPE_WIFI,
|
||||
TEST_SUBSCRIBER_ID,
|
||||
NetworkTemplate.buildTemplateWifi(NetworkTemplate.WIFI_NETWORKID_ALL,
|
||||
TEST_SUBSCRIBER_ID));
|
||||
}
|
||||
|
||||
private void assertBucketMatches(Entry expected, NetworkStats.Bucket actual) {
|
||||
assertEquals(expected.uid, actual.getUid());
|
||||
assertEquals(expected.rxBytes, actual.getRxBytes());
|
||||
|
||||
Reference in New Issue
Block a user