NetworkStatsCollectionTest.java revision 0cf6de0c930c9082b7bffdb9824e4a7c7832b6df
163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey/* 263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * Copyright (C) 2012 The Android Open Source Project 363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * 463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License"); 563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * you may not use this file except in compliance with the License. 663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * You may obtain a copy of the License at 763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * 863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * http://www.apache.org/licenses/LICENSE-2.0 963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * 1063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * Unless required by applicable law or agreed to in writing, software 1163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS, 1263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * See the License for the specific language governing permissions and 1463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * limitations under the License. 1563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey */ 1663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 1763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeypackage com.android.server.net; 1863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 1963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport static android.net.NetworkTemplate.buildTemplateMobileAll; 2063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport static android.text.format.DateUtils.MINUTE_IN_MILLIS; 2163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 2263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport android.content.res.Resources; 2363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport android.net.NetworkStats; 2463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport android.net.NetworkTemplate; 2563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport android.test.AndroidTestCase; 2663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport android.test.suitebuilder.annotation.MediumTest; 2763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 2863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport com.android.frameworks.servicestests.R; 2963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 3063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport java.io.ByteArrayInputStream; 3163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport java.io.ByteArrayOutputStream; 3263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport java.io.DataOutputStream; 3363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport java.io.File; 3463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport java.io.FileOutputStream; 3563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport java.io.InputStream; 3663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport java.io.OutputStream; 3763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 3863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport libcore.io.IoUtils; 3963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeyimport libcore.io.Streams; 4063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 4163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey/** 4263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * Tests for {@link NetworkStatsCollection}. 4363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey */ 4463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey@MediumTest 4563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkeypublic class NetworkStatsCollectionTest extends AndroidTestCase { 460cf6de0c930c9082b7bffdb9824e4a7c7832b6dfJeff Sharkey 4763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey private static final String TEST_FILE = "test.bin"; 4863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey private static final String TEST_IMSI = "310260000000000"; 4963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 5063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey public void testReadLegacyNetwork() throws Exception { 5163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final File testFile = new File(getContext().getFilesDir(), TEST_FILE); 5263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey stageFile(R.raw.netstats_v1, testFile); 5363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 5463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final NetworkStatsCollection collection = new NetworkStatsCollection(30 * MINUTE_IN_MILLIS); 5563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.readLegacyNetwork(testFile); 560cf6de0c930c9082b7bffdb9824e4a7c7832b6dfJeff Sharkey 5763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // verify that history read correctly 5863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI), 590cf6de0c930c9082b7bffdb9824e4a7c7832b6dfJeff Sharkey 636016770L, 709306L, 88038768L, 518836L); 6063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 6163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // now export into a unified format 6263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final ByteArrayOutputStream bos = new ByteArrayOutputStream(); 6363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.write(new DataOutputStream(bos)); 6463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 6563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // clear structure completely 6663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.reset(); 6763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI), 6863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 0L, 0L, 0L, 0L); 6963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 7063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // and read back into structure, verifying that totals are same 7163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.read(new ByteArrayInputStream(bos.toByteArray())); 7263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI), 730cf6de0c930c9082b7bffdb9824e4a7c7832b6dfJeff Sharkey 636016770L, 709306L, 88038768L, 518836L); 7463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 7563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 7663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey public void testReadLegacyUid() throws Exception { 7763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final File testFile = new File(getContext().getFilesDir(), TEST_FILE); 7863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey stageFile(R.raw.netstats_uid_v4, testFile); 7963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 8063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final NetworkStatsCollection collection = new NetworkStatsCollection(30 * MINUTE_IN_MILLIS); 8163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.readLegacyUid(testFile, false); 8263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 8363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // verify that history read correctly 8463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI), 850cf6de0c930c9082b7bffdb9824e4a7c7832b6dfJeff Sharkey 637076152L, 711413L, 88343717L, 521022L); 8663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 8763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // now export into a unified format 8863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final ByteArrayOutputStream bos = new ByteArrayOutputStream(); 8963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.write(new DataOutputStream(bos)); 9063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 9163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // clear structure completely 9263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.reset(); 9363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI), 9463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 0L, 0L, 0L, 0L); 9563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 9663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // and read back into structure, verifying that totals are same 9763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.read(new ByteArrayInputStream(bos.toByteArray())); 9863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertSummaryTotal(collection, buildTemplateMobileAll(TEST_IMSI), 990cf6de0c930c9082b7bffdb9824e4a7c7832b6dfJeff Sharkey 637076152L, 711413L, 88343717L, 521022L); 10063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 10163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 10263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey public void testReadLegacyUidTags() throws Exception { 10363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final File testFile = new File(getContext().getFilesDir(), TEST_FILE); 10463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey stageFile(R.raw.netstats_uid_v4, testFile); 10563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 10663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final NetworkStatsCollection collection = new NetworkStatsCollection(30 * MINUTE_IN_MILLIS); 10763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.readLegacyUid(testFile, true); 10863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 10963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // verify that history read correctly 11063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertSummaryTotalIncludingTags(collection, buildTemplateMobileAll(TEST_IMSI), 11163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 77017831L, 100995L, 35436758L, 92344L); 11263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 11363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // now export into a unified format 11463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final ByteArrayOutputStream bos = new ByteArrayOutputStream(); 11563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.write(new DataOutputStream(bos)); 11663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 11763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // clear structure completely 11863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.reset(); 11963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertSummaryTotalIncludingTags(collection, buildTemplateMobileAll(TEST_IMSI), 12063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 0L, 0L, 0L, 0L); 12163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 12263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey // and read back into structure, verifying that totals are same 12363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey collection.read(new ByteArrayInputStream(bos.toByteArray())); 12463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertSummaryTotalIncludingTags(collection, buildTemplateMobileAll(TEST_IMSI), 12563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 77017831L, 100995L, 35436758L, 92344L); 12663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 12763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 12863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey /** 12963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * Copy a {@link Resources#openRawResource(int)} into {@link File} for 13063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey * testing purposes. 13163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey */ 13263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey private void stageFile(int rawId, File file) throws Exception { 13363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey new File(file.getParent()).mkdirs(); 13463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey InputStream in = null; 13563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey OutputStream out = null; 13663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey try { 13763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey in = getContext().getResources().openRawResource(rawId); 13863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey out = new FileOutputStream(file); 13963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey Streams.copy(in, out); 14063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } finally { 14163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey IoUtils.closeQuietly(in); 14263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey IoUtils.closeQuietly(out); 14363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 14463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 14563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 14663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey private static void assertSummaryTotal(NetworkStatsCollection collection, 14763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey NetworkTemplate template, long rxBytes, long rxPackets, long txBytes, long txPackets) { 14863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final NetworkStats.Entry entry = collection.getSummary( 14963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey template, Long.MIN_VALUE, Long.MAX_VALUE).getTotal(null); 15063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertEntry(entry, rxBytes, rxPackets, txBytes, txPackets); 15163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 15263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 15363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey private static void assertSummaryTotalIncludingTags(NetworkStatsCollection collection, 15463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey NetworkTemplate template, long rxBytes, long rxPackets, long txBytes, long txPackets) { 15563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey final NetworkStats.Entry entry = collection.getSummary( 15663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey template, Long.MIN_VALUE, Long.MAX_VALUE).getTotalIncludingTags(null); 15763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertEntry(entry, rxBytes, rxPackets, txBytes, txPackets); 15863abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 15963abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey 16063abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey private static void assertEntry( 16163abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey NetworkStats.Entry entry, long rxBytes, long rxPackets, long txBytes, long txPackets) { 16263abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes); 16363abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets); 16463abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertEquals("unexpected txBytes", txBytes, entry.txBytes); 16563abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey assertEquals("unexpected txPackets", txPackets, entry.txPackets); 16663abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey } 16763abc37356728c0575d6a62a203102ae6d97953bJeff Sharkey} 168