Add a test for metered/non-metered mobile network am: 2685c929f4 am: bbb828ef8e am: 7bd953a52e
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1779527 Change-Id: I0997a3d5e1e69c4cf8f3b1c53c8e46aa45f5ca21
This commit is contained in:
@@ -523,7 +523,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
public void testUidStatsAcrossNetworks() throws Exception {
|
public void testUidStatsAcrossNetworks() throws Exception {
|
||||||
// pretend first mobile network comes online
|
// pretend first mobile network comes online
|
||||||
expectDefaultSettings();
|
expectDefaultSettings();
|
||||||
NetworkStateSnapshot[] states = new NetworkStateSnapshot[] {buildMobile3gState(IMSI_1)};
|
NetworkStateSnapshot[] states = new NetworkStateSnapshot[] {buildMobileState(IMSI_1)};
|
||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
@@ -554,7 +554,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
// disappearing, to verify we don't count backwards.
|
// disappearing, to verify we don't count backwards.
|
||||||
incrementCurrentTime(HOUR_IN_MILLIS);
|
incrementCurrentTime(HOUR_IN_MILLIS);
|
||||||
expectDefaultSettings();
|
expectDefaultSettings();
|
||||||
states = new NetworkStateSnapshot[] {buildMobile3gState(IMSI_2)};
|
states = new NetworkStateSnapshot[] {buildMobileState(IMSI_2)};
|
||||||
expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
|
expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1)
|
||||||
.insertEntry(TEST_IFACE, 2048L, 16L, 512L, 4L));
|
.insertEntry(TEST_IFACE, 2048L, 16L, 512L, 4L));
|
||||||
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3)
|
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 3)
|
||||||
@@ -666,7 +666,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
buildTemplateMobileWithRatType(null, TelephonyManager.NETWORK_TYPE_NR,
|
buildTemplateMobileWithRatType(null, TelephonyManager.NETWORK_TYPE_NR,
|
||||||
METERED_YES);
|
METERED_YES);
|
||||||
final NetworkStateSnapshot[] states =
|
final NetworkStateSnapshot[] states =
|
||||||
new NetworkStateSnapshot[]{buildMobile3gState(IMSI_1)};
|
new NetworkStateSnapshot[]{buildMobileState(IMSI_1)};
|
||||||
|
|
||||||
// 3G network comes online.
|
// 3G network comes online.
|
||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
@@ -732,6 +732,45 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
assertUidTotal(template5g, UID_RED, 5L, 13L, 31L, 9L, 2);
|
assertUidTotal(template5g, UID_RED, 5L, 13L, 31L, 9L, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMobileStatsMeteredness() throws Exception {
|
||||||
|
// Create metered 5g template.
|
||||||
|
final NetworkTemplate templateMetered5g =
|
||||||
|
buildTemplateMobileWithRatType(null, TelephonyManager.NETWORK_TYPE_NR,
|
||||||
|
METERED_YES);
|
||||||
|
// Create non-metered 5g template
|
||||||
|
final NetworkTemplate templateNonMetered5g =
|
||||||
|
buildTemplateMobileWithRatType(null, TelephonyManager.NETWORK_TYPE_NR, METERED_NO);
|
||||||
|
|
||||||
|
expectDefaultSettings();
|
||||||
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
|
// Pretend that 5g mobile network comes online
|
||||||
|
final NetworkStateSnapshot[] mobileStates =
|
||||||
|
new NetworkStateSnapshot[] {buildMobileState(IMSI_1), buildMobileState(TEST_IFACE2,
|
||||||
|
IMSI_1, true /* isTemporarilyNotMetered */, false /* isRoaming */)};
|
||||||
|
setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_NR);
|
||||||
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, mobileStates,
|
||||||
|
getActiveIface(mobileStates), new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
|
// Create some traffic
|
||||||
|
// Note that all traffic from NetworkManagementService is tagged as METERED_NO, ROAMING_NO
|
||||||
|
// and DEFAULT_NETWORK_YES, because these three properties aren't tracked at that layer.
|
||||||
|
// They are layered on top by inspecting the iface properties.
|
||||||
|
incrementCurrentTime(HOUR_IN_MILLIS);
|
||||||
|
expectNetworkStatsUidDetail(new NetworkStats(getElapsedRealtime(), 1)
|
||||||
|
.insertEntry(TEST_IFACE, UID_RED, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
|
||||||
|
DEFAULT_NETWORK_YES, 128L, 2L, 128L, 2L, 0L)
|
||||||
|
.insertEntry(TEST_IFACE2, UID_RED, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO,
|
||||||
|
DEFAULT_NETWORK_YES, 256, 3L, 128L, 5L, 0L));
|
||||||
|
forcePollAndWaitForIdle();
|
||||||
|
|
||||||
|
// Verify service recorded history.
|
||||||
|
assertUidTotal(templateMetered5g, UID_RED, 128L, 2L, 128L, 2L, 0);
|
||||||
|
assertUidTotal(templateNonMetered5g, UID_RED, 256, 3L, 128L, 5L, 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMobileStatsOemManaged() throws Exception {
|
public void testMobileStatsOemManaged() throws Exception {
|
||||||
final NetworkTemplate templateOemPaid = new NetworkTemplate(MATCH_MOBILE_WILDCARD,
|
final NetworkTemplate templateOemPaid = new NetworkTemplate(MATCH_MOBILE_WILDCARD,
|
||||||
@@ -1115,7 +1154,8 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
// pretend that network comes online
|
// pretend that network comes online
|
||||||
expectDefaultSettings();
|
expectDefaultSettings();
|
||||||
NetworkStateSnapshot[] states =
|
NetworkStateSnapshot[] states =
|
||||||
new NetworkStateSnapshot[] {buildMobile3gState(IMSI_1, true /* isRoaming */)};
|
new NetworkStateSnapshot[] {buildMobileState(TEST_IFACE, IMSI_1,
|
||||||
|
false /* isTemporarilyNotMetered */, true /* isRoaming */)};
|
||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
@@ -1154,7 +1194,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
// pretend first mobile network comes online
|
// pretend first mobile network comes online
|
||||||
expectDefaultSettings();
|
expectDefaultSettings();
|
||||||
final NetworkStateSnapshot[] states =
|
final NetworkStateSnapshot[] states =
|
||||||
new NetworkStateSnapshot[]{buildMobile3gState(IMSI_1)};
|
new NetworkStateSnapshot[]{buildMobileState(IMSI_1)};
|
||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
@@ -1489,7 +1529,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
final NetworkTemplate templateAll =
|
final NetworkTemplate templateAll =
|
||||||
buildTemplateMobileWithRatType(null, NETWORK_TYPE_ALL, METERED_YES);
|
buildTemplateMobileWithRatType(null, NETWORK_TYPE_ALL, METERED_YES);
|
||||||
final NetworkStateSnapshot[] states =
|
final NetworkStateSnapshot[] states =
|
||||||
new NetworkStateSnapshot[]{buildMobile3gState(IMSI_1)};
|
new NetworkStateSnapshot[]{buildMobileState(IMSI_1)};
|
||||||
|
|
||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
@@ -1566,7 +1606,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
// Pretend mobile network comes online, but wifi is the default network.
|
// Pretend mobile network comes online, but wifi is the default network.
|
||||||
expectDefaultSettings();
|
expectDefaultSettings();
|
||||||
NetworkStateSnapshot[] states = new NetworkStateSnapshot[]{
|
NetworkStateSnapshot[] states = new NetworkStateSnapshot[]{
|
||||||
buildWifiState(true /*isMetered*/, TEST_IFACE2), buildMobile3gState(IMSI_1)};
|
buildWifiState(true /*isMetered*/, TEST_IFACE2), buildMobileState(IMSI_1)};
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
@@ -1660,6 +1700,8 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
return states[0].getLinkProperties().getInterfaceName();
|
return states[0].getLinkProperties().getInterfaceName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: These expect* methods are used to have NetworkStatsService returns the given stats
|
||||||
|
// instead of expecting anything. Therefore, these methods should be renamed properly.
|
||||||
private void expectNetworkStatsSummary(NetworkStats summary) throws Exception {
|
private void expectNetworkStatsSummary(NetworkStats summary) throws Exception {
|
||||||
expectNetworkStatsSummaryDev(summary.clone());
|
expectNetworkStatsSummaryDev(summary.clone());
|
||||||
expectNetworkStatsSummaryXt(summary.clone());
|
expectNetworkStatsSummaryXt(summary.clone());
|
||||||
@@ -1749,15 +1791,21 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
return new NetworkStateSnapshot(WIFI_NETWORK, capabilities, prop, subscriberId, TYPE_WIFI);
|
return new NetworkStateSnapshot(WIFI_NETWORK, capabilities, prop, subscriberId, TYPE_WIFI);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static NetworkStateSnapshot buildMobile3gState(String subscriberId) {
|
private static NetworkStateSnapshot buildMobileState(String subscriberId) {
|
||||||
return buildMobile3gState(subscriberId, false /* isRoaming */);
|
return buildMobileState(TEST_IFACE, subscriberId, false /* isTemporarilyNotMetered */,
|
||||||
|
false /* isRoaming */);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static NetworkStateSnapshot buildMobile3gState(String subscriberId, boolean isRoaming) {
|
private static NetworkStateSnapshot buildMobileState(String iface, String subscriberId,
|
||||||
|
boolean isTemporarilyNotMetered, boolean isRoaming) {
|
||||||
final LinkProperties prop = new LinkProperties();
|
final LinkProperties prop = new LinkProperties();
|
||||||
prop.setInterfaceName(TEST_IFACE);
|
prop.setInterfaceName(iface);
|
||||||
final NetworkCapabilities capabilities = new NetworkCapabilities();
|
final NetworkCapabilities capabilities = new NetworkCapabilities();
|
||||||
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, false);
|
|
||||||
|
if (isTemporarilyNotMetered) {
|
||||||
|
capabilities.addCapability(
|
||||||
|
NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED);
|
||||||
|
}
|
||||||
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !isRoaming);
|
capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !isRoaming);
|
||||||
capabilities.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
|
capabilities.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
|
||||||
return new NetworkStateSnapshot(
|
return new NetworkStateSnapshot(
|
||||||
|
|||||||
Reference in New Issue
Block a user