[SM05] Enable record mobile network stats by collapsed rat type

Switch on the recording in device side. Metrics will be
collected in follow-up patches which can be independently
enabled/disabled.

This change also fix the fail in NetworkStatsCollectionTest
which caused by enabling this feature, where the rounding
problem happened when records are distributed into smaller
buckets and categorized into more NetworkIdentity.

Test: atest FrameworksNetTests
Bug: 129082217
Change-Id: If330e85330a4ff713dd420c98d42fa741eabd90a
Merged-In: If330e85330a4ff713dd420c98d42fa741eabd90a
(cherry picked from commit 2d4fa2c0fae8c2d79a25093d9f732a33c2f91dd4)
This commit is contained in:
junyulai
2019-12-31 13:40:15 +08:00
parent 57b993bfb5
commit 2632681cf0
2 changed files with 149 additions and 50 deletions

View File

@@ -319,33 +319,33 @@ public class NetworkStatsCollectionTest {
assertEntry(18322, 75, 15031, 75, history.getValues(i++, null)); assertEntry(18322, 75, 15031, 75, history.getValues(i++, null));
assertEntry(527798, 761, 78570, 652, history.getValues(i++, null)); assertEntry(527798, 761, 78570, 652, history.getValues(i++, null));
assertEntry(527797, 760, 78570, 651, history.getValues(i++, null)); assertEntry(527797, 760, 78570, 651, history.getValues(i++, null));
assertEntry(10747, 50, 16838, 55, history.getValues(i++, null)); assertEntry(10747, 50, 16839, 55, history.getValues(i++, null));
assertEntry(10747, 49, 16838, 54, history.getValues(i++, null)); assertEntry(10747, 49, 16837, 54, history.getValues(i++, null));
assertEntry(89191, 151, 18021, 140, history.getValues(i++, null)); assertEntry(89191, 151, 18021, 140, history.getValues(i++, null));
assertEntry(89190, 150, 18020, 139, history.getValues(i++, null)); assertEntry(89190, 150, 18020, 139, history.getValues(i++, null));
assertEntry(3821, 22, 4525, 26, history.getValues(i++, null)); assertEntry(3821, 23, 4525, 26, history.getValues(i++, null));
assertEntry(3820, 22, 4524, 26, history.getValues(i++, null)); assertEntry(3820, 21, 4524, 26, history.getValues(i++, null));
assertEntry(91686, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91686, 159, 18576, 146, history.getValues(i++, null));
assertEntry(91685, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91685, 159, 18574, 146, history.getValues(i++, null));
assertEntry(8289, 35, 6863, 38, history.getValues(i++, null)); assertEntry(8289, 36, 6864, 39, history.getValues(i++, null));
assertEntry(8289, 35, 6863, 38, history.getValues(i++, null)); assertEntry(8289, 34, 6862, 37, history.getValues(i++, null));
assertEntry(113914, 174, 18364, 157, history.getValues(i++, null)); assertEntry(113914, 174, 18364, 157, history.getValues(i++, null));
assertEntry(113913, 173, 18364, 157, history.getValues(i++, null)); assertEntry(113913, 173, 18364, 157, history.getValues(i++, null));
assertEntry(11378, 49, 9261, 49, history.getValues(i++, null)); assertEntry(11378, 49, 9261, 50, history.getValues(i++, null));
assertEntry(11377, 48, 9261, 49, history.getValues(i++, null)); assertEntry(11377, 48, 9261, 48, history.getValues(i++, null));
assertEntry(201765, 328, 41808, 291, history.getValues(i++, null)); assertEntry(201766, 328, 41808, 291, history.getValues(i++, null));
assertEntry(201765, 328, 41807, 290, history.getValues(i++, null)); assertEntry(201764, 328, 41807, 290, history.getValues(i++, null));
assertEntry(106106, 218, 39917, 201, history.getValues(i++, null)); assertEntry(106106, 219, 39918, 202, history.getValues(i++, null));
assertEntry(106105, 217, 39917, 201, history.getValues(i++, null)); assertEntry(106105, 216, 39916, 200, history.getValues(i++, null));
assertEquals(history.size(), i); assertEquals(history.size(), i);
// Slice from middle should be untouched // Slice from middle should be untouched
history = getHistory(collection, plan, TIME_B - HOUR_IN_MILLIS, history = getHistory(collection, plan, TIME_B - HOUR_IN_MILLIS,
TIME_B + HOUR_IN_MILLIS); i = 0; TIME_B + HOUR_IN_MILLIS); i = 0;
assertEntry(3821, 22, 4525, 26, history.getValues(i++, null)); assertEntry(3821, 23, 4525, 26, history.getValues(i++, null));
assertEntry(3820, 22, 4524, 26, history.getValues(i++, null)); assertEntry(3820, 21, 4524, 26, history.getValues(i++, null));
assertEntry(91686, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91686, 159, 18576, 146, history.getValues(i++, null));
assertEntry(91685, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91685, 159, 18574, 146, history.getValues(i++, null));
assertEquals(history.size(), i); assertEquals(history.size(), i);
} }
@@ -373,25 +373,25 @@ public class NetworkStatsCollectionTest {
assertEntry(527797, 760, 78570, 651, history.getValues(i++, null)); assertEntry(527797, 760, 78570, 651, history.getValues(i++, null));
// Cycle point; start data normalization // Cycle point; start data normalization
assertEntry(7507, 0, 11763, 0, history.getValues(i++, null)); assertEntry(7507, 0, 11763, 0, history.getValues(i++, null));
assertEntry(7507, 0, 11763, 0, history.getValues(i++, null)); assertEntry(7507, 0, 11762, 0, history.getValues(i++, null));
assertEntry(62309, 0, 12589, 0, history.getValues(i++, null)); assertEntry(62309, 0, 12589, 0, history.getValues(i++, null));
assertEntry(62309, 0, 12588, 0, history.getValues(i++, null)); assertEntry(62309, 0, 12588, 0, history.getValues(i++, null));
assertEntry(2669, 0, 3161, 0, history.getValues(i++, null)); assertEntry(2669, 0, 3161, 0, history.getValues(i++, null));
assertEntry(2668, 0, 3160, 0, history.getValues(i++, null)); assertEntry(2668, 0, 3160, 0, history.getValues(i++, null));
// Anchor point; end data normalization // Anchor point; end data normalization
assertEntry(91686, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91686, 159, 18576, 146, history.getValues(i++, null));
assertEntry(91685, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91685, 159, 18574, 146, history.getValues(i++, null));
assertEntry(8289, 35, 6863, 38, history.getValues(i++, null)); assertEntry(8289, 36, 6864, 39, history.getValues(i++, null));
assertEntry(8289, 35, 6863, 38, history.getValues(i++, null)); assertEntry(8289, 34, 6862, 37, history.getValues(i++, null));
assertEntry(113914, 174, 18364, 157, history.getValues(i++, null)); assertEntry(113914, 174, 18364, 157, history.getValues(i++, null));
assertEntry(113913, 173, 18364, 157, history.getValues(i++, null)); assertEntry(113913, 173, 18364, 157, history.getValues(i++, null));
// Cycle point // Cycle point
assertEntry(11378, 49, 9261, 49, history.getValues(i++, null)); assertEntry(11378, 49, 9261, 50, history.getValues(i++, null));
assertEntry(11377, 48, 9261, 49, history.getValues(i++, null)); assertEntry(11377, 48, 9261, 48, history.getValues(i++, null));
assertEntry(201765, 328, 41808, 291, history.getValues(i++, null)); assertEntry(201766, 328, 41808, 291, history.getValues(i++, null));
assertEntry(201765, 328, 41807, 290, history.getValues(i++, null)); assertEntry(201764, 328, 41807, 290, history.getValues(i++, null));
assertEntry(106106, 218, 39917, 201, history.getValues(i++, null)); assertEntry(106106, 219, 39918, 202, history.getValues(i++, null));
assertEntry(106105, 217, 39917, 201, history.getValues(i++, null)); assertEntry(106105, 216, 39916, 200, history.getValues(i++, null));
assertEquals(history.size(), i); assertEquals(history.size(), i);
// Slice from middle should be augmented // Slice from middle should be augmented
@@ -399,8 +399,8 @@ public class NetworkStatsCollectionTest {
TIME_B + HOUR_IN_MILLIS); i = 0; TIME_B + HOUR_IN_MILLIS); i = 0;
assertEntry(2669, 0, 3161, 0, history.getValues(i++, null)); assertEntry(2669, 0, 3161, 0, history.getValues(i++, null));
assertEntry(2668, 0, 3160, 0, history.getValues(i++, null)); assertEntry(2668, 0, 3160, 0, history.getValues(i++, null));
assertEntry(91686, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91686, 159, 18576, 146, history.getValues(i++, null));
assertEntry(91685, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91685, 159, 18574, 146, history.getValues(i++, null));
assertEquals(history.size(), i); assertEquals(history.size(), i);
} }
@@ -427,34 +427,34 @@ public class NetworkStatsCollectionTest {
assertEntry(527798, 761, 78570, 652, history.getValues(i++, null)); assertEntry(527798, 761, 78570, 652, history.getValues(i++, null));
assertEntry(527797, 760, 78570, 651, history.getValues(i++, null)); assertEntry(527797, 760, 78570, 651, history.getValues(i++, null));
// Cycle point; start data normalization // Cycle point; start data normalization
assertEntry(15015, 0, 23526, 0, history.getValues(i++, null)); assertEntry(15015, 0, 23527, 0, history.getValues(i++, null));
assertEntry(15015, 0, 23526, 0, history.getValues(i++, null)); assertEntry(15015, 0, 23524, 0, history.getValues(i++, null));
assertEntry(124619, 0, 25179, 0, history.getValues(i++, null)); assertEntry(124619, 0, 25179, 0, history.getValues(i++, null));
assertEntry(124618, 0, 25177, 0, history.getValues(i++, null)); assertEntry(124618, 0, 25177, 0, history.getValues(i++, null));
assertEntry(5338, 0, 6322, 0, history.getValues(i++, null)); assertEntry(5338, 0, 6322, 0, history.getValues(i++, null));
assertEntry(5337, 0, 6320, 0, history.getValues(i++, null)); assertEntry(5337, 0, 6320, 0, history.getValues(i++, null));
// Anchor point; end data normalization // Anchor point; end data normalization
assertEntry(91686, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91686, 159, 18576, 146, history.getValues(i++, null));
assertEntry(91685, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91685, 159, 18574, 146, history.getValues(i++, null));
assertEntry(8289, 35, 6863, 38, history.getValues(i++, null)); assertEntry(8289, 36, 6864, 39, history.getValues(i++, null));
assertEntry(8289, 35, 6863, 38, history.getValues(i++, null)); assertEntry(8289, 34, 6862, 37, history.getValues(i++, null));
assertEntry(113914, 174, 18364, 157, history.getValues(i++, null)); assertEntry(113914, 174, 18364, 157, history.getValues(i++, null));
assertEntry(113913, 173, 18364, 157, history.getValues(i++, null)); assertEntry(113913, 173, 18364, 157, history.getValues(i++, null));
// Cycle point // Cycle point
assertEntry(11378, 49, 9261, 49, history.getValues(i++, null)); assertEntry(11378, 49, 9261, 50, history.getValues(i++, null));
assertEntry(11377, 48, 9261, 49, history.getValues(i++, null)); assertEntry(11377, 48, 9261, 48, history.getValues(i++, null));
assertEntry(201765, 328, 41808, 291, history.getValues(i++, null)); assertEntry(201766, 328, 41808, 291, history.getValues(i++, null));
assertEntry(201765, 328, 41807, 290, history.getValues(i++, null)); assertEntry(201764, 328, 41807, 290, history.getValues(i++, null));
assertEntry(106106, 218, 39917, 201, history.getValues(i++, null)); assertEntry(106106, 219, 39918, 202, history.getValues(i++, null));
assertEntry(106105, 217, 39917, 201, history.getValues(i++, null)); assertEntry(106105, 216, 39916, 200, history.getValues(i++, null));
// Slice from middle should be augmented // Slice from middle should be augmented
history = getHistory(collection, plan, TIME_B - HOUR_IN_MILLIS, history = getHistory(collection, plan, TIME_B - HOUR_IN_MILLIS,
TIME_B + HOUR_IN_MILLIS); i = 0; TIME_B + HOUR_IN_MILLIS); i = 0;
assertEntry(5338, 0, 6322, 0, history.getValues(i++, null)); assertEntry(5338, 0, 6322, 0, history.getValues(i++, null));
assertEntry(5337, 0, 6320, 0, history.getValues(i++, null)); assertEntry(5337, 0, 6320, 0, history.getValues(i++, null));
assertEntry(91686, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91686, 159, 18576, 146, history.getValues(i++, null));
assertEntry(91685, 159, 18575, 146, history.getValues(i++, null)); assertEntry(91685, 159, 18574, 146, history.getValues(i++, null));
assertEquals(history.size(), i); assertEquals(history.size(), i);
} }
} }

View File

@@ -42,6 +42,7 @@ import static android.net.NetworkStats.TAG_NONE;
import static android.net.NetworkStats.UID_ALL; import static android.net.NetworkStats.UID_ALL;
import static android.net.NetworkStatsHistory.FIELD_ALL; import static android.net.NetworkStatsHistory.FIELD_ALL;
import static android.net.NetworkTemplate.buildTemplateMobileAll; import static android.net.NetworkTemplate.buildTemplateMobileAll;
import static android.net.NetworkTemplate.buildTemplateMobileWithRatType;
import static android.net.NetworkTemplate.buildTemplateWifiWildcard; import static android.net.NetworkTemplate.buildTemplateWifiWildcard;
import static android.net.TrafficStats.MB_IN_BYTES; import static android.net.TrafficStats.MB_IN_BYTES;
import static android.net.TrafficStats.UID_REMOVED; import static android.net.TrafficStats.UID_REMOVED;
@@ -60,11 +61,13 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AlarmManager; import android.app.AlarmManager;
import android.app.usage.NetworkStatsManager; import android.app.usage.NetworkStatsManager;
import android.content.Context; import android.content.Context;
@@ -92,6 +95,8 @@ import android.os.Message;
import android.os.Messenger; import android.os.Messenger;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.SimpleClock; import android.os.SimpleClock;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import androidx.test.InstrumentationRegistry; import androidx.test.InstrumentationRegistry;
@@ -163,11 +168,14 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
private @Mock NetworkStatsSettings mSettings; private @Mock NetworkStatsSettings mSettings;
private @Mock IBinder mBinder; private @Mock IBinder mBinder;
private @Mock AlarmManager mAlarmManager; private @Mock AlarmManager mAlarmManager;
private @Mock TelephonyManager mTelephonyManager;
private HandlerThread mHandlerThread; private HandlerThread mHandlerThread;
private NetworkStatsService mService; private NetworkStatsService mService;
private INetworkStatsSession mSession; private INetworkStatsSession mSession;
private INetworkManagementEventObserver mNetworkObserver; private INetworkManagementEventObserver mNetworkObserver;
@Nullable
private PhoneStateListener mPhoneStateListener;
private final Clock mClock = new SimpleClock(ZoneOffset.UTC) { private final Clock mClock = new SimpleClock(ZoneOffset.UTC) {
@Override @Override
@@ -195,7 +203,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
mHandlerThread = new HandlerThread("HandlerThread"); mHandlerThread = new HandlerThread("HandlerThread");
final NetworkStatsService.Dependencies deps = makeDependencies(); final NetworkStatsService.Dependencies deps = makeDependencies();
mService = new NetworkStatsService(mServiceContext, mNetManager, mAlarmManager, wakeLock, mService = new NetworkStatsService(mServiceContext, mNetManager, mAlarmManager, wakeLock,
mClock, mServiceContext.getSystemService(TelephonyManager.class), mSettings, mClock, mTelephonyManager, mSettings,
mStatsFactory, new NetworkStatsObservers(), mStatsDir, getBaseDir(mStatsDir), deps); mStatsFactory, new NetworkStatsObservers(), mStatsDir, getBaseDir(mStatsDir), deps);
mElapsedRealtime = 0L; mElapsedRealtime = 0L;
@@ -216,6 +224,12 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
ArgumentCaptor.forClass(INetworkManagementEventObserver.class); ArgumentCaptor.forClass(INetworkManagementEventObserver.class);
verify(mNetManager).registerObserver(networkObserver.capture()); verify(mNetManager).registerObserver(networkObserver.capture());
mNetworkObserver = networkObserver.getValue(); mNetworkObserver = networkObserver.getValue();
// Capture the phone state listener that created by service.
final ArgumentCaptor<PhoneStateListener> phoneStateListenerCaptor =
ArgumentCaptor.forClass(PhoneStateListener.class);
verify(mTelephonyManager).listen(phoneStateListenerCaptor.capture(), anyInt());
mPhoneStateListener = phoneStateListenerCaptor.getValue();
} }
@NonNull @NonNull
@@ -534,7 +548,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
} }
@Test @Test
public void testUid3g4gCombinedByTemplate() throws Exception { public void testUid3gWimaxCombinedByTemplate() throws Exception {
// pretend that network comes online // pretend that network comes online
expectDefaultSettings(); expectDefaultSettings();
NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)}; NetworkState[] states = new NetworkState[] {buildMobile3gState(IMSI_1)};
@@ -558,10 +572,10 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
assertUidTotal(sTemplateImsi1, UID_RED, 1024L, 8L, 1024L, 8L, 5); assertUidTotal(sTemplateImsi1, UID_RED, 1024L, 8L, 1024L, 8L, 5);
// now switch over to 4g network // now switch over to wimax network
incrementCurrentTime(HOUR_IN_MILLIS); incrementCurrentTime(HOUR_IN_MILLIS);
expectDefaultSettings(); expectDefaultSettings();
states = new NetworkState[] {buildMobile4gState(TEST_IFACE2)}; states = new NetworkState[] {buildWimaxState(TEST_IFACE2)};
expectNetworkStatsSummary(buildEmptyStats()); expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1) expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
.insertEntry(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L) .insertEntry(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 0L)
@@ -588,6 +602,89 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 1280L, 10L, 10); assertUidTotal(sTemplateImsi1, UID_RED, 1536L, 12L, 1280L, 10L, 10);
} }
@Test
public void testMobileStatsByRatType() throws Exception {
final NetworkTemplate template3g =
buildTemplateMobileWithRatType(null, TelephonyManager.NETWORK_TYPE_UMTS);
final NetworkTemplate template4g =
buildTemplateMobileWithRatType(null, TelephonyManager.NETWORK_TYPE_LTE);
final NetworkTemplate template5g =
buildTemplateMobileWithRatType(null, TelephonyManager.NETWORK_TYPE_NR);
final NetworkState[] states = new NetworkState[]{buildMobile3gState(IMSI_1)};
// 3G network comes online.
expectNetworkStatsSummary(buildEmptyStats());
expectNetworkStatsUidDetail(buildEmptyStats());
setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_UMTS);
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
new VpnInfo[0]);
// Create some traffic.
incrementCurrentTime(MINUTE_IN_MILLIS);
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
.addEntry(new NetworkStats.Entry(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE,
12L, 18L, 14L, 1L, 0L)));
forcePollAndWaitForIdle();
// Verify 3g templates gets stats.
assertUidTotal(sTemplateImsi1, UID_RED, 12L, 18L, 14L, 1L, 0);
assertUidTotal(template3g, UID_RED, 12L, 18L, 14L, 1L, 0);
assertUidTotal(template4g, UID_RED, 0L, 0L, 0L, 0L, 0);
assertUidTotal(template5g, UID_RED, 0L, 0L, 0L, 0L, 0);
// 4G network comes online.
incrementCurrentTime(MINUTE_IN_MILLIS);
setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_LTE);
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
// Append more traffic on existing 3g stats entry.
.addEntry(new NetworkStats.Entry(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE,
16L, 22L, 17L, 2L, 0L))
// Add entry that is new on 4g.
.addEntry(new NetworkStats.Entry(TEST_IFACE, UID_RED, SET_FOREGROUND, TAG_NONE,
33L, 27L, 8L, 10L, 1L)));
forcePollAndWaitForIdle();
// Verify ALL_MOBILE template gets all. 3g template counters do not increase.
assertUidTotal(sTemplateImsi1, UID_RED, 49L, 49L, 25L, 12L, 1);
assertUidTotal(template3g, UID_RED, 12L, 18L, 14L, 1L, 0);
// Verify 4g template counts appended stats on existing entry and newly created entry.
assertUidTotal(template4g, UID_RED, 4L + 33L, 4L + 27L, 3L + 8L, 1L + 10L, 1);
// Verify 5g template doesn't get anything since no traffic is generated on 5g.
assertUidTotal(template5g, UID_RED, 0L, 0L, 0L, 0L, 0);
// 5g network comes online.
incrementCurrentTime(MINUTE_IN_MILLIS);
setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_NR);
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
// Existing stats remains.
.addEntry(new NetworkStats.Entry(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE,
16L, 22L, 17L, 2L, 0L))
.addEntry(new NetworkStats.Entry(TEST_IFACE, UID_RED, SET_FOREGROUND, TAG_NONE,
33L, 27L, 8L, 10L, 1L))
// Add some traffic on 5g.
.addEntry(new NetworkStats.Entry(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE,
5L, 13L, 31L, 9L, 2L)));
forcePollAndWaitForIdle();
// Verify ALL_MOBILE template gets all.
assertUidTotal(sTemplateImsi1, UID_RED, 54L, 62L, 56L, 21L, 3);
// 3g/4g template counters do not increase.
assertUidTotal(template3g, UID_RED, 12L, 18L, 14L, 1L, 0);
assertUidTotal(template4g, UID_RED, 4L + 33L, 4L + 27L, 3L + 8L, 1L + 10L, 1);
// Verify 5g template gets the 5g count.
assertUidTotal(template5g, UID_RED, 5L, 13L, 31L, 9L, 2);
}
// TODO: support per IMSI state
private void setMobileRatTypeAndWaitForIdle(int ratType) {
final ServiceState mockSs = mock(ServiceState.class);
when(mockSs.getDataNetworkType()).thenReturn(ratType);
mPhoneStateListener.onServiceStateChanged(mockSs);
HandlerUtilsKt.waitForIdle(mHandlerThread, WAIT_TIMEOUT);
}
@Test @Test
public void testSummaryForAllUid() throws Exception { public void testSummaryForAllUid() throws Exception {
// pretend that network comes online // pretend that network comes online
@@ -1242,6 +1339,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
final NetworkCapabilities capabilities = new NetworkCapabilities(); final NetworkCapabilities capabilities = new NetworkCapabilities();
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, !isMetered); capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, !isMetered);
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, true); capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, true);
capabilities.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
return new NetworkState(info, prop, capabilities, WIFI_NETWORK, null, TEST_SSID); return new NetworkState(info, prop, capabilities, WIFI_NETWORK, null, TEST_SSID);
} }
@@ -1259,10 +1357,11 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
final NetworkCapabilities capabilities = new NetworkCapabilities(); final NetworkCapabilities capabilities = new NetworkCapabilities();
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, false); capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, false);
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !isRoaming); capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !isRoaming);
capabilities.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
return new NetworkState(info, prop, capabilities, MOBILE_NETWORK, subscriberId, null); return new NetworkState(info, prop, capabilities, MOBILE_NETWORK, subscriberId, null);
} }
private static NetworkState buildMobile4gState(String iface) { private static NetworkState buildWimaxState(@NonNull String iface) {
final NetworkInfo info = new NetworkInfo(TYPE_WIMAX, 0, null, null); final NetworkInfo info = new NetworkInfo(TYPE_WIMAX, 0, null, null);
info.setDetailedState(DetailedState.CONNECTED, null, null); info.setDetailedState(DetailedState.CONNECTED, null, null);
final LinkProperties prop = new LinkProperties(); final LinkProperties prop = new LinkProperties();