Fix network usage stats on 464xlat tethered.
Usage stats corrections for 464xlat in NetworkStatsFactory are not applied to tethered traffic. Add adjustments in NetworkStatsService. After migrating external callers off NetworkStatsFactory, we will be able to only apply adjustments in NetworkStatsService and remove stacked interface tracking from NetworkStatsFactory. Bug: 72107146 Fixes: 72107146 Test: runtest frameworks-net & manual - checked corrected network usage Merged-In: Ieb25c41c651499fdd01225ae5ac21d95e3d823f5 Merged-In: I016722f3a0ae2ae0a1d48bfacc4fe07ee3578ef7 (cherry-pick of aosp I5ce450e616b4fddf21f2a491fe5d0c9e9f969bda) Change-Id: Id41cf22a0f9a63cb1832e9375bfb045861f08e52
This commit is contained in:
@@ -39,8 +39,10 @@ import static org.junit.Assert.assertEquals;
|
|||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import android.os.Process;
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
import android.support.test.filters.SmallTest;
|
import android.support.test.filters.SmallTest;
|
||||||
|
import android.util.ArrayMap;
|
||||||
|
|
||||||
import com.google.android.collect.Sets;
|
import com.google.android.collect.Sets;
|
||||||
|
|
||||||
@@ -773,6 +775,88 @@ public class NetworkStatsTest {
|
|||||||
assertEquals(entry2, stats.getValues(1, null));
|
assertEquals(entry2, stats.getValues(1, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testApply464xlatAdjustments() {
|
||||||
|
final String v4Iface = "v4-wlan0";
|
||||||
|
final String baseIface = "wlan0";
|
||||||
|
final String otherIface = "other";
|
||||||
|
final int appUid = 10001;
|
||||||
|
final int rootUid = Process.ROOT_UID;
|
||||||
|
ArrayMap<String, String> stackedIface = new ArrayMap<>();
|
||||||
|
stackedIface.put(v4Iface, baseIface);
|
||||||
|
|
||||||
|
NetworkStats.Entry otherEntry = new NetworkStats.Entry(
|
||||||
|
otherIface, appUid, SET_DEFAULT, TAG_NONE,
|
||||||
|
2600 /* rxBytes */,
|
||||||
|
2 /* rxPackets */,
|
||||||
|
3800 /* txBytes */,
|
||||||
|
3 /* txPackets */,
|
||||||
|
0 /* operations */);
|
||||||
|
|
||||||
|
NetworkStats stats = new NetworkStats(TEST_START, 3)
|
||||||
|
.addValues(v4Iface, appUid, SET_DEFAULT, TAG_NONE,
|
||||||
|
30501490 /* rxBytes */,
|
||||||
|
22401 /* rxPackets */,
|
||||||
|
876235 /* txBytes */,
|
||||||
|
13805 /* txPackets */,
|
||||||
|
0 /* operations */)
|
||||||
|
.addValues(baseIface, rootUid, SET_DEFAULT, TAG_NONE,
|
||||||
|
31113087,
|
||||||
|
22588,
|
||||||
|
1169942,
|
||||||
|
13902,
|
||||||
|
0)
|
||||||
|
.addValues(otherEntry);
|
||||||
|
|
||||||
|
stats.apply464xlatAdjustments(stackedIface);
|
||||||
|
|
||||||
|
assertEquals(3, stats.size());
|
||||||
|
assertValues(stats, 0, v4Iface, appUid, SET_DEFAULT, TAG_NONE,
|
||||||
|
METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO,
|
||||||
|
30949510,
|
||||||
|
22401,
|
||||||
|
1152335,
|
||||||
|
13805,
|
||||||
|
0);
|
||||||
|
assertValues(stats, 1, baseIface, 0, SET_DEFAULT, TAG_NONE,
|
||||||
|
METERED_NO, ROAMING_NO, DEFAULT_NETWORK_NO,
|
||||||
|
163577,
|
||||||
|
187,
|
||||||
|
17607,
|
||||||
|
97,
|
||||||
|
0);
|
||||||
|
assertEquals(otherEntry, stats.getValues(2, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testApply464xlatAdjustments_noStackedIface() {
|
||||||
|
NetworkStats.Entry firstEntry = new NetworkStats.Entry(
|
||||||
|
"if1", 10002, SET_DEFAULT, TAG_NONE,
|
||||||
|
2600 /* rxBytes */,
|
||||||
|
2 /* rxPackets */,
|
||||||
|
3800 /* txBytes */,
|
||||||
|
3 /* txPackets */,
|
||||||
|
0 /* operations */);
|
||||||
|
NetworkStats.Entry secondEntry = new NetworkStats.Entry(
|
||||||
|
"if2", 10002, SET_DEFAULT, TAG_NONE,
|
||||||
|
5000 /* rxBytes */,
|
||||||
|
3 /* rxPackets */,
|
||||||
|
6000 /* txBytes */,
|
||||||
|
4 /* txPackets */,
|
||||||
|
0 /* operations */);
|
||||||
|
|
||||||
|
NetworkStats stats = new NetworkStats(TEST_START, 2)
|
||||||
|
.addValues(firstEntry)
|
||||||
|
.addValues(secondEntry);
|
||||||
|
|
||||||
|
// Empty map: no adjustment
|
||||||
|
stats.apply464xlatAdjustments(new ArrayMap<>());
|
||||||
|
|
||||||
|
assertEquals(2, stats.size());
|
||||||
|
assertEquals(firstEntry, stats.getValues(0, null));
|
||||||
|
assertEquals(secondEntry, stats.getValues(1, null));
|
||||||
|
}
|
||||||
|
|
||||||
private static void assertContains(NetworkStats stats, String iface, int uid, int set,
|
private static void assertContains(NetworkStats stats, String iface, int uid, int set,
|
||||||
int tag, int metered, int roaming, int defaultNetwork, long rxBytes, long rxPackets,
|
int tag, int metered, int roaming, int defaultNetwork, long rxBytes, long rxPackets,
|
||||||
long txBytes, long txPackets, long operations) {
|
long txBytes, long txPackets, long operations) {
|
||||||
|
|||||||
Reference in New Issue
Block a user