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