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
19b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkeyimport static android.net.NetworkStats.SET_DEFAULT;
208e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkeyimport static android.net.NetworkStats.SET_FOREGROUND;
21905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkeyimport static android.net.NetworkStats.SET_ALL;
22905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkeyimport static android.net.NetworkStats.IFACE_ALL;
231b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkeyimport static android.net.NetworkStats.TAG_NONE;
248e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkeyimport static android.net.NetworkStats.UID_ALL;
251b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey
26eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkeyimport android.test.suitebuilder.annotation.SmallTest;
27eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
281059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkeyimport com.google.android.collect.Sets;
291059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey
30eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkeyimport junit.framework.TestCase;
31eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
321059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkeyimport java.util.HashSet;
331059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey
34eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey@SmallTest
35eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkeypublic class NetworkStatsTest extends TestCase {
36eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
37eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    private static final String TEST_IFACE = "test0";
388e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey    private static final String TEST_IFACE2 = "test2";
394a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey    private static final int TEST_UID = 1001;
404a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey    private static final long TEST_START = 1194220800000L;
41eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
42eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    public void testFindIndex() throws Exception {
434a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey        final NetworkStats stats = new NetworkStats(TEST_START, 3)
44b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 10)
45b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 11)
46b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 12);
47b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey
48b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertEquals(2, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE));
49b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertEquals(2, stats.findIndex(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE));
50b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertEquals(0, stats.findIndex(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE));
51b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertEquals(-1, stats.findIndex(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE));
52eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    }
53eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
54163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey    public void testFindIndexHinted() {
55163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        final NetworkStats stats = new NetworkStats(TEST_START, 3)
56163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 10)
57163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 11)
58163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 12)
59163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 1024L, 8L, 0L, 0L, 10)
60163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D, 0L, 0L, 1024L, 8L, 11)
61163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 12);
62163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey
63163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        // verify that we correctly find across regardless of hinting
64163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        for (int hint = 0; hint < stats.size(); hint++) {
65163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey            assertEquals(0, stats.findIndexHinted(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, hint));
66163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey            assertEquals(1, stats.findIndexHinted(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, hint));
67163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey            assertEquals(2, stats.findIndexHinted(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, hint));
68163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey            assertEquals(3, stats.findIndexHinted(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, hint));
69163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey            assertEquals(4, stats.findIndexHinted(TEST_IFACE2, 101, SET_DEFAULT, 0xF00D, hint));
70163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey            assertEquals(5, stats.findIndexHinted(TEST_IFACE2, 102, SET_DEFAULT, TAG_NONE, hint));
71163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey            assertEquals(-1, stats.findIndexHinted(TEST_IFACE, 6, SET_DEFAULT, TAG_NONE, hint));
72163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        }
73163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey    }
74163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey
754a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey    public void testAddEntryGrow() throws Exception {
764a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey        final NetworkStats stats = new NetworkStats(TEST_START, 2);
774a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey
78fd8be3e5e7420f3cca591daeec8a44487f5f65aaJeff Sharkey        assertEquals(0, stats.size());
79d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertEquals(2, stats.internalSize());
804a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey
81b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 2L, 3);
82b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 2L, 2L, 2L, 2L, 4);
834a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey
84fd8be3e5e7420f3cca591daeec8a44487f5f65aaJeff Sharkey        assertEquals(2, stats.size());
85d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertEquals(2, stats.internalSize());
864a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey
87b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 3L, 30L, 4L, 40L, 7);
88b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 4L, 40L, 4L, 40L, 8);
89b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.addValues(TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 5L, 50L, 5L, 50L, 10);
904a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey
91fd8be3e5e7420f3cca591daeec8a44487f5f65aaJeff Sharkey        assertEquals(5, stats.size());
92d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertTrue(stats.internalSize() >= 5);
934a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey
94b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(stats, 0, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 2L, 3);
95b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(stats, 1, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 2L, 2L, 2L, 2L, 4);
96b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(stats, 2, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 3L, 30L, 4L, 40L, 7);
97b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(stats, 3, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 4L, 40L, 4L, 40L, 8);
98b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(stats, 4, TEST_IFACE, TEST_UID, SET_DEFAULT, TAG_NONE, 5L, 50L, 5L, 50L, 10);
994a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey    }
1004a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey
1011b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey    public void testCombineExisting() throws Exception {
1021b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey        final NetworkStats stats = new NetworkStats(TEST_START, 10);
1031b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey
104b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.addValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, 512L, 4L, 256L, 2L, 10);
105b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.addValues(TEST_IFACE, 1001, SET_DEFAULT, 0xff, 128L, 1L, 128L, 1L, 2);
106b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.combineValues(TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, -128L, -1L, -128L, -1L, -1);
1071b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey
108b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(stats, 0, TEST_IFACE, 1001, SET_DEFAULT, TAG_NONE, 384L, 3L, 128L, 1L, 9);
109b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(stats, 1, TEST_IFACE, 1001, SET_DEFAULT, 0xff, 128L, 1L, 128L, 1L, 2);
1101b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey
1111b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey        // now try combining that should create row
112b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
113b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
114b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        stats.combineValues(TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 128L, 1L, 128L, 1L, 3);
115b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(stats, 2, TEST_IFACE, 5005, SET_DEFAULT, TAG_NONE, 256L, 2L, 256L, 2L, 6);
1161b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey    }
1171b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey
118eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    public void testSubtractIdenticalData() throws Exception {
1194a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey        final NetworkStats before = new NetworkStats(TEST_START, 2)
120b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
121b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
122eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
1234a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey        final NetworkStats after = new NetworkStats(TEST_START, 2)
124b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
125b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
126eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
1273f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey        final NetworkStats result = after.subtract(before);
128eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
12975279904202357565cf5a1cb11148d01f42b4569Jeff Sharkey        // identical data should result in zero delta
130b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0);
131b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0);
132eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    }
133eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
134eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    public void testSubtractIdenticalRows() throws Exception {
1354a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey        final NetworkStats before = new NetworkStats(TEST_START, 2)
136b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
137b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
138eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
1394a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey        final NetworkStats after = new NetworkStats(TEST_START, 2)
140b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1025L, 9L, 2L, 1L, 15)
141b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 3L, 1L, 1028L, 9L, 20);
142eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
1433f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey        final NetworkStats result = after.subtract(before);
144eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
145eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey        // expect delta between measurements
146b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1L, 1L, 2L, 1L, 4);
147b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 3L, 1L, 4L, 1L, 8);
148eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    }
149eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
150eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    public void testSubtractNewRows() throws Exception {
1514a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey        final NetworkStats before = new NetworkStats(TEST_START, 2)
152b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
153b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12);
154eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
1554a97122ebf4d92a3f94402041729d77905e6c0c0Jeff Sharkey        final NetworkStats after = new NetworkStats(TEST_START, 3)
156b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 1024L, 8L, 0L, 0L, 11)
157b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 1024L, 8L, 12)
158b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey                .addValues(TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
159eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
1603f3913550c10792edb8aecf66cc83c3db5c8b311Jeff Sharkey        final NetworkStats result = after.subtract(before);
161eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
162eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey        // its okay to have new rows
163b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(result, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0);
164b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(result, 1, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 0L, 0L, 0L, 0L, 0);
165b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertValues(result, 2, TEST_IFACE, 102, SET_DEFAULT, TAG_NONE, 1024L, 8L, 1024L, 8L, 20);
166eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey    }
167eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey
1688e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey    public void testSubtractMissingRows() throws Exception {
1698e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        final NetworkStats before = new NetworkStats(TEST_START, 2)
1708e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 1024L, 0L, 0L, 0L, 0)
1718e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2048L, 0L, 0L, 0L, 0);
1728e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey
1738e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        final NetworkStats after = new NetworkStats(TEST_START, 1)
1748e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 2049L, 2L, 3L, 4L, 0);
1758e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey
1768e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        final NetworkStats result = after.subtract(before);
1778e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey
1788e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        // should silently drop omitted rows
1798e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        assertEquals(1, result.size());
1808e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        assertValues(result, 0, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 1L, 2L, 3L, 4L, 0);
1818e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        assertEquals(4L, result.getTotalBytes());
1828e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey    }
1838e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey
1848e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey    public void testTotalBytes() throws Exception {
1858e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        final NetworkStats iface = new NetworkStats(TEST_START, 2)
1868e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 128L, 0L, 0L, 0L, 0L)
1878e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 256L, 0L, 0L, 0L, 0L);
1888e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        assertEquals(384L, iface.getTotalBytes());
1898e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey
1908e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        final NetworkStats uidSet = new NetworkStats(TEST_START, 3)
1918e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
1928e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
1938e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE, 101, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
1948e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        assertEquals(96L, uidSet.getTotalBytes());
1958e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey
1968e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        final NetworkStats uidTag = new NetworkStats(TEST_START, 3)
1978e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
1988e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
1998e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L)
2008e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
2018e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 16L, 0L, 0L, 0L, 0L)
2028e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 8L, 0L, 0L, 0L, 0L);
2038e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey        assertEquals(64L, uidTag.getTotalBytes());
2048e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey    }
2058e9992ae5053a3ac52d28a5a892aed0a0798c7abJeff Sharkey
206905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey    public void testGroupedByIfaceEmpty() throws Exception {
207905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        final NetworkStats uidStats = new NetworkStats(TEST_START, 3);
208905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        final NetworkStats grouped = uidStats.groupedByIface();
209905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
210905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertEquals(0, uidStats.size());
211905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertEquals(0, grouped.size());
212905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey    }
213905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
214905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey    public void testGroupedByIfaceAll() throws Exception {
215905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        final NetworkStats uidStats = new NetworkStats(TEST_START, 3)
216905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(IFACE_ALL, 100, SET_ALL, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
217905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(IFACE_ALL, 101, SET_FOREGROUND, TAG_NONE, 128L, 8L, 0L, 2L, 20L);
218905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        final NetworkStats grouped = uidStats.groupedByIface();
219905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
220905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertEquals(2, uidStats.size());
221905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertEquals(1, grouped.size());
222905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
223905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertValues(grouped, 0, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, 256L, 16L, 0L, 4L, 0L);
224905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey    }
225905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
226905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey    public void testGroupedByIface() throws Exception {
227905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        final NetworkStats uidStats = new NetworkStats(TEST_START, 3)
228905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
229905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
230905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L)
231905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
232905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L)
233905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L);
234905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
235905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        final NetworkStats grouped = uidStats.groupedByIface();
236905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
237905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertEquals(6, uidStats.size());
238905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
239905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertEquals(2, grouped.size());
240905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertValues(grouped, 0, TEST_IFACE, UID_ALL, SET_ALL, TAG_NONE, 256L, 16L, 0L, 2L, 0L);
241905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertValues(grouped, 1, TEST_IFACE2, UID_ALL, SET_ALL, TAG_NONE, 1024L, 64L, 0L, 0L, 0L);
242905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey    }
243905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
244905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey    public void testAddAllValues() {
245905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        final NetworkStats first = new NetworkStats(TEST_START, 5)
246905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
247905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
248905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
249905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        final NetworkStats second = new NetworkStats(TEST_START, 2)
250905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L)
251905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey                .addValues(TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
252905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
253905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        first.combineAllValues(second);
254905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
255905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertEquals(3, first.size());
256905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertValues(first, 0, TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 64L, 0L, 0L, 0L, 0L);
257905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertValues(first, 1, TEST_IFACE, 100, SET_FOREGROUND, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
258905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey        assertValues(first, 2, TEST_IFACE2, UID_ALL, SET_DEFAULT, TAG_NONE, 32L, 0L, 0L, 0L, 0L);
259905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey    }
260905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey
2611059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey    public void testGetTotal() {
2621059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        final NetworkStats stats = new NetworkStats(TEST_START, 3)
2631059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
2641059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey                .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
2651059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey                .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L)
2661059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey                .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
2671059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L)
2681059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L);
2691059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey
2701059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        assertValues(stats.getTotal(null), 1280L, 80L, 0L, 2L, 20L);
2711059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        assertValues(stats.getTotal(null, 100), 1152L, 72L, 0L, 2L, 20L);
2721059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        assertValues(stats.getTotal(null, 101), 128L, 8L, 0L, 0L, 0L);
2731059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey
2741059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        final HashSet<String> ifaces = Sets.newHashSet();
2751059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        assertValues(stats.getTotal(null, ifaces), 0L, 0L, 0L, 0L, 0L);
2761059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey
2771059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        ifaces.add(TEST_IFACE2);
2781059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        assertValues(stats.getTotal(null, ifaces), 1024L, 64L, 0L, 0L, 0L);
2791059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey    }
2801059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey
281163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey    public void testWithoutUid() throws Exception {
282163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        final NetworkStats before = new NetworkStats(TEST_START, 3)
283163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
284163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
285163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE2, 100, SET_DEFAULT, 0xF00D, 64L, 4L, 0L, 0L, 0L)
286163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE2, 100, SET_FOREGROUND, TAG_NONE, 512L, 32L, 0L, 0L, 0L)
287163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L)
288163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey                .addValues(TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L);
289163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey
290163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        final NetworkStats after = before.withoutUid(100);
291163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        assertEquals(6, before.size());
292163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        assertEquals(2, after.size());
293163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        assertValues(after, 0, TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L);
294163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey        assertValues(after, 1, TEST_IFACE, 101, SET_DEFAULT, 0xF00D, 128L, 8L, 0L, 0L, 0L);
295163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey    }
296163e6443f27884a9bfcb9a48ef606dc635852c23Jeff Sharkey
2974abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey    public void testClone() throws Exception {
2984abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey        final NetworkStats original = new NetworkStats(TEST_START, 5)
2994abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey                .addValues(TEST_IFACE, 100, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 2L, 20L)
3004abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey                .addValues(TEST_IFACE2, 100, SET_DEFAULT, TAG_NONE, 512L, 32L, 0L, 0L, 0L);
3014abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey
3024abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey        // make clone and mutate original
3034abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey        final NetworkStats clone = original.clone();
3044abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey        original.addValues(TEST_IFACE, 101, SET_DEFAULT, TAG_NONE, 128L, 8L, 0L, 0L, 0L);
3054abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey
3064abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey        assertEquals(3, original.size());
3074abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey        assertEquals(2, clone.size());
3084abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey
3094abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey        assertEquals(128L + 512L + 128L, original.getTotalBytes());
3104abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey        assertEquals(128L + 512L, clone.getTotalBytes());
3114abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey    }
3124abb1b8ef64dc4cd71966b59dc5d72a15055bf13Jeff Sharkey
313b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey    private static void assertValues(NetworkStats stats, int index, String iface, int uid, int set,
314905b5891d2aa802f447ac2ce5d77b6c5ba06277aJeff Sharkey            int tag, long rxBytes, long rxPackets, long txBytes, long txPackets, long operations) {
315d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        final NetworkStats.Entry entry = stats.getValues(index, null);
3161059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        assertValues(entry, iface, uid, set, tag);
3171059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey        assertValues(entry, rxBytes, rxPackets, txBytes, txPackets, operations);
3181059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey    }
3191059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey
3201059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey    private static void assertValues(
3211059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey            NetworkStats.Entry entry, String iface, int uid, int set, int tag) {
322d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertEquals(iface, entry.iface);
323d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertEquals(uid, entry.uid);
324b5d55e302d2253e4bfb233ea705caf258cdc4cb9Jeff Sharkey        assertEquals(set, entry.set);
325d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertEquals(tag, entry.tag);
3261059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey    }
3271059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey
3281059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey    private static void assertValues(NetworkStats.Entry entry, long rxBytes, long rxPackets,
3291059c3c30ad96a15695c1a92ae8896e078a6309fJeff Sharkey            long txBytes, long txPackets, long operations) {
330d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertEquals(rxBytes, entry.rxBytes);
331d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertEquals(rxPackets, entry.rxPackets);
332d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertEquals(txBytes, entry.txBytes);
333d37948f6ed1667d077e0e3a38808f42f981ddcc2Jeff Sharkey        assertEquals(txPackets, entry.txPackets);
334a63ba59260cd1bb3f5c16e395ace45a61f1d4461Jeff Sharkey        assertEquals(operations, entry.operations);
3351b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey    }
3361b5a2a96f793211bfbd39aa29cc41031dfa23950Jeff Sharkey
337eedcb9525ba5befee2ba6ebb7a9ee3f13395c2a3Jeff Sharkey}
338