DataIdleTest.java revision 8fc27e8b87bd1def854a03d84009143b315d4176
13ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang/* 23ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Copyright (C) 2011 The Android Open Source Project 33ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * 43ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Licensed under the Apache License, Version 2.0 (the "License"); 53ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * you may not use this file except in compliance with the License. 63ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * You may obtain a copy of the License at 73ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * 83ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * http://www.apache.org/licenses/LICENSE-2.0 93ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * 103ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Unless required by applicable law or agreed to in writing, software 113ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * distributed under the License is distributed on an "AS IS" BASIS, 123ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * See the License for the specific language governing permissions and 143ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * limitations under the License. 153ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 163ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangpackage com.android.tests.dataidle; 173ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 183ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.content.Context; 193ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.net.INetworkStatsService; 203ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.net.NetworkStats.Entry; 213ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.net.NetworkTemplate; 223ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.net.NetworkStats; 233ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.os.Bundle; 243ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.os.RemoteException; 253ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.os.ServiceManager; 263ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.telephony.TelephonyManager; 273ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.test.InstrumentationTestCase; 283ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.test.InstrumentationTestRunner; 293ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.util.Log; 303ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 313ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang/** 323ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * A test that dumps data usage to instrumentation out, used for measuring data usage for idle 333ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * devices. 343ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 353ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangpublic class DataIdleTest extends InstrumentationTestCase { 363ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 373ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private TelephonyManager mTelephonyManager; 383ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private INetworkStatsService mStatsService; 393ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 403ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private static final String LOG_TAG = "DataIdleTest"; 413ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private final static int INSTRUMENTATION_IN_PROGRESS = 2; 423ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 433ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang protected void setUp() throws Exception { 443ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang super.setUp(); 453ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang Context c = getInstrumentation().getTargetContext(); 463ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang mStatsService = INetworkStatsService.Stub.asInterface( 473ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang ServiceManager.getService(Context.NETWORK_STATS_SERVICE)); 483ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang mTelephonyManager = (TelephonyManager) c.getSystemService(Context.TELEPHONY_SERVICE); 493ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 503ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 513ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang /** 523ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Test that dumps all the data usage metrics for wifi to instrumentation out. 533ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 543ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang public void testWifiIdle() { 558fc27e8b87bd1def854a03d84009143b315d4176Jeff Sharkey NetworkTemplate template = NetworkTemplate.buildTemplateWifiWildcard(); 563ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang fetchStats(template); 573ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 583ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 593ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang /** 603ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Test that dumps all the data usage metrics for all mobile to instrumentation out. 613ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 623ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang public void testMobile() { 633ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang String subscriberId = mTelephonyManager.getSubscriberId(); 643ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang NetworkTemplate template = NetworkTemplate.buildTemplateMobileAll(subscriberId); 653ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang fetchStats(template); 663ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 673ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 683ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang /** 693ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Helper method that fetches all the network stats available and reports it 703ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * to instrumentation out. 713ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * @param template {link {@link NetworkTemplate} to match. 723ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 733ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private void fetchStats(NetworkTemplate template) { 743ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang try { 75db2990f5e743ed5030b6d5c1307b26737ec67a82Tsu Chiang Chuang mStatsService.forceUpdate(); 763ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang NetworkStats stats = mStatsService.getSummaryForAllUid(template, Long.MIN_VALUE, 773ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang Long.MAX_VALUE, false); 783ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang reportStats(stats); 793ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } catch (RemoteException e) { 80a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang Log.w(LOG_TAG, "Failed to fetch network stats."); 813ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 823ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 833ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 843ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang /** 853ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Print network data usage stats to instrumentation out 863ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * @param stats {@link NetworkorStats} to print 873ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 883ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang void reportStats(NetworkStats stats) { 89a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang Bundle result = new Bundle(); 90a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang long rxBytes = 0; 91a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang long txBytes = 0; 929cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang long rxPackets = 0; 939cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang long txPackets = 0; 943ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang for (int i = 0; i < stats.size(); ++i) { 95a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang // Label will be iface_uid_tag_set 963ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang Entry statsEntry = stats.getValues(i, null); 979cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang // Debugging use. 989cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang /* 99a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang String labelTemplate = String.format("%s_%d_%d_%d", statsEntry.iface, statsEntry.uid, 100a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang statsEntry.tag, statsEntry.set) + "_%s"; 101a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang result.putLong(String.format(labelTemplate, "rxBytes"), statsEntry.rxBytes); 102a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang result.putLong(String.format(labelTemplate, "txBytes"), statsEntry.txBytes); 1039cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang */ 1049cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang rxPackets += statsEntry.rxPackets; 105a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang rxBytes += statsEntry.rxBytes; 1069cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang txPackets += statsEntry.txPackets; 107a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang txBytes += statsEntry.txBytes; 1083ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 1099cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang result.putLong("Total rx Bytes", rxBytes); 1109cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang result.putLong("Total tx Bytes", txBytes); 1119cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang result.putLong("Total rx Packets", rxPackets); 1129cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang result.putLong("Total tx Packets", txPackets); 113a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang getInstrumentation().sendStatus(INSTRUMENTATION_IN_PROGRESS, result); 114a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang 1153ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 1163ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang} 117