NetworkStatsTest.java revision 98170b0db191f916bf2a0f104f5d5057c2aaeaa9
1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.net; 18 19import static android.net.NetworkStats.SET_DEFAULT; 20import static android.net.NetworkStats.SET_FOREGROUND; 21import static android.net.NetworkStats.SET_DBG_VPN_IN; 22import static android.net.NetworkStats.SET_DBG_VPN_OUT; 23import static android.net.NetworkStats.SET_ALL; 24import static android.net.NetworkStats.IFACE_ALL; 25import static android.net.NetworkStats.TAG_NONE; 26import static android.net.NetworkStats.UID_ALL; 27 28import android.test.suitebuilder.annotation.SmallTest; 29 30import com.google.android.collect.Sets; 31 32import junit.framework.TestCase; 33 34import java.util.HashSet; 35 36@SmallTest 37public class NetworkStatsTest extends TestCase { 38 39 private static final String TEST_IFACE = "test0"; 40 private static final String TEST_IFACE2 = "test2"; 41 private static final int TEST_UID = 1001; 42 private static final long TEST_START = 1194220800000L; 43 44 public void testFindIndex() throws Exception { 45 final NetworkStats stats = new NetworkStats(TEST_START, 3) 46 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 10) 47 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 11) 48 .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 12); 49 50 assertEquals(2, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE)); 51 assertEquals(2, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE)); 52 assertEquals(0, stats.findIndex(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE)); 53 assertEquals(-1, stats.findIndex(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE)); 54 } 55 56 public void testFindIndexHinted() { 57 final NetworkStats stats = new NetworkStats(TEST_START, 3) 58 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 10) 59 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 11) 60 .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 12) 61 .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 1024L, 8L, 0L, 0L, 10) 62 .addValues(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D, 0L, 0L, 1024L, 8L, 11) 63 .addValues(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 12); 64 65 // verify that we correctly find across regardless of hinting 66 for (int hint = 0; hint < stats.size(); hint++) { 67 assertEquals(0, stats.findIndexHinted(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, hint)); 68 assertEquals(1, stats.findIndexHinted(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, hint)); 69 assertEquals(2, stats.findIndexHinted(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, hint)); 70 assertEquals(3, stats.findIndexHinted(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, hint)); 71 assertEquals(4, stats.findIndexHinted(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D, hint)); 72 assertEquals(5, stats.findIndexHinted(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, hint)); 73 assertEquals(-1, stats.findIndexHinted(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE, hint)); 74 } 75 } 76 77 public void testAddEntryGrow() throws Exception { 78 final NetworkStats stats = new NetworkStats(TEST_START, 2); 79 80 assertEquals(0, stats.size()); 81 assertEquals(2, stats.internalSize()); 82 83 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 2L, 3); 84 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 2L, 2L, 2L, 2L, 4); 85 86 assertEquals(2, stats.size()); 87 assertEquals(2, stats.internalSize()); 88 89 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 3L, 30L, 4L, 40L, 7); 90 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 4L, 40L, 4L, 40L, 8); 91 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 5L, 50L, 5L, 50L, 10); 92 93 assertEquals(5, stats.size()); 94 assertTrue(stats.internalSize() >= 5); 95 96 assertValues(stats, 0, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 2L, 3); 97 assertValues(stats, 1, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 2L, 2L, 2L, 2L, 4); 98 assertValues(stats, 2, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 3L, 30L, 4L, 40L, 7); 99 assertValues(stats, 3, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 4L, 40L, 4L, 40L, 8); 100 assertValues(stats, 4, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 5L, 50L, 5L, 50L, 10); 101 } 102 103 public void testCombineExisting() throws Exception { 104 final NetworkStats stats = new NetworkStats(TEST_START, 10); 105 106 stats.addValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 10); 107 stats.addValues(TEST_IFACE, 1001, SET_DEFAULT, 0xff, 128L, 1L, 128L, 1L, 2); 108 stats.combineValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, -128L, -1L, -128L, -1L, -1); 109 110 assertValues(stats, 0, TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, 384L, 3L, 128L, 1L, 9); 111 assertValues(stats, 1, TEST_IFACE, 1001, SET_DEFAULT, 0xff, 128L, 1L, 128L, 1L, 2); 112 113 // now try combining that should create row 114 stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3); 115 assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3); 116 stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3); 117 assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 256L, 2L, 256L, 2L, 6); 118 } 119 120 public void testSubtractIdenticalData() throws Exception { 121 final NetworkStats before = new NetworkStats(TEST_START, 2) 122 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 123 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 124 125 final NetworkStats after = new NetworkStats(TEST_START, 2) 126 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 127 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 128 129 final NetworkStats result = after.subtract(before); 130 131 // identical data should result in zero delta 132 assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0); 133 assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0); 134 } 135 136 public void testSubtractIdenticalRows() throws Exception { 137 final NetworkStats before = new NetworkStats(TEST_START, 2) 138 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 139 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 140 141 final NetworkStats after = new NetworkStats(TEST_START, 2) 142 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1025L, 9L, 2L, 1L, 15) 143 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 3L, 1L, 1028L, 9L, 20); 144 145 final NetworkStats result = after.subtract(before); 146 147 // expect delta between measurements 148 assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 1L, 4); 149 assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 3L, 1L, 4L, 1L, 8); 150 } 151 152 public void testSubtractNewRows() throws Exception { 153 final NetworkStats before = new NetworkStats(TEST_START, 2) 154 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 155 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 156 157 final NetworkStats after = new NetworkStats(TEST_START, 3) 158 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 159 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12) 160 .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20); 161 162 final NetworkStats result = after.subtract(before); 163 164 // its okay to have new rows 165 assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0); 166 assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0); 167 assertValues(result, 2, TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20); 168 } 169 170 public void testSubtractMissingRows() throws Exception { 171 final NetworkStats before = new NetworkStats(TEST_START, 2) 172 .addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 1024L, 0L, 0L, 0L, 0) 173 .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2048L, 0L, 0L, 0L, 0); 174 175 final NetworkStats after = new NetworkStats(TEST_START, 1) 176 .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2049L, 2L, 3L, 4L, 0); 177 178 final NetworkStats result = after.subtract(before); 179 180 // should silently drop omitted rows 181 assertEquals(1, result.size()); 182 assertValues(result, 0, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 1L, 2L, 3L, 4L, 0); 183 assertEquals(4L, result.getTotalBytes()); 184 } 185 186 public void testTotalBytes() throws Exception { 187 final NetworkStats iface = new NetworkStats(TEST_START, 2) 188 .addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 128L, 0L, 0L, 0L, 0L) 189 .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 256L, 0L, 0L, 0L, 0L); 190 assertEquals(384L, iface.getTotalBytes()); 191 192 final NetworkStats uidSet = new NetworkStats(TEST_START, 3) 193 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L) 194 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L) 195 .addValues(TEST_IFACE, 101, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 196 assertEquals(96L, uidSet.getTotalBytes()); 197 198 final NetworkStats uidTag = new NetworkStats(TEST_START, 3) 199 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L) 200 .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L) 201 .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L) 202 .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 16L, 0L, 0L, 0L, 0L) 203 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L) 204 .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L); 205 assertEquals(64L, uidTag.getTotalBytes()); 206 } 207 208 public void testGroupedByIfaceEmpty() throws Exception { 209 final NetworkStats uidStats = new NetworkStats(TEST_START, 3); 210 final NetworkStats grouped = uidStats.groupedByIface(); 211 212 assertEquals(0, uidStats.size()); 213 assertEquals(0, grouped.size()); 214 } 215 216 public void testGroupedByIfaceAll() throws Exception { 217 final NetworkStats uidStats = new NetworkStats(TEST_START, 3) 218 .addValues(IFACE_ALL, 100, SET_ALL, TAG_NONE, 128L, 8L, 0L, 2L, 20L) 219 .addValues(IFACE_ALL, 101, SET_FOREGROUND, TAG_NONE, 128L, 8L, 0L, 2L, 20L); 220 final NetworkStats grouped = uidStats.groupedByIface(); 221 222 assertEquals(2, uidStats.size()); 223 assertEquals(1, grouped.size()); 224 225 assertValues(grouped, 0, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, 256L, 16L, 0L, 4L, 0L); 226 } 227 228 public void testGroupedByIface() throws Exception { 229 final NetworkStats uidStats = new NetworkStats(TEST_START, 3) 230 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L) 231 .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 232 .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L) 233 .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 234 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L) 235 .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L); 236 237 final NetworkStats grouped = uidStats.groupedByIface(); 238 239 assertEquals(6, uidStats.size()); 240 241 assertEquals(2, grouped.size()); 242 assertValues(grouped, 0, TEST_IFACE, UID_ALL, SET_ALL, TAG_NONE, 256L, 16L, 0L, 2L, 0L); 243 assertValues(grouped, 1, TEST_IFACE2, UID_ALL, SET_ALL, TAG_NONE, 1024L, 64L, 0L, 0L, 0L); 244 } 245 246 public void testAddAllValues() { 247 final NetworkStats first = new NetworkStats(TEST_START, 5) 248 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L) 249 .addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 250 251 final NetworkStats second = new NetworkStats(TEST_START, 2) 252 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L) 253 .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 254 255 first.combineAllValues(second); 256 257 assertEquals(3, first.size()); 258 assertValues(first, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 64L, 0L, 0L, 0L, 0L); 259 assertValues(first, 1, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 260 assertValues(first, 2, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 261 } 262 263 public void testGetTotal() { 264 final NetworkStats stats = new NetworkStats(TEST_START, 3) 265 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L) 266 .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 267 .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L) 268 .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 269 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L) 270 .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L); 271 272 assertValues(stats.getTotal(null), 1280L, 80L, 0L, 2L, 20L); 273 assertValues(stats.getTotal(null, 100), 1152L, 72L, 0L, 2L, 20L); 274 assertValues(stats.getTotal(null, 101), 128L, 8L, 0L, 0L, 0L); 275 276 final HashSet<String> ifaces = Sets.newHashSet(); 277 assertValues(stats.getTotal(null, ifaces), 0L, 0L, 0L, 0L, 0L); 278 279 ifaces.add(TEST_IFACE2); 280 assertValues(stats.getTotal(null, ifaces), 1024L, 64L, 0L, 0L, 0L); 281 } 282 283 public void testWithoutUid() throws Exception { 284 final NetworkStats before = new NetworkStats(TEST_START, 3) 285 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L) 286 .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 287 .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L) 288 .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 289 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L) 290 .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L); 291 292 final NetworkStats after = before.withoutUids(new int[] { 100 }); 293 assertEquals(6, before.size()); 294 assertEquals(2, after.size()); 295 assertValues(after, 0, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L); 296 assertValues(after, 1, TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L); 297 } 298 299 public void testClone() throws Exception { 300 final NetworkStats original = new NetworkStats(TEST_START, 5) 301 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L) 302 .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L); 303 304 // make clone and mutate original 305 final NetworkStats clone = original.clone(); 306 original.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L); 307 308 assertEquals(3, original.size()); 309 assertEquals(2, clone.size()); 310 311 assertEquals(128L + 512L + 128L, original.getTotalBytes()); 312 assertEquals(128L + 512L, clone.getTotalBytes()); 313 } 314 315 public void testAddWhenEmpty() throws Exception { 316 final NetworkStats red = new NetworkStats(TEST_START, -1); 317 final NetworkStats blue = new NetworkStats(TEST_START, 5) 318 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L) 319 .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L); 320 321 // We're mostly checking that we don't crash 322 red.combineAllValues(blue); 323 } 324 325 public void testMigrateTun() throws Exception { 326 final int tunUid = 10030; 327 final String tunIface = "tun0"; 328 final String underlyingIface = "wlan0"; 329 final int testTag1 = 8888; 330 NetworkStats delta = new NetworkStats(TEST_START, 17) 331 .addValues(tunIface, 10100, SET_DEFAULT, TAG_NONE, 39605L, 46L, 12259L, 55L, 0L) 332 .addValues(tunIface, 10100, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L) 333 .addValues(tunIface, 10120, SET_DEFAULT, TAG_NONE, 72667L, 197L, 43909L, 241L, 0L) 334 .addValues(tunIface, 10120, SET_FOREGROUND, TAG_NONE, 9297L, 17L, 4128L, 21L, 0L) 335 // VPN package also uses some traffic through unprotected network. 336 .addValues(tunIface, tunUid, SET_DEFAULT, TAG_NONE, 4983L, 10L, 1801L, 12L, 0L) 337 .addValues(tunIface, tunUid, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L) 338 // Tag entries 339 .addValues(tunIface, 10120, SET_DEFAULT, testTag1, 21691L, 41L, 13820L, 51L, 0L) 340 .addValues(tunIface, 10120, SET_FOREGROUND, testTag1, 1281L, 2L, 665L, 2L, 0L) 341 // Irrelevant entries 342 .addValues(TEST_IFACE, 10100, SET_DEFAULT, TAG_NONE, 1685L, 5L, 2070L, 6L, 0L) 343 // Underlying Iface entries 344 .addValues(underlyingIface, 10100, SET_DEFAULT, TAG_NONE, 5178L, 8L, 2139L, 11L, 0L) 345 .addValues(underlyingIface, 10100, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L) 346 .addValues(underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, 149873L, 287L, 347 59217L /* smaller than sum(tun0) */, 299L /* smaller than sum(tun0) */, 0L) 348 .addValues(underlyingIface, tunUid, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L); 349 350 assertTrue(delta.migrateTun(tunUid, tunIface, underlyingIface)); 351 assertEquals(21, delta.size()); 352 353 // tunIface and TEST_IFACE entries are not changed. 354 assertValues(delta, 0, tunIface, 10100, SET_DEFAULT, TAG_NONE, 355 39605L, 46L, 12259L, 55L, 0L); 356 assertValues(delta, 1, tunIface, 10100, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L); 357 assertValues(delta, 2, tunIface, 10120, SET_DEFAULT, TAG_NONE, 358 72667L, 197L, 43909L, 241L, 0L); 359 assertValues(delta, 3, tunIface, 10120, SET_FOREGROUND, TAG_NONE, 360 9297L, 17L, 4128L, 21L, 0L); 361 assertValues(delta, 4, tunIface, tunUid, SET_DEFAULT, TAG_NONE, 362 4983L, 10L, 1801L, 12L, 0L); 363 assertValues(delta, 5, tunIface, tunUid, SET_FOREGROUND, TAG_NONE, 0L, 0L, 0L, 0L, 0L); 364 assertValues(delta, 6, tunIface, 10120, SET_DEFAULT, testTag1, 365 21691L, 41L, 13820L, 51L, 0L); 366 assertValues(delta, 7, tunIface, 10120, SET_FOREGROUND, testTag1, 1281L, 2L, 665L, 2L, 0L); 367 assertValues(delta, 8, TEST_IFACE, 10100, SET_DEFAULT, TAG_NONE, 1685L, 5L, 2070L, 6L, 0L); 368 369 // Existing underlying Iface entries are updated 370 assertValues(delta, 9, underlyingIface, 10100, SET_DEFAULT, TAG_NONE, 371 44783L, 54L, 13829L, 60L, 0L); 372 assertValues(delta, 10, underlyingIface, 10100, SET_FOREGROUND, TAG_NONE, 373 0L, 0L, 0L, 0L, 0L); 374 375 // VPN underlying Iface entries are updated 376 assertValues(delta, 11, underlyingIface, tunUid, SET_DEFAULT, TAG_NONE, 377 28304L, 27L, 1719L, 12L, 0L); 378 assertValues(delta, 12, underlyingIface, tunUid, SET_FOREGROUND, TAG_NONE, 379 0L, 0L, 0L, 0L, 0L); 380 381 // New entries are added for new application's underlying Iface traffic 382 assertContains(delta, underlyingIface, 10120, SET_DEFAULT, TAG_NONE, 383 72667L, 197L, 41872l, 219L, 0L); 384 assertContains(delta, underlyingIface, 10120, SET_FOREGROUND, TAG_NONE, 385 9297L, 17L, 3936, 19L, 0L); 386 assertContains(delta, underlyingIface, 10120, SET_DEFAULT, testTag1, 387 21691L, 41L, 13179L, 46L, 0L); 388 assertContains(delta, underlyingIface, 10120, SET_FOREGROUND, testTag1, 389 1281L, 2L, 634L, 1L, 0L); 390 391 // New entries are added for debug purpose 392 assertContains(delta, underlyingIface, 10100, SET_DBG_VPN_IN, TAG_NONE, 393 39605L, 46L, 11690, 49, 0); 394 assertContains(delta, underlyingIface, 10120, SET_DBG_VPN_IN, TAG_NONE, 395 81964, 214, 45808, 238, 0); 396 assertContains(delta, underlyingIface, tunUid, SET_DBG_VPN_IN, TAG_NONE, 397 4983, 10, 1717, 10, 0); 398 assertContains(delta, underlyingIface, tunUid, SET_DBG_VPN_OUT, TAG_NONE, 399 126552, 270, 59215, 297, 0); 400 401 } 402 403 private static void assertContains(NetworkStats stats, String iface, int uid, int set, 404 int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, long operations) { 405 int index = stats.findIndex(iface, uid, set, tag); 406 assertTrue(index != -1); 407 assertValues(stats, index, iface, uid, set, tag, 408 rxBytes, rxPackets, txBytes, txPackets, operations); 409 } 410 411 private static void assertValues(NetworkStats stats, int index, String iface, int uid, int set, 412 int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, long operations) { 413 final NetworkStats.Entry entry = stats.getValues(index, null); 414 assertValues(entry, iface, uid, set, tag); 415 assertValues(entry, rxBytes, rxPackets, txBytes, txPackets, operations); 416 } 417 418 private static void assertValues( 419 NetworkStats.Entry entry, String iface, int uid, int set, int tag) { 420 assertEquals(iface, entry.iface); 421 assertEquals(uid, entry.uid); 422 assertEquals(set, entry.set); 423 assertEquals(tag, entry.tag); 424 } 425 426 private static void assertValues(NetworkStats.Entry entry, long rxBytes, long rxPackets, 427 long txBytes, long txPackets, long operations) { 428 assertEquals(rxBytes, entry.rxBytes); 429 assertEquals(rxPackets, entry.rxPackets); 430 assertEquals(txBytes, entry.txBytes); 431 assertEquals(txPackets, entry.txPackets); 432 assertEquals(operations, entry.operations); 433 } 434 435} 436