diff options
| author | Benedict Wong <benedictwong@google.com> | 2021-07-02 18:42:15 +0000 |
|---|---|---|
| committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-07-02 18:42:15 +0000 |
| commit | 64619cabc11983c8145621b970814ecdda378fbe (patch) | |
| tree | 62f8f4b04da0922e8187f50b56d38cdb80223445 /tests/unit/java/android/net/NetworkStatsTest.java | |
| parent | 321558ffe8e6cca1fa21d1c064323e9191da0031 (diff) | |
| parent | 1117e853f939021306dd58871d090fd0af8dd970 (diff) | |
Merge "Add tests for in-kernel VPN/VCN dataplane"
Diffstat (limited to 'tests/unit/java/android/net/NetworkStatsTest.java')
| -rw-r--r-- | tests/unit/java/android/net/NetworkStatsTest.java | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/unit/java/android/net/NetworkStatsTest.java b/tests/unit/java/android/net/NetworkStatsTest.java index 1cdc6cb760..c971da1c39 100644 --- a/tests/unit/java/android/net/NetworkStatsTest.java +++ b/tests/unit/java/android/net/NetworkStatsTest.java @@ -734,6 +734,56 @@ public class NetworkStatsTest { ROAMING_ALL, DEFAULT_NETWORK_ALL, 50500L, 27L, 100200L, 55, 0); } + // Tests a case where an PlatformVpn is used, where the entire datapath is in the kernel, + // including all encapsulation/decapsulation. + @Test + public void testMigrateTun_platformVpn() { + final int ownerUid = Process.SYSTEM_UID; + final String tunIface = "ipsec1"; + final String underlyingIface = "wlan0"; + NetworkStats delta = new NetworkStats(TEST_START, 9) + // 2 different apps sent/receive data via ipsec1. + .insertEntry(tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, + DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L) + .insertEntry(tunIface, 20100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, + DEFAULT_NETWORK_NO, 500L, 2L, 200L, 5L, 0L) + // Owner (system) sends data through the tunnel + .insertEntry(tunIface, ownerUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, + DEFAULT_NETWORK_NO, 2000L, 20L, 3000L, 30L, 0L) + // 1 app already has some traffic on the underlying interface, the other doesn't yet + .insertEntry(underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, + DEFAULT_NETWORK_NO, 1000L, 10L, 2000L, 20L, 0L); + + delta.migrateTun(ownerUid, tunIface, Arrays.asList(underlyingIface)); + assertEquals(9, delta.size()); // 3 DBG entries + 1 entry per app per interface + + // tunIface entries should not be changed. + assertValues(delta, 0, tunIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, + DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L); + assertValues(delta, 1, tunIface, 20100, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, + DEFAULT_NETWORK_NO, 500L, 2L, 200L, 5L, 0L); + assertValues(delta, 2, tunIface, ownerUid, SET_DEFAULT, TAG_NONE, METERED_NO, ROAMING_NO, + DEFAULT_NETWORK_NO, 2000L, 20L, 3000L, 30L, 0L); + + // Existing underlying Iface entries are updated to include usage over ipsec1 + assertValues(delta, 3, underlyingIface, 10100, SET_DEFAULT, TAG_NONE, METERED_NO, + ROAMING_NO, DEFAULT_NETWORK_NO, 51000L, 35L, 102000L, 70L, 0L); + + // New entries are added on underlying Iface traffic + assertContains(delta, underlyingIface, ownerUid, SET_DEFAULT, TAG_NONE, METERED_NO, + ROAMING_NO, DEFAULT_NETWORK_NO, 2000L, 20L, 3000L, 30L, 0L); + assertContains(delta, underlyingIface, 20100, SET_DEFAULT, TAG_NONE, METERED_NO, + ROAMING_NO, DEFAULT_NETWORK_NO, 500L, 2L, 200L, 5L, 0L); + + // New entries are added for debug purpose + assertContains(delta, underlyingIface, 10100, SET_DBG_VPN_IN, TAG_NONE, METERED_NO, + ROAMING_NO, DEFAULT_NETWORK_NO, 50000L, 25L, 100000L, 50L, 0L); + assertContains(delta, underlyingIface, 20100, SET_DBG_VPN_IN, TAG_NONE, METERED_NO, + ROAMING_NO, DEFAULT_NETWORK_NO, 500, 2L, 200L, 5L, 0L); + assertContains(delta, underlyingIface, ownerUid, SET_DBG_VPN_IN, TAG_NONE, METERED_NO, + ROAMING_NO, DEFAULT_NETWORK_NO, 2000L, 20L, 3000L, 30L, 0L); + } + @Test public void testFilter_NoFilter() { NetworkStats.Entry entry1 = new NetworkStats.Entry( |
