VPN network stat accounting changes.
Properly account for VPN apps that make heavy use of the tun
interface. Prior to this change a VPN app could be incorrectly charged
for more data than it actually used if it sent more traffic through
the tun interface than the underlying interface.
This change excludes VPN app traffic on the tun interface from the
adjustment pool and doesn't redistribute traffic to the VPN app.
Instead all of the redistributed traffic is deducted from the VPN app
which effectively represents any overhead incurred by the VPN app.
BUG: 30557871
(cherry picked from commit 13dd0e99ba)
Change-Id: I06f01aa8fe5fdc06b2d36cfb9c68feb244c2e5de
This commit is contained in:
committed by
Lorenzo Colitti
parent
eba4b5b0bd
commit
232e75c65b
@@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
package android.net;
|
package android.net;
|
||||||
|
|
||||||
import static android.net.NetworkStats.METERED_ALL;
|
|
||||||
import static android.net.NetworkStats.METERED_NO;
|
|
||||||
import static android.net.NetworkStats.METERED_YES;
|
|
||||||
import static android.net.NetworkStats.ROAMING_ALL;
|
import static android.net.NetworkStats.ROAMING_ALL;
|
||||||
import static android.net.NetworkStats.ROAMING_NO;
|
import static android.net.NetworkStats.ROAMING_NO;
|
||||||
import static android.net.NetworkStats.ROAMING_YES;
|
import static android.net.NetworkStats.ROAMING_YES;
|
||||||
@@ -48,124 +45,103 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
private static final long TEST_START = 1194220800000L;
|
private static final long TEST_START = 1194220800000L;
|
||||||
|
|
||||||
public void testFindIndex() throws Exception {
|
public void testFindIndex() throws Exception {
|
||||||
final NetworkStats stats = new NetworkStats(TEST_START, 5)
|
final NetworkStats stats = new NetworkStats(TEST_START, 4)
|
||||||
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 1024L,
|
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1024L, 8L, 0L,
|
||||||
8L, 0L, 0L, 10)
|
0L, 10)
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 0L, 0L,
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO, 0L, 0L, 1024L,
|
||||||
1024L, 8L, 11)
|
8L, 11)
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, 0L, 0L,
|
.addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1024L, 8L,
|
||||||
1024L, 8L, 11)
|
1024L, 8L, 12)
|
||||||
.addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 1024L,
|
.addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, ROAMING_YES, 1024L, 8L,
|
||||||
8L, 1024L, 8L, 12)
|
1024L, 8L, 12);
|
||||||
.addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_YES, 1024L,
|
|
||||||
8L, 1024L, 8L, 12);
|
|
||||||
|
|
||||||
assertEquals(4, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_YES,
|
assertEquals(3, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, ROAMING_YES));
|
||||||
ROAMING_YES));
|
assertEquals(2, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, ROAMING_NO));
|
||||||
assertEquals(3, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_NO,
|
assertEquals(1, stats.findIndex(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO));
|
||||||
ROAMING_NO));
|
assertEquals(0, stats.findIndex(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO));
|
||||||
assertEquals(2, stats.findIndex(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES,
|
assertEquals(-1, stats.findIndex(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE, ROAMING_NO));
|
||||||
ROAMING_NO));
|
|
||||||
assertEquals(1, stats.findIndex(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO,
|
|
||||||
ROAMING_NO));
|
|
||||||
assertEquals(0, stats.findIndex(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO,
|
|
||||||
ROAMING_NO));
|
|
||||||
assertEquals(-1, stats.findIndex(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE, METERED_NO,
|
|
||||||
ROAMING_NO));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testFindIndexHinted() {
|
public void testFindIndexHinted() {
|
||||||
final NetworkStats stats = new NetworkStats(TEST_START, 3)
|
final NetworkStats stats = new NetworkStats(TEST_START, 3)
|
||||||
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 1024L,
|
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1024L, 8L, 0L,
|
||||||
8L, 0L, 0L, 10)
|
0L, 10)
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 0L, 0L,
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO, 0L, 0L, 1024L,
|
||||||
1024L, 8L, 11)
|
8L, 11)
|
||||||
.addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 1024L,
|
.addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1024L, 8L,
|
||||||
8L, 1024L, 8L, 12)
|
1024L, 8L, 12)
|
||||||
.addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
|
.addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, ROAMING_NO, 1024L, 8L,
|
||||||
1024L, 8L, 0L, 0L, 10)
|
0L, 0L, 10)
|
||||||
.addValues(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO, 0L, 0L,
|
.addValues(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D, ROAMING_NO, 0L, 0L, 1024L,
|
||||||
1024L, 8L, 11)
|
8L, 11)
|
||||||
.addValues(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D, METERED_YES, ROAMING_NO, 0L, 0L,
|
.addValues(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1024L, 8L,
|
||||||
1024L, 8L, 11)
|
1024L, 8L, 12)
|
||||||
.addValues(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 1024L,
|
.addValues(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, ROAMING_YES, 1024L, 8L,
|
||||||
8L, 1024L, 8L, 12)
|
1024L, 8L, 12);
|
||||||
.addValues(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_YES, 1024L,
|
|
||||||
8L, 1024L, 8L, 12);
|
|
||||||
|
|
||||||
// verify that we correctly find across regardless of hinting
|
// verify that we correctly find across regardless of hinting
|
||||||
for (int hint = 0; hint < stats.size(); hint++) {
|
for (int hint = 0; hint < stats.size(); hint++) {
|
||||||
assertEquals(0, stats.findIndexHinted(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE,
|
assertEquals(0, stats.findIndexHinted(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE,
|
||||||
METERED_NO, ROAMING_NO, hint));
|
ROAMING_NO, hint));
|
||||||
assertEquals(1, stats.findIndexHinted(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE,
|
assertEquals(1, stats.findIndexHinted(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE,
|
||||||
METERED_NO, ROAMING_NO, hint));
|
ROAMING_NO, hint));
|
||||||
assertEquals(2, stats.findIndexHinted(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE,
|
assertEquals(2, stats.findIndexHinted(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE,
|
||||||
METERED_NO, ROAMING_NO, hint));
|
ROAMING_NO, hint));
|
||||||
assertEquals(3, stats.findIndexHinted(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE,
|
assertEquals(3, stats.findIndexHinted(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE,
|
||||||
METERED_NO, ROAMING_NO, hint));
|
ROAMING_NO, hint));
|
||||||
assertEquals(4, stats.findIndexHinted(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D,
|
assertEquals(4, stats.findIndexHinted(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D,
|
||||||
METERED_NO, ROAMING_NO, hint));
|
ROAMING_NO, hint));
|
||||||
assertEquals(5, stats.findIndexHinted(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D,
|
assertEquals(5, stats.findIndexHinted(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE,
|
||||||
METERED_YES, ROAMING_NO, hint));
|
ROAMING_NO, hint));
|
||||||
assertEquals(6, stats.findIndexHinted(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE,
|
assertEquals(6, stats.findIndexHinted(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE,
|
||||||
METERED_NO, ROAMING_NO, hint));
|
ROAMING_YES, hint));
|
||||||
assertEquals(7, stats.findIndexHinted(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE,
|
|
||||||
METERED_YES, ROAMING_YES, hint));
|
|
||||||
assertEquals(-1, stats.findIndexHinted(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE,
|
assertEquals(-1, stats.findIndexHinted(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE,
|
||||||
METERED_NO, ROAMING_NO, hint));
|
ROAMING_NO, hint));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddEntryGrow() throws Exception {
|
public void testAddEntryGrow() throws Exception {
|
||||||
final NetworkStats stats = new NetworkStats(TEST_START, 4);
|
final NetworkStats stats = new NetworkStats(TEST_START, 3);
|
||||||
|
|
||||||
assertEquals(0, stats.size());
|
assertEquals(0, stats.size());
|
||||||
assertEquals(4, stats.internalSize());
|
assertEquals(3, stats.internalSize());
|
||||||
|
|
||||||
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 1L, 1L,
|
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1L, 1L, 2L,
|
||||||
|
2L, 3);
|
||||||
|
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 2L, 2L, 2L,
|
||||||
|
2L, 4);
|
||||||
|
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_YES, 3L, 3L, 2L,
|
||||||
|
2L, 5);
|
||||||
|
|
||||||
|
assertEquals(3, stats.size());
|
||||||
|
assertEquals(3, stats.internalSize());
|
||||||
|
|
||||||
|
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 4L, 40L, 4L,
|
||||||
|
40L, 7);
|
||||||
|
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 5L, 50L, 4L,
|
||||||
|
40L, 8);
|
||||||
|
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 6L, 60L, 5L,
|
||||||
|
50L, 10);
|
||||||
|
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_YES, 7L, 70L, 5L,
|
||||||
|
50L, 11);
|
||||||
|
|
||||||
|
assertEquals(7, stats.size());
|
||||||
|
assertTrue(stats.internalSize() >= 7);
|
||||||
|
|
||||||
|
assertValues(stats, 0, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1L, 1L,
|
||||||
2L, 2L, 3);
|
2L, 2L, 3);
|
||||||
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 2L, 2L,
|
assertValues(stats, 1, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 2L, 2L,
|
||||||
2L, 2L, 4);
|
2L, 2L, 4);
|
||||||
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES, 3L,
|
assertValues(stats, 2, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_YES, 3L, 3L,
|
||||||
3L, 2L, 2L, 5);
|
2L, 2L, 5);
|
||||||
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_YES, 3L,
|
assertValues(stats, 3, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 4L,
|
||||||
3L, 2L, 2L, 5);
|
|
||||||
|
|
||||||
assertEquals(4, stats.size());
|
|
||||||
assertEquals(4, stats.internalSize());
|
|
||||||
|
|
||||||
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 4L,
|
|
||||||
40L, 4L, 40L, 7);
|
40L, 4L, 40L, 7);
|
||||||
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 5L,
|
assertValues(stats, 4, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 5L,
|
||||||
50L, 4L, 40L, 8);
|
50L, 4L, 40L, 8);
|
||||||
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 6L,
|
assertValues(stats, 5, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_NO, 6L,
|
||||||
60L, 5L, 50L, 10);
|
60L, 5L, 50L, 10);
|
||||||
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES, 7L,
|
assertValues(stats, 6, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, ROAMING_YES, 7L,
|
||||||
70L, 5L, 50L, 11);
|
70L, 5L, 50L, 11);
|
||||||
stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_YES, 7L,
|
|
||||||
70L, 5L, 50L, 11);
|
|
||||||
|
|
||||||
assertEquals(9, stats.size());
|
|
||||||
assertTrue(stats.internalSize() >= 9);
|
|
||||||
|
|
||||||
assertValues(stats, 0, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
|
||||||
1L, 1L, 2L, 2L, 3);
|
|
||||||
assertValues(stats, 1, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
|
||||||
2L, 2L, 2L, 2L, 4);
|
|
||||||
assertValues(stats, 2, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES,
|
|
||||||
3L, 3L, 2L, 2L, 5);
|
|
||||||
assertValues(stats, 3, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_YES,
|
|
||||||
ROAMING_YES, 3L, 3L, 2L, 2L, 5);
|
|
||||||
assertValues(stats, 4, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
|
||||||
4L, 40L, 4L, 40L, 7);
|
|
||||||
assertValues(stats, 5, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
|
||||||
5L, 50L, 4L, 40L, 8);
|
|
||||||
assertValues(stats, 6, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
|
||||||
6L, 60L, 5L, 50L, 10);
|
|
||||||
assertValues(stats, 7, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES,
|
|
||||||
7L, 70L, 5L, 50L, 11);
|
|
||||||
assertValues(stats, 8, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, METERED_YES,
|
|
||||||
ROAMING_YES, 7L, 70L, 5L, 50L, 11);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCombineExisting() throws Exception {
|
public void testCombineExisting() throws Exception {
|
||||||
@@ -176,18 +152,20 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
stats.combineValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, -128L, -1L,
|
stats.combineValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, -128L, -1L,
|
||||||
-128L, -1L, -1);
|
-128L, -1L, -1);
|
||||||
|
|
||||||
assertValues(stats, 0, TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(stats, 0, TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, ROAMING_NO, 384L, 3L,
|
||||||
384L, 3L, 128L, 1L, 9);
|
128L, 1L, 9);
|
||||||
assertValues(stats, 1, TEST_IFACE, 1001, SET_DEFAULT, 0xff, METERED_NO, ROAMING_NO, 128L,
|
assertValues(stats, 1, TEST_IFACE, 1001, SET_DEFAULT, 0xff, ROAMING_NO, 128L, 1L, 128L,
|
||||||
1L, 128L, 1L, 2);
|
1L, 2);
|
||||||
|
|
||||||
// now try combining that should create row
|
// now try combining that should create row
|
||||||
stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
|
stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L,
|
||||||
assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
128L, 1L, 3);
|
||||||
128L, 1L, 128L, 1L, 3);
|
assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, ROAMING_NO, 128L, 1L,
|
||||||
stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
|
128L, 1L, 3);
|
||||||
assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L,
|
||||||
256L, 2L, 256L, 2L, 6);
|
128L, 1L, 3);
|
||||||
|
assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, ROAMING_NO, 256L, 2L,
|
||||||
|
256L, 2L, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSubtractIdenticalData() throws Exception {
|
public void testSubtractIdenticalData() throws Exception {
|
||||||
@@ -202,10 +180,10 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
final NetworkStats result = after.subtract(before);
|
final NetworkStats result = after.subtract(before);
|
||||||
|
|
||||||
// identical data should result in zero delta
|
// identical data should result in zero delta
|
||||||
assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 0L,
|
assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 0L, 0L, 0L,
|
||||||
0L, 0L, 0L, 0);
|
0L, 0);
|
||||||
assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 0L,
|
assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO, 0L, 0L, 0L,
|
||||||
0L, 0L, 0L, 0);
|
0L, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSubtractIdenticalRows() throws Exception {
|
public void testSubtractIdenticalRows() throws Exception {
|
||||||
@@ -220,10 +198,10 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
final NetworkStats result = after.subtract(before);
|
final NetworkStats result = after.subtract(before);
|
||||||
|
|
||||||
// expect delta between measurements
|
// expect delta between measurements
|
||||||
assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 1L,
|
assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1L, 1L, 2L,
|
||||||
1L, 2L, 1L, 4);
|
1L, 4);
|
||||||
assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 3L,
|
assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO, 3L, 1L, 4L,
|
||||||
1L, 4L, 1L, 8);
|
1L, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSubtractNewRows() throws Exception {
|
public void testSubtractNewRows() throws Exception {
|
||||||
@@ -239,12 +217,12 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
final NetworkStats result = after.subtract(before);
|
final NetworkStats result = after.subtract(before);
|
||||||
|
|
||||||
// its okay to have new rows
|
// its okay to have new rows
|
||||||
assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 0L,
|
assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 0L, 0L, 0L,
|
||||||
0L, 0L, 0L, 0);
|
0L, 0);
|
||||||
assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 0L,
|
assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO, 0L, 0L, 0L,
|
||||||
0L, 0L, 0L, 0);
|
0L, 0);
|
||||||
assertValues(result, 2, TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(result, 2, TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1024L, 8L,
|
||||||
1024L, 8L, 1024L, 8L, 20);
|
1024L, 8L, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSubtractMissingRows() throws Exception {
|
public void testSubtractMissingRows() throws Exception {
|
||||||
@@ -259,8 +237,8 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
|
|
||||||
// should silently drop omitted rows
|
// should silently drop omitted rows
|
||||||
assertEquals(1, result.size());
|
assertEquals(1, result.size());
|
||||||
assertValues(result, 0, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, METERED_NO,
|
assertValues(result, 0, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1L,
|
||||||
ROAMING_NO, 1L, 2L, 3L, 4L, 0);
|
2L, 3L, 4L, 0);
|
||||||
assertEquals(4L, result.getTotalBytes());
|
assertEquals(4L, result.getTotalBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -285,22 +263,13 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L);
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L);
|
||||||
assertEquals(64L, uidTag.getTotalBytes());
|
assertEquals(64L, uidTag.getTotalBytes());
|
||||||
|
|
||||||
final NetworkStats uidMetered = new NetworkStats(TEST_START, 3)
|
|
||||||
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 32L, 0L,
|
|
||||||
0L, 0L, 0L)
|
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, 32L, 0L,
|
|
||||||
0L, 0L, 0L)
|
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, 32L, 0L,
|
|
||||||
0L, 0L, 0L);
|
|
||||||
assertEquals(96L, uidMetered.getTotalBytes());
|
|
||||||
|
|
||||||
final NetworkStats uidRoaming = new NetworkStats(TEST_START, 3)
|
final NetworkStats uidRoaming = new NetworkStats(TEST_START, 3)
|
||||||
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 32L, 0L,
|
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 32L, 0L, 0L, 0L,
|
||||||
0L, 0L, 0L)
|
0L)
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, 32L, 0L,
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO, 32L, 0L, 0L, 0L,
|
||||||
0L, 0L, 0L)
|
0L)
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES, 32L, 0L,
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_YES, 32L, 0L, 0L, 0L,
|
||||||
0L, 0L, 0L);
|
0L);
|
||||||
assertEquals(96L, uidRoaming.getTotalBytes());
|
assertEquals(96L, uidRoaming.getTotalBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,95 +283,95 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
|
|
||||||
public void testGroupedByIfaceAll() throws Exception {
|
public void testGroupedByIfaceAll() throws Exception {
|
||||||
final NetworkStats uidStats = new NetworkStats(TEST_START, 3)
|
final NetworkStats uidStats = new NetworkStats(TEST_START, 3)
|
||||||
.addValues(IFACE_ALL, 100, SET_ALL, TAG_NONE, METERED_NO, ROAMING_NO, 128L, 8L, 0L,
|
.addValues(IFACE_ALL, 100, SET_ALL, TAG_NONE, ROAMING_NO, 128L, 8L, 0L, 2L,
|
||||||
|
20L)
|
||||||
|
.addValues(IFACE_ALL, 101, SET_FOREGROUND, TAG_NONE, ROAMING_NO, 128L, 8L, 0L,
|
||||||
2L, 20L)
|
2L, 20L)
|
||||||
.addValues(IFACE_ALL, 101, SET_FOREGROUND, TAG_NONE, METERED_YES, ROAMING_NO, 128L,
|
.addValues(IFACE_ALL, 101, SET_ALL, TAG_NONE, ROAMING_YES, 128L, 8L, 0L, 2L,
|
||||||
8L, 0L, 2L, 20L)
|
20L);
|
||||||
.addValues(IFACE_ALL, 101, SET_ALL, TAG_NONE, METERED_NO, ROAMING_YES, 128L, 8L, 0L,
|
|
||||||
2L, 20L);
|
|
||||||
final NetworkStats grouped = uidStats.groupedByIface();
|
final NetworkStats grouped = uidStats.groupedByIface();
|
||||||
|
|
||||||
assertEquals(3, uidStats.size());
|
assertEquals(3, uidStats.size());
|
||||||
assertEquals(1, grouped.size());
|
assertEquals(1, grouped.size());
|
||||||
|
|
||||||
assertValues(grouped, 0, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL,
|
assertValues(grouped, 0, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, ROAMING_ALL, 384L, 24L, 0L,
|
||||||
384L, 24L, 0L, 6L, 0L);
|
6L, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGroupedByIface() throws Exception {
|
public void testGroupedByIface() throws Exception {
|
||||||
final NetworkStats uidStats = new NetworkStats(TEST_START, 7)
|
final NetworkStats uidStats = new NetworkStats(TEST_START, 7)
|
||||||
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 128L, 8L,
|
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 128L, 8L, 0L,
|
||||||
0L, 2L, 20L)
|
2L, 20L)
|
||||||
.addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 512L,
|
.addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 512L, 32L, 0L,
|
||||||
32L, 0L, 0L, 0L)
|
0L, 0L)
|
||||||
.addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO, 64L, 4L,
|
.addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, ROAMING_NO, 64L, 4L, 0L, 0L,
|
||||||
|
0L)
|
||||||
|
.addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, ROAMING_NO, 512L, 32L,
|
||||||
0L, 0L, 0L)
|
0L, 0L, 0L)
|
||||||
.addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO, 512L,
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO, 128L, 8L, 0L,
|
||||||
32L, 0L, 0L, 0L)
|
0L, 0L)
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 128L, 8L,
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, ROAMING_NO, 128L, 8L, 0L, 0L,
|
||||||
0L, 0L, 0L)
|
0L)
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, METERED_YES, ROAMING_NO, 128L, 8L,
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_YES, 128L, 8L, 0L,
|
||||||
0L, 0L, 0L)
|
0L, 0L);
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES, 128L,
|
|
||||||
8L, 0L, 0L, 0L);
|
|
||||||
|
|
||||||
final NetworkStats grouped = uidStats.groupedByIface();
|
final NetworkStats grouped = uidStats.groupedByIface();
|
||||||
|
|
||||||
assertEquals(7, uidStats.size());
|
assertEquals(7, uidStats.size());
|
||||||
|
|
||||||
assertEquals(2, grouped.size());
|
assertEquals(2, grouped.size());
|
||||||
assertValues(grouped, 0, TEST_IFACE, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL,
|
assertValues(grouped, 0, TEST_IFACE, UID_ALL, SET_ALL, TAG_NONE, ROAMING_ALL, 384L, 24L, 0L,
|
||||||
384L, 24L, 0L, 2L, 0L);
|
2L, 0L);
|
||||||
assertValues(grouped, 1, TEST_IFACE2, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL,
|
assertValues(grouped, 1, TEST_IFACE2, UID_ALL, SET_ALL, TAG_NONE, ROAMING_ALL, 1024L, 64L,
|
||||||
1024L, 64L, 0L, 0L, 0L);
|
0L, 0L, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddAllValues() {
|
public void testAddAllValues() {
|
||||||
final NetworkStats first = new NetworkStats(TEST_START, 5)
|
final NetworkStats first = new NetworkStats(TEST_START, 5)
|
||||||
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, 32L, 0L,
|
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 32L, 0L, 0L, 0L,
|
||||||
0L, 0L, 0L)
|
0L)
|
||||||
.addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO, 32L,
|
.addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, ROAMING_NO, 32L, 0L, 0L,
|
||||||
0L, 0L, 0L, 0L)
|
0L, 0L)
|
||||||
.addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_YES, ROAMING_YES, 32L,
|
.addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, ROAMING_YES, 32L, 0L, 0L,
|
||||||
0L, 0L, 0L, 0L);
|
0L, 0L);
|
||||||
|
|
||||||
final NetworkStats second = new NetworkStats(TEST_START, 2)
|
final NetworkStats second = new NetworkStats(TEST_START, 2)
|
||||||
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, 32L, 0L,
|
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 32L, 0L, 0L, 0L,
|
||||||
|
0L)
|
||||||
|
.addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, ROAMING_NO, 32L, 0L,
|
||||||
0L, 0L, 0L)
|
0L, 0L, 0L)
|
||||||
.addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 32L,
|
.addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, ROAMING_YES, 32L, 0L, 0L,
|
||||||
0L, 0L, 0L, 0L)
|
0L, 0L);
|
||||||
.addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_YES, ROAMING_YES, 32L,
|
|
||||||
0L, 0L, 0L, 0L);
|
|
||||||
|
|
||||||
first.combineAllValues(second);
|
first.combineAllValues(second);
|
||||||
|
|
||||||
assertEquals(4, first.size());
|
assertEquals(4, first.size());
|
||||||
assertValues(first, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, 64L,
|
assertValues(first, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 64L, 0L, 0L,
|
||||||
|
0L, 0L);
|
||||||
|
assertValues(first, 1, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, ROAMING_NO, 32L, 0L,
|
||||||
|
0L, 0L, 0L);
|
||||||
|
assertValues(first, 2, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, ROAMING_YES, 64L, 0L,
|
||||||
|
0L, 0L, 0L);
|
||||||
|
assertValues(first, 3, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, ROAMING_NO, 32L,
|
||||||
0L, 0L, 0L, 0L);
|
0L, 0L, 0L, 0L);
|
||||||
assertValues(first, 1, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
|
|
||||||
32L, 0L, 0L, 0L, 0L);
|
|
||||||
assertValues(first, 2, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, METERED_YES, ROAMING_YES,
|
|
||||||
64L, 0L, 0L, 0L, 0L);
|
|
||||||
assertValues(first, 3, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
|
||||||
32L, 0L, 0L, 0L, 0L);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGetTotal() {
|
public void testGetTotal() {
|
||||||
final NetworkStats stats = new NetworkStats(TEST_START, 7)
|
final NetworkStats stats = new NetworkStats(TEST_START, 7)
|
||||||
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 128L, 8L,
|
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 128L, 8L, 0L,
|
||||||
0L, 2L, 20L)
|
2L, 20L)
|
||||||
.addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 512L,
|
.addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 512L, 32L, 0L,
|
||||||
32L, 0L, 0L, 0L)
|
0L, 0L)
|
||||||
.addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO, 64L, 4L,
|
.addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, ROAMING_NO, 64L, 4L, 0L, 0L,
|
||||||
|
0L)
|
||||||
|
.addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, ROAMING_NO, 512L, 32L,
|
||||||
0L, 0L, 0L)
|
0L, 0L, 0L)
|
||||||
.addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO, 512L,
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO, 128L, 8L, 0L,
|
||||||
32L, 0L, 0L, 0L)
|
0L, 0L)
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_YES, ROAMING_NO, 128L,
|
.addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, ROAMING_NO, 128L, 8L, 0L, 0L,
|
||||||
8L, 0L, 0L, 0L)
|
0L)
|
||||||
.addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO, 128L, 8L,
|
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, ROAMING_YES, 128L, 8L, 0L,
|
||||||
0L, 0L, 0L)
|
0L, 0L);
|
||||||
.addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_YES, 128L,
|
|
||||||
8L, 0L, 0L, 0L);
|
|
||||||
|
|
||||||
assertValues(stats.getTotal(null), 1408L, 88L, 0L, 2L, 20L);
|
assertValues(stats.getTotal(null), 1408L, 88L, 0L, 2L, 20L);
|
||||||
assertValues(stats.getTotal(null, 100), 1280L, 80L, 0L, 2L, 20L);
|
assertValues(stats.getTotal(null, 100), 1280L, 80L, 0L, 2L, 20L);
|
||||||
@@ -427,10 +396,10 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
final NetworkStats after = before.withoutUids(new int[] { 100 });
|
final NetworkStats after = before.withoutUids(new int[] { 100 });
|
||||||
assertEquals(6, before.size());
|
assertEquals(6, before.size());
|
||||||
assertEquals(2, after.size());
|
assertEquals(2, after.size());
|
||||||
assertValues(after, 0, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(after, 0, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, ROAMING_NO, 128L, 8L,
|
||||||
128L, 8L, 0L, 0L, 0L);
|
0L, 0L, 0L);
|
||||||
assertValues(after, 1, TEST_IFACE, 101, SET_DEFAULT, 0xF00D, METERED_NO, ROAMING_NO, 128L,
|
assertValues(after, 1, TEST_IFACE, 101, SET_DEFAULT, 0xF00D, ROAMING_NO, 128L, 8L, 0L,
|
||||||
8L, 0L, 0L, 0L);
|
0L, 0L);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testClone() throws Exception {
|
public void testClone() throws Exception {
|
||||||
@@ -465,90 +434,77 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
final String underlyingIface = "wlan0";
|
final String underlyingIface = "wlan0";
|
||||||
final int testTag1 = 8888;
|
final int testTag1 = 8888;
|
||||||
NetworkStats delta = new NetworkStats(TEST_START, 17)
|
NetworkStats delta = new NetworkStats(TEST_START, 17)
|
||||||
.addValues(tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 39605L, 46L,
|
.addValues(tunIface, 10100, SET_DEFAULT, TAG_NONE, 39605L, 46L, 12259L, 55L, 0L)
|
||||||
12259L, 55L, 0L)
|
.addValues(tunIface, 10100, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L)
|
||||||
.addValues(tunIface, 10100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO, 0L, 0L,
|
.addValues(tunIface, 10120, SET_DEFAULT, TAG_NONE, 72667L, 197L, 43909L, 241L, 0L)
|
||||||
0L, 0L, 0L)
|
.addValues(tunIface, 10120, SET_FOREGROUND, TAG_NONE, 9297L, 17L, 4128L, 21L, 0L)
|
||||||
.addValues(tunIface, 10120, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 72667L, 197L,
|
|
||||||
43909L, 241L, 0L)
|
|
||||||
.addValues(tunIface, 10120, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO, 9297L,
|
|
||||||
17L, 4128L, 21L, 0L)
|
|
||||||
// VPN package also uses some traffic through unprotected network.
|
// VPN package also uses some traffic through unprotected network.
|
||||||
.addValues(tunIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 4983L, 10L,
|
.addValues(tunIface, tunUid, SET_DEFAULT, TAG_NONE, 4983L, 10L, 1801L, 12L, 0L)
|
||||||
1801L, 12L, 0L)
|
.addValues(tunIface, tunUid, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L)
|
||||||
.addValues(tunIface, tunUid, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO, 0L, 0L,
|
|
||||||
0L, 0L, 0L)
|
|
||||||
// Tag entries
|
// Tag entries
|
||||||
.addValues(tunIface, 10120, SET_DEFAULT, testTag1, METERED_NO, ROAMING_NO, 21691L, 41L,
|
.addValues(tunIface, 10120, SET_DEFAULT, testTag1, 21691L, 41L, 13820L, 51L, 0L)
|
||||||
13820L, 51L, 0L)
|
.addValues(tunIface, 10120, SET_FOREGROUND, testTag1, 1281L, 2L, 665L, 2L, 0L)
|
||||||
.addValues(tunIface, 10120, SET_FOREGROUND, testTag1, METERED_NO, ROAMING_NO, 1281L, 2L,
|
|
||||||
665L, 2L, 0L)
|
|
||||||
// Irrelevant entries
|
// Irrelevant entries
|
||||||
.addValues(TEST_IFACE, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 1685L, 5L,
|
.addValues(TEST_IFACE, 10100, SET_DEFAULT, TAG_NONE, 1685L, 5L, 2070L, 6L, 0L)
|
||||||
2070L, 6L, 0L)
|
|
||||||
// Underlying Iface entries
|
// Underlying Iface entries
|
||||||
.addValues(underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 5178L,
|
.addValues(underlyingIface, 10100, SET_DEFAULT, TAG_NONE, 5178L, 8L, 2139L, 11L, 0L)
|
||||||
8L, 2139L, 11L, 0L)
|
.addValues(underlyingIface, 10100, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L)
|
||||||
.addValues(underlyingIface, 10100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO, 0L,
|
.addValues(underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, 149873L, 287L,
|
||||||
0L, 0L, 0L, 0L)
|
59217L /* smaller than sum(tun0) */, 299L /* smaller than sum(tun0) */, 0L)
|
||||||
.addValues(underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
.addValues(underlyingIface, tunUid, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L);
|
||||||
149873L, 287L, 59217L /* smaller than sum(tun0) */,
|
|
||||||
299L /* smaller than sum(tun0) */, 0L)
|
|
||||||
.addValues(underlyingIface, tunUid, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
|
|
||||||
0L, 0L, 0L, 0L, 0L);
|
|
||||||
|
|
||||||
assertTrue(delta.migrateTun(tunUid, tunIface, underlyingIface));
|
assertTrue(delta.migrateTun(tunUid, tunIface, underlyingIface));
|
||||||
assertEquals(20, delta.size());
|
assertEquals(20, delta.size());
|
||||||
|
|
||||||
// tunIface and TEST_IFACE entries are not changed.
|
// tunIface and TEST_IFACE entries are not changed.
|
||||||
assertValues(delta, 0, tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 0, tunIface, 10100, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
39605L, 46L, 12259L, 55L, 0L);
|
39605L, 46L, 12259L, 55L, 0L);
|
||||||
assertValues(delta, 1, tunIface, 10100, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 1, tunIface, 10100, SET_FOREGROUND, TAG_NONE, ROAMING_NO, 0L, 0L,
|
||||||
0L, 0L, 0L, 0L, 0L);
|
0L, 0L, 0L);
|
||||||
assertValues(delta, 2, tunIface, 10120, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 2, tunIface, 10120, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
72667L, 197L, 43909L, 241L, 0L);
|
72667L, 197L, 43909L, 241L, 0L);
|
||||||
assertValues(delta, 3, tunIface, 10120, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 3, tunIface, 10120, SET_FOREGROUND, TAG_NONE, ROAMING_NO,
|
||||||
9297L, 17L, 4128L, 21L, 0L);
|
9297L, 17L, 4128L, 21L, 0L);
|
||||||
assertValues(delta, 4, tunIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 4, tunIface, tunUid, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
4983L, 10L, 1801L, 12L, 0L);
|
4983L, 10L, 1801L, 12L, 0L);
|
||||||
assertValues(delta, 5, tunIface, tunUid, SET_FOREGROUND, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 5, tunIface, tunUid, SET_FOREGROUND, TAG_NONE, ROAMING_NO, 0L, 0L,
|
||||||
0L, 0L, 0L, 0L, 0L);
|
0L, 0L, 0L);
|
||||||
assertValues(delta, 6, tunIface, 10120, SET_DEFAULT, testTag1, METERED_NO, ROAMING_NO,
|
assertValues(delta, 6, tunIface, 10120, SET_DEFAULT, testTag1, ROAMING_NO,
|
||||||
21691L, 41L, 13820L, 51L, 0L);
|
21691L, 41L, 13820L, 51L, 0L);
|
||||||
assertValues(delta, 7, tunIface, 10120, SET_FOREGROUND, testTag1, METERED_NO, ROAMING_NO,
|
assertValues(delta, 7, tunIface, 10120, SET_FOREGROUND, testTag1, ROAMING_NO, 1281L,
|
||||||
1281L, 2L, 665L, 2L, 0L);
|
2L, 665L, 2L, 0L);
|
||||||
assertValues(delta, 8, TEST_IFACE, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 8, TEST_IFACE, 10100, SET_DEFAULT, TAG_NONE, ROAMING_NO, 1685L, 5L,
|
||||||
1685L, 5L, 2070L, 6L, 0L);
|
2070L, 6L, 0L);
|
||||||
|
|
||||||
// Existing underlying Iface entries are updated
|
// Existing underlying Iface entries are updated
|
||||||
assertValues(delta, 9, underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO,
|
assertValues(delta, 9, underlyingIface, 10100, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 44783L, 54L, 14178L, 62L, 0L);
|
44783L, 54L, 14178L, 62L, 0L);
|
||||||
assertValues(delta, 10, underlyingIface, 10100, SET_FOREGROUND, TAG_NONE, METERED_NO,
|
assertValues(delta, 10, underlyingIface, 10100, SET_FOREGROUND, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 0L, 0L, 0L, 0L, 0L);
|
0L, 0L, 0L, 0L, 0L);
|
||||||
|
|
||||||
// VPN underlying Iface entries are updated
|
// VPN underlying Iface entries are updated
|
||||||
assertValues(delta, 11, underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO,
|
assertValues(delta, 11, underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 28304L, 27L, 1L, 2L, 0L);
|
28304L, 27L, 1L, 2L, 0L);
|
||||||
assertValues(delta, 12, underlyingIface, tunUid, SET_FOREGROUND, TAG_NONE, METERED_NO,
|
assertValues(delta, 12, underlyingIface, tunUid, SET_FOREGROUND, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 0L, 0L, 0L, 0L, 0L);
|
0L, 0L, 0L, 0L, 0L);
|
||||||
|
|
||||||
// New entries are added for new application's underlying Iface traffic
|
// New entries are added for new application's underlying Iface traffic
|
||||||
assertContains(delta, underlyingIface, 10120, SET_DEFAULT, TAG_NONE, METERED_NO,
|
assertContains(delta, underlyingIface, 10120, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 72667L, 197L, 43123L, 227L, 0L);
|
72667L, 197L, 43123L, 227L, 0L);
|
||||||
assertContains(delta, underlyingIface, 10120, SET_FOREGROUND, TAG_NONE, METERED_NO,
|
assertContains(delta, underlyingIface, 10120, SET_FOREGROUND, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 9297L, 17L, 4054, 19L, 0L);
|
9297L, 17L, 4054, 19L, 0L);
|
||||||
assertContains(delta, underlyingIface, 10120, SET_DEFAULT, testTag1, METERED_NO,
|
assertContains(delta, underlyingIface, 10120, SET_DEFAULT, testTag1, ROAMING_NO,
|
||||||
ROAMING_NO, 21691L, 41L, 13572L, 48L, 0L);
|
21691L, 41L, 13572L, 48L, 0L);
|
||||||
assertContains(delta, underlyingIface, 10120, SET_FOREGROUND, testTag1, METERED_NO,
|
assertContains(delta, underlyingIface, 10120, SET_FOREGROUND, testTag1, ROAMING_NO,
|
||||||
ROAMING_NO, 1281L, 2L, 653L, 1L, 0L);
|
1281L, 2L, 653L, 1L, 0L);
|
||||||
|
|
||||||
// New entries are added for debug purpose
|
// New entries are added for debug purpose
|
||||||
assertContains(delta, underlyingIface, 10100, SET_DBG_VPN_IN, TAG_NONE, METERED_NO,
|
assertContains(delta, underlyingIface, 10100, SET_DBG_VPN_IN, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 39605L, 46L, 12039, 51, 0);
|
39605L, 46L, 12039, 51, 0);
|
||||||
assertContains(delta, underlyingIface, 10120, SET_DBG_VPN_IN, TAG_NONE, METERED_NO,
|
assertContains(delta, underlyingIface, 10120, SET_DBG_VPN_IN, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 81964, 214, 47177, 246, 0);
|
81964, 214, 47177, 246, 0);
|
||||||
assertContains(delta, underlyingIface, tunUid, SET_DBG_VPN_OUT, TAG_NONE, METERED_ALL,
|
assertContains(delta, underlyingIface, tunUid, SET_DBG_VPN_OUT, TAG_NONE, ROAMING_ALL,
|
||||||
ROAMING_ALL, 121569, 260, 59216, 297, 0);
|
121569, 260, 59216, 297, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -562,78 +518,72 @@ public class NetworkStatsTest extends TestCase {
|
|||||||
final String underlyingIface = "wlan0";
|
final String underlyingIface = "wlan0";
|
||||||
NetworkStats delta = new NetworkStats(TEST_START, 9)
|
NetworkStats delta = new NetworkStats(TEST_START, 9)
|
||||||
// 2 different apps sent/receive data via tun0.
|
// 2 different apps sent/receive data via tun0.
|
||||||
.addValues(tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 50000L, 25L,
|
.addValues(tunIface, 10100, SET_DEFAULT, TAG_NONE, 50000L, 25L, 100000L, 50L, 0L)
|
||||||
100000L, 50L, 0L)
|
.addValues(tunIface, 20100, SET_DEFAULT, TAG_NONE, 500L, 2L, 200L, 5L, 0L)
|
||||||
.addValues(tunIface, 20100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 500L, 2L,
|
|
||||||
200L, 5L, 0L)
|
|
||||||
// VPN package resends data through the tunnel (with exaggerated overhead)
|
// VPN package resends data through the tunnel (with exaggerated overhead)
|
||||||
.addValues(tunIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 240000,
|
.addValues(tunIface, tunUid, SET_DEFAULT, TAG_NONE, 240000, 100L, 120000L, 60L, 0L)
|
||||||
100L, 120000L, 60L, 0L)
|
|
||||||
// 1 app already has some traffic on the underlying interface, the other doesn't yet
|
// 1 app already has some traffic on the underlying interface, the other doesn't yet
|
||||||
.addValues(underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, 1000L,
|
.addValues(underlyingIface, 10100, SET_DEFAULT, TAG_NONE, 1000L, 10L, 2000L, 20L, 0L)
|
||||||
10L, 2000L, 20L, 0L)
|
|
||||||
// Traffic through the underlying interface via the vpn app.
|
// Traffic through the underlying interface via the vpn app.
|
||||||
// This test should redistribute this data correctly.
|
// This test should redistribute this data correctly.
|
||||||
.addValues(underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
.addValues(underlyingIface, tunUid, SET_DEFAULT, TAG_NONE,
|
||||||
75500L, 37L, 130000L, 70L, 0L);
|
75500L, 37L, 130000L, 70L, 0L);
|
||||||
|
|
||||||
assertTrue(delta.migrateTun(tunUid, tunIface, underlyingIface));
|
assertTrue(delta.migrateTun(tunUid, tunIface, underlyingIface));
|
||||||
assertEquals(9, delta.size());
|
assertEquals(9, delta.size());
|
||||||
|
|
||||||
// tunIface entries should not be changed.
|
// tunIface entries should not be changed.
|
||||||
assertValues(delta, 0, tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 0, tunIface, 10100, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
50000L, 25L, 100000L, 50L, 0L);
|
50000L, 25L, 100000L, 50L, 0L);
|
||||||
assertValues(delta, 1, tunIface, 20100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 1, tunIface, 20100, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
500L, 2L, 200L, 5L, 0L);
|
500L, 2L, 200L, 5L, 0L);
|
||||||
assertValues(delta, 2, tunIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO,
|
assertValues(delta, 2, tunIface, tunUid, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
240000L, 100L, 120000L, 60L, 0L);
|
240000L, 100L, 120000L, 60L, 0L);
|
||||||
|
|
||||||
// Existing underlying Iface entries are updated
|
// Existing underlying Iface entries are updated
|
||||||
assertValues(delta, 3, underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO,
|
assertValues(delta, 3, underlyingIface, 10100, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 51000L, 35L, 102000L, 70L, 0L);
|
51000L, 35L, 102000L, 70L, 0L);
|
||||||
|
|
||||||
// VPN underlying Iface entries are updated
|
// VPN underlying Iface entries are updated
|
||||||
assertValues(delta, 4, underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, METERED_NO,
|
assertValues(delta, 4, underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 25000L, 10L, 29800L, 15L, 0L);
|
25000L, 10L, 29800L, 15L, 0L);
|
||||||
|
|
||||||
// New entries are added for new application's underlying Iface traffic
|
// New entries are added for new application's underlying Iface traffic
|
||||||
assertContains(delta, underlyingIface, 20100, SET_DEFAULT, TAG_NONE, METERED_NO,
|
assertContains(delta, underlyingIface, 20100, SET_DEFAULT, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 500L, 2L, 200L, 5L, 0L);
|
500L, 2L, 200L, 5L, 0L);
|
||||||
|
|
||||||
// New entries are added for debug purpose
|
// New entries are added for debug purpose
|
||||||
assertContains(delta, underlyingIface, 10100, SET_DBG_VPN_IN, TAG_NONE, METERED_NO,
|
assertContains(delta, underlyingIface, 10100, SET_DBG_VPN_IN, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 50000L, 25L, 100000L, 50L, 0L);
|
50000L, 25L, 100000L, 50L, 0L);
|
||||||
assertContains(delta, underlyingIface, 20100, SET_DBG_VPN_IN, TAG_NONE, METERED_NO,
|
assertContains(delta, underlyingIface, 20100, SET_DBG_VPN_IN, TAG_NONE, ROAMING_NO,
|
||||||
ROAMING_NO, 500, 2L, 200L, 5L, 0L);
|
500, 2L, 200L, 5L, 0L);
|
||||||
assertContains(delta, underlyingIface, tunUid, SET_DBG_VPN_OUT, TAG_NONE, METERED_ALL,
|
assertContains(delta, underlyingIface, tunUid, SET_DBG_VPN_OUT, TAG_NONE, ROAMING_ALL,
|
||||||
ROAMING_ALL, 50500L, 27L, 100200L, 55, 0);
|
50500L, 27L, 100200L, 55, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
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, long rxBytes, long rxPackets, long txBytes,
|
int tag, int roaming, long rxBytes, long rxPackets, long txBytes, long txPackets,
|
||||||
long txPackets, long operations) {
|
long operations) {
|
||||||
int index = stats.findIndex(iface, uid, set, tag, metered, roaming);
|
int index = stats.findIndex(iface, uid, set, tag, roaming);
|
||||||
assertTrue(index != -1);
|
assertTrue(index != -1);
|
||||||
assertValues(stats, index, iface, uid, set, tag, metered, roaming,
|
assertValues(stats, index, iface, uid, set, tag, roaming,
|
||||||
rxBytes, rxPackets, txBytes, txPackets, operations);
|
rxBytes, rxPackets, txBytes, txPackets, operations);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void assertValues(NetworkStats stats, int index, String iface, int uid, int set,
|
private static void assertValues(NetworkStats stats, int index, String iface, int uid, int set,
|
||||||
int tag, int metered, int roaming, long rxBytes, long rxPackets, long txBytes,
|
int tag, int roaming, long rxBytes, long rxPackets, long txBytes, long txPackets,
|
||||||
long txPackets, long operations) {
|
long operations) {
|
||||||
final NetworkStats.Entry entry = stats.getValues(index, null);
|
final NetworkStats.Entry entry = stats.getValues(index, null);
|
||||||
assertValues(entry, iface, uid, set, tag, metered, roaming);
|
assertValues(entry, iface, uid, set, tag, roaming);
|
||||||
assertValues(entry, rxBytes, rxPackets, txBytes, txPackets, operations);
|
assertValues(entry, rxBytes, rxPackets, txBytes, txPackets, operations);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void assertValues(
|
private static void assertValues(
|
||||||
NetworkStats.Entry entry, String iface, int uid, int set, int tag, int metered,
|
NetworkStats.Entry entry, String iface, int uid, int set, int tag, int roaming) {
|
||||||
int roaming) {
|
|
||||||
assertEquals(iface, entry.iface);
|
assertEquals(iface, entry.iface);
|
||||||
assertEquals(uid, entry.uid);
|
assertEquals(uid, entry.uid);
|
||||||
assertEquals(set, entry.set);
|
assertEquals(set, entry.set);
|
||||||
assertEquals(tag, entry.tag);
|
assertEquals(tag, entry.tag);
|
||||||
assertEquals(metered, entry.metered);
|
|
||||||
assertEquals(roaming, entry.roaming);
|
assertEquals(roaming, entry.roaming);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user