NetworkStatsTest.java revision 1059c3c30ad96a15695c1a92ae8896e078a6309f
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_ALL; 22import static android.net.NetworkStats.IFACE_ALL; 23import static android.net.NetworkStats.TAG_NONE; 24import static android.net.NetworkStats.UID_ALL; 25 26import android.test.suitebuilder.annotation.SmallTest; 27 28import com.google.android.collect.Sets; 29 30import junit.framework.TestCase; 31 32import java.util.HashSet; 33 34@SmallTest 35public class NetworkStatsTest extends TestCase { 36 37 private static final String TEST_IFACE = "test0"; 38 private static final String TEST_IFACE2 = "test2"; 39 private static final int TEST_UID = 1001; 40 private static final long TEST_START = 1194220800000L; 41 42 public void testFindIndex() throws Exception { 43 final NetworkStats stats = new NetworkStats(TEST_START, 3) 44 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 10) 45 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 11) 46 .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 12); 47 48 assertEquals(2, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE)); 49 assertEquals(2, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE)); 50 assertEquals(0, stats.findIndex(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE)); 51 assertEquals(-1, stats.findIndex(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE)); 52 } 53 54 public void testAddEntryGrow() throws Exception { 55 final NetworkStats stats = new NetworkStats(TEST_START, 2); 56 57 assertEquals(0, stats.size()); 58 assertEquals(2, stats.internalSize()); 59 60 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 2L, 3); 61 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 2L, 2L, 2L, 2L, 4); 62 63 assertEquals(2, stats.size()); 64 assertEquals(2, stats.internalSize()); 65 66 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 3L, 30L, 4L, 40L, 7); 67 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 4L, 40L, 4L, 40L, 8); 68 stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 5L, 50L, 5L, 50L, 10); 69 70 assertEquals(5, stats.size()); 71 assertTrue(stats.internalSize() >= 5); 72 73 assertValues(stats, 0, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 2L, 3); 74 assertValues(stats, 1, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 2L, 2L, 2L, 2L, 4); 75 assertValues(stats, 2, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 3L, 30L, 4L, 40L, 7); 76 assertValues(stats, 3, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 4L, 40L, 4L, 40L, 8); 77 assertValues(stats, 4, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 5L, 50L, 5L, 50L, 10); 78 } 79 80 public void testCombineExisting() throws Exception { 81 final NetworkStats stats = new NetworkStats(TEST_START, 10); 82 83 stats.addValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 10); 84 stats.addValues(TEST_IFACE, 1001, SET_DEFAULT, 0xff, 128L, 1L, 128L, 1L, 2); 85 stats.combineValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, -128L, -1L, -128L, -1L, -1); 86 87 assertValues(stats, 0, TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, 384L, 3L, 128L, 1L, 9); 88 assertValues(stats, 1, TEST_IFACE, 1001, SET_DEFAULT, 0xff, 128L, 1L, 128L, 1L, 2); 89 90 // now try combining that should create row 91 stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3); 92 assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3); 93 stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3); 94 assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 256L, 2L, 256L, 2L, 6); 95 } 96 97 public void testSubtractIdenticalData() throws Exception { 98 final NetworkStats before = new NetworkStats(TEST_START, 2) 99 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 100 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 101 102 final NetworkStats after = new NetworkStats(TEST_START, 2) 103 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 104 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 105 106 final NetworkStats result = after.subtract(before); 107 108 // identical data should result in zero delta 109 assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0); 110 assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0); 111 } 112 113 public void testSubtractIdenticalRows() throws Exception { 114 final NetworkStats before = new NetworkStats(TEST_START, 2) 115 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 116 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 117 118 final NetworkStats after = new NetworkStats(TEST_START, 2) 119 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1025L, 9L, 2L, 1L, 15) 120 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 3L, 1L, 1028L, 9L, 20); 121 122 final NetworkStats result = after.subtract(before); 123 124 // expect delta between measurements 125 assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 1L, 4); 126 assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 3L, 1L, 4L, 1L, 8); 127 } 128 129 public void testSubtractNewRows() throws Exception { 130 final NetworkStats before = new NetworkStats(TEST_START, 2) 131 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 132 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 133 134 final NetworkStats after = new NetworkStats(TEST_START, 3) 135 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 136 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12) 137 .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20); 138 139 final NetworkStats result = after.subtract(before); 140 141 // its okay to have new rows 142 assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0); 143 assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0); 144 assertValues(result, 2, TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20); 145 } 146 147 public void testSubtractMissingRows() throws Exception { 148 final NetworkStats before = new NetworkStats(TEST_START, 2) 149 .addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 1024L, 0L, 0L, 0L, 0) 150 .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2048L, 0L, 0L, 0L, 0); 151 152 final NetworkStats after = new NetworkStats(TEST_START, 1) 153 .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2049L, 2L, 3L, 4L, 0); 154 155 final NetworkStats result = after.subtract(before); 156 157 // should silently drop omitted rows 158 assertEquals(1, result.size()); 159 assertValues(result, 0, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 1L, 2L, 3L, 4L, 0); 160 assertEquals(4L, result.getTotalBytes()); 161 } 162 163 public void testTotalBytes() throws Exception { 164 final NetworkStats iface = new NetworkStats(TEST_START, 2) 165 .addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 128L, 0L, 0L, 0L, 0L) 166 .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 256L, 0L, 0L, 0L, 0L); 167 assertEquals(384L, iface.getTotalBytes()); 168 169 final NetworkStats uidSet = new NetworkStats(TEST_START, 3) 170 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L) 171 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L) 172 .addValues(TEST_IFACE, 101, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 173 assertEquals(96L, uidSet.getTotalBytes()); 174 175 final NetworkStats uidTag = new NetworkStats(TEST_START, 3) 176 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L) 177 .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L) 178 .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L) 179 .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 16L, 0L, 0L, 0L, 0L) 180 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L) 181 .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L); 182 assertEquals(64L, uidTag.getTotalBytes()); 183 } 184 185 public void testGroupedByIfaceEmpty() throws Exception { 186 final NetworkStats uidStats = new NetworkStats(TEST_START, 3); 187 final NetworkStats grouped = uidStats.groupedByIface(); 188 189 assertEquals(0, uidStats.size()); 190 assertEquals(0, grouped.size()); 191 } 192 193 public void testGroupedByIfaceAll() throws Exception { 194 final NetworkStats uidStats = new NetworkStats(TEST_START, 3) 195 .addValues(IFACE_ALL, 100, SET_ALL, TAG_NONE, 128L, 8L, 0L, 2L, 20L) 196 .addValues(IFACE_ALL, 101, SET_FOREGROUND, TAG_NONE, 128L, 8L, 0L, 2L, 20L); 197 final NetworkStats grouped = uidStats.groupedByIface(); 198 199 assertEquals(2, uidStats.size()); 200 assertEquals(1, grouped.size()); 201 202 assertValues(grouped, 0, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, 256L, 16L, 0L, 4L, 0L); 203 } 204 205 public void testGroupedByIface() throws Exception { 206 final NetworkStats uidStats = new NetworkStats(TEST_START, 3) 207 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L) 208 .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 209 .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L) 210 .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 211 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L) 212 .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L); 213 214 final NetworkStats grouped = uidStats.groupedByIface(); 215 216 assertEquals(6, uidStats.size()); 217 218 assertEquals(2, grouped.size()); 219 assertValues(grouped, 0, TEST_IFACE, UID_ALL, SET_ALL, TAG_NONE, 256L, 16L, 0L, 2L, 0L); 220 assertValues(grouped, 1, TEST_IFACE2, UID_ALL, SET_ALL, TAG_NONE, 1024L, 64L, 0L, 0L, 0L); 221 } 222 223 public void testAddAllValues() { 224 final NetworkStats first = new NetworkStats(TEST_START, 5) 225 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L) 226 .addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 227 228 final NetworkStats second = new NetworkStats(TEST_START, 2) 229 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L) 230 .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 231 232 first.combineAllValues(second); 233 234 assertEquals(3, first.size()); 235 assertValues(first, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 64L, 0L, 0L, 0L, 0L); 236 assertValues(first, 1, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 237 assertValues(first, 2, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L); 238 } 239 240 public void testGetTotal() { 241 final NetworkStats stats = new NetworkStats(TEST_START, 3) 242 .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L) 243 .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 244 .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L) 245 .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L) 246 .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L) 247 .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L); 248 249 assertValues(stats.getTotal(null), 1280L, 80L, 0L, 2L, 20L); 250 assertValues(stats.getTotal(null, 100), 1152L, 72L, 0L, 2L, 20L); 251 assertValues(stats.getTotal(null, 101), 128L, 8L, 0L, 0L, 0L); 252 253 final HashSet<String> ifaces = Sets.newHashSet(); 254 assertValues(stats.getTotal(null, ifaces), 0L, 0L, 0L, 0L, 0L); 255 256 ifaces.add(TEST_IFACE2); 257 assertValues(stats.getTotal(null, ifaces), 1024L, 64L, 0L, 0L, 0L); 258 } 259 260 private static void assertValues(NetworkStats stats, int index, String iface, int uid, int set, 261 int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, long operations) { 262 final NetworkStats.Entry entry = stats.getValues(index, null); 263 assertValues(entry, iface, uid, set, tag); 264 assertValues(entry, rxBytes, rxPackets, txBytes, txPackets, operations); 265 } 266 267 private static void assertValues( 268 NetworkStats.Entry entry, String iface, int uid, int set, int tag) { 269 assertEquals(iface, entry.iface); 270 assertEquals(uid, entry.uid); 271 assertEquals(set, entry.set); 272 assertEquals(tag, entry.tag); 273 } 274 275 private static void assertValues(NetworkStats.Entry entry, long rxBytes, long rxPackets, 276 long txBytes, long txPackets, long operations) { 277 assertEquals(rxBytes, entry.rxBytes); 278 assertEquals(rxPackets, entry.rxPackets); 279 assertEquals(txBytes, entry.txBytes); 280 assertEquals(txPackets, entry.txPackets); 281 assertEquals(operations, entry.operations); 282 } 283 284} 285