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