NetworkStatsTest.java revision a63ba59260cd1bb3f5c16e395ace45a61f1d4461
1eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey/* 2eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * Copyright (C) 2011 The Android Open Source Project 3eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * 4eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 5eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * you may not use this file except in compliance with the License. 6eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * You may obtain a copy of the License at 7eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * 8eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 9eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * 10eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * Unless required by applicable law or agreed to in writing, software 11eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 12eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * See the License for the specific language governing permissions and 14eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey * limitations under the License. 15eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey */ 16eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 17eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkeypackage android.net; 18eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 191b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.net.NetworkStats.TAG_NONE; 201b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 21eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkeyimport android.test.suitebuilder.annotation.SmallTest; 22eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 23eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkeyimport junit.framework.TestCase; 24eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 25eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey@SmallTest 26eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkeypublic class NetworkStatsTest extends TestCase { 27eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 28eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey private static final String TEST_IFACE = "test0"; 294a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey private static final int TEST_UID = 1001; 304a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey private static final long TEST_START = 1194220800000L; 31eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 32eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey public void testFindIndex() throws Exception { 334a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey final NetworkStats stats = new NetworkStats(TEST_START, 3) 34a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 10) 35a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 11) 36a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L, 12); 371b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 381b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey assertEquals(2, stats.findIndex(TEST_IFACE, 102, TAG_NONE)); 391b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey assertEquals(2, stats.findIndex(TEST_IFACE, 102, TAG_NONE)); 401b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey assertEquals(0, stats.findIndex(TEST_IFACE, 100, TAG_NONE)); 411b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey assertEquals(-1, stats.findIndex(TEST_IFACE, 6, TAG_NONE)); 42eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey } 43eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 444a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey public void testAddEntryGrow() throws Exception { 454a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey final NetworkStats stats = new NetworkStats(TEST_START, 2); 464a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey 47fd8be3e5e7420f3cca591daeec8a44487f5f65aaJeff Sharkey assertEquals(0, stats.size()); 48d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(2, stats.internalSize()); 494a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey 50a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 1L, 1L, 2L, 2L, 3); 51a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 2L, 2L, 2L, 2L, 4); 524a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey 53fd8be3e5e7420f3cca591daeec8a44487f5f65aaJeff Sharkey assertEquals(2, stats.size()); 54d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(2, stats.internalSize()); 554a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey 56a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 3L, 30L, 4L, 40L, 7); 57a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 4L, 40L, 4L, 40L, 8); 58a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.addValues(TEST_IFACE, TEST_UID, TAG_NONE, 5L, 50L, 5L, 50L, 10); 594a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey 60fd8be3e5e7420f3cca591daeec8a44487f5f65aaJeff Sharkey assertEquals(5, stats.size()); 61d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertTrue(stats.internalSize() >= 5); 624a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey 63a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(stats, 0, TEST_IFACE, TEST_UID, TAG_NONE, 1L, 1L, 2L, 2L, 3); 64a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(stats, 1, TEST_IFACE, TEST_UID, TAG_NONE, 2L, 2L, 2L, 2L, 4); 65a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(stats, 2, TEST_IFACE, TEST_UID, TAG_NONE, 3L, 30L, 4L, 40L, 7); 66a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(stats, 3, TEST_IFACE, TEST_UID, TAG_NONE, 4L, 40L, 4L, 40L, 8); 67a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(stats, 4, TEST_IFACE, TEST_UID, TAG_NONE, 5L, 50L, 5L, 50L, 10); 684a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey } 694a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey 701b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey public void testCombineExisting() throws Exception { 711b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey final NetworkStats stats = new NetworkStats(TEST_START, 10); 721b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 73a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.addValues(TEST_IFACE, 1001, TAG_NONE, 512L, 4L, 256L, 2L, 10); 74a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.addValues(TEST_IFACE, 1001, 0xff, 128L, 1L, 128L, 1L, 2); 75a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.combineValues(TEST_IFACE, 1001, TAG_NONE, -128L, -1L, -128L, -1L, -1); 761b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 77a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(stats, 0, TEST_IFACE, 1001, TAG_NONE, 384L, 3L, 128L, 1L, 9); 78a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(stats, 1, TEST_IFACE, 1001, 0xff, 128L, 1L, 128L, 1L, 2); 791b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 801b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey // now try combining that should create row 81a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.combineValues(TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L, 3); 82a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(stats, 2, TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L, 3); 83a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey stats.combineValues(TEST_IFACE, 5005, TAG_NONE, 128L, 1L, 128L, 1L, 3); 84a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(stats, 2, TEST_IFACE, 5005, TAG_NONE, 256L, 2L, 256L, 2L, 6); 851b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 861b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 87eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey public void testSubtractIdenticalData() throws Exception { 884a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey final NetworkStats before = new NetworkStats(TEST_START, 2) 89a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 90a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 91eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 924a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey final NetworkStats after = new NetworkStats(TEST_START, 2) 93a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 94a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 95eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 963f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey final NetworkStats result = after.subtract(before); 97eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 9875279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey // identical data should result in zero delta 99a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(result, 0, TEST_IFACE, 100, TAG_NONE, 0L, 0L, 0L, 0L, 0); 100a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(result, 1, TEST_IFACE, 101, TAG_NONE, 0L, 0L, 0L, 0L, 0); 101eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey } 102eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 103eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey public void testSubtractIdenticalRows() throws Exception { 1044a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey final NetworkStats before = new NetworkStats(TEST_START, 2) 105a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 106a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 107eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 1084a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey final NetworkStats after = new NetworkStats(TEST_START, 2) 109a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 100, TAG_NONE, 1025L, 9L, 2L, 1L, 15) 110a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 101, TAG_NONE, 3L, 1L, 1028L, 9L, 20); 111eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 1123f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey final NetworkStats result = after.subtract(before); 113eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 114eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey // expect delta between measurements 115a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(result, 0, TEST_IFACE, 100, TAG_NONE, 1L, 1L, 2L, 1L, 4); 116a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(result, 1, TEST_IFACE, 101, TAG_NONE, 3L, 1L, 4L, 1L, 8); 117eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey } 118eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 119eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey public void testSubtractNewRows() throws Exception { 1204a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey final NetworkStats before = new NetworkStats(TEST_START, 2) 121a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 122a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12); 123eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 1244a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey final NetworkStats after = new NetworkStats(TEST_START, 3) 125a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 100, TAG_NONE, 1024L, 8L, 0L, 0L, 11) 126a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 101, TAG_NONE, 0L, 0L, 1024L, 8L, 12) 127a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey .addValues(TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L, 20); 128eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 1293f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey final NetworkStats result = after.subtract(before); 130eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 131eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey // its okay to have new rows 132a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(result, 0, TEST_IFACE, 100, TAG_NONE, 0L, 0L, 0L, 0L, 0); 133a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(result, 1, TEST_IFACE, 101, TAG_NONE, 0L, 0L, 0L, 0L, 0); 134a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertValues(result, 2, TEST_IFACE, 102, TAG_NONE, 1024L, 8L, 1024L, 8L, 20); 135eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey } 136eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey 137a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey private static void assertValues(NetworkStats stats, int index, String iface, int uid, int tag, 138a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey long rxBytes, long rxPackets, long txBytes, long txPackets, int operations) { 139d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey final NetworkStats.Entry entry = stats.getValues(index, null); 140d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(iface, entry.iface); 141d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(uid, entry.uid); 142d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(tag, entry.tag); 143d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(rxBytes, entry.rxBytes); 144d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(rxPackets, entry.rxPackets); 145d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(txBytes, entry.txBytes); 146d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey assertEquals(txPackets, entry.txPackets); 147a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey assertEquals(operations, entry.operations); 1481b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey } 1491b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey 150eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey} 151