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; 20b52e3e55098c4a6e3dbfe19885895411cfb38911Jeff Sharkeyimport android.net.INetworkStatsSession; 21b52e3e55098c4a6e3dbfe19885895411cfb38911Jeff Sharkeyimport android.net.NetworkStats; 223ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.net.NetworkStats.Entry; 233ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.net.NetworkTemplate; 24b52e3e55098c4a6e3dbfe19885895411cfb38911Jeff Sharkeyimport android.net.TrafficStats; 253ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.os.Bundle; 263ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.os.RemoteException; 273ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.os.ServiceManager; 283ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.telephony.TelephonyManager; 293ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.test.InstrumentationTestCase; 303ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangimport android.util.Log; 313ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 323ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang/** 333ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * A test that dumps data usage to instrumentation out, used for measuring data usage for idle 343ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * devices. 353ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 363ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuangpublic class DataIdleTest extends InstrumentationTestCase { 373ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 383ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private TelephonyManager mTelephonyManager; 393ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private INetworkStatsService mStatsService; 403ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 413ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private static final String LOG_TAG = "DataIdleTest"; 423ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private final static int INSTRUMENTATION_IN_PROGRESS = 2; 433ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 443ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang protected void setUp() throws Exception { 453ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang super.setUp(); 463ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang Context c = getInstrumentation().getTargetContext(); 473ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang mStatsService = INetworkStatsService.Stub.asInterface( 483ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang ServiceManager.getService(Context.NETWORK_STATS_SERVICE)); 493ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang mTelephonyManager = (TelephonyManager) c.getSystemService(Context.TELEPHONY_SERVICE); 503ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 513ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 523ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang /** 533ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Test that dumps all the data usage metrics for wifi to instrumentation out. 543ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 553ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang public void testWifiIdle() { 568fc27e8b87bd1def854a03d84009143b315d4176Jeff Sharkey NetworkTemplate template = NetworkTemplate.buildTemplateWifiWildcard(); 573ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang fetchStats(template); 583ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 593ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 603ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang /** 613ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Test that dumps all the data usage metrics for all mobile to instrumentation out. 623ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 633ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang public void testMobile() { 643ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang String subscriberId = mTelephonyManager.getSubscriberId(); 653ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang NetworkTemplate template = NetworkTemplate.buildTemplateMobileAll(subscriberId); 663ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang fetchStats(template); 673ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 683ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 693ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang /** 703ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Helper method that fetches all the network stats available and reports it 713ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * to instrumentation out. 72a45746efadd11bb7dfab026fb3c81a25fae74ca4Jeff Smith * @param template {@link NetworkTemplate} to match. 733ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 743ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang private void fetchStats(NetworkTemplate template) { 75b52e3e55098c4a6e3dbfe19885895411cfb38911Jeff Sharkey INetworkStatsSession session = null; 763ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang try { 77db2990f5e743ed5030b6d5c1307b26737ec67a82Tsu Chiang Chuang mStatsService.forceUpdate(); 78b52e3e55098c4a6e3dbfe19885895411cfb38911Jeff Sharkey session = mStatsService.openSession(); 79b52e3e55098c4a6e3dbfe19885895411cfb38911Jeff Sharkey final NetworkStats stats = session.getSummaryForAllUid( 80b52e3e55098c4a6e3dbfe19885895411cfb38911Jeff Sharkey template, Long.MIN_VALUE, Long.MAX_VALUE, false); 813ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang reportStats(stats); 823ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } catch (RemoteException e) { 83a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang Log.w(LOG_TAG, "Failed to fetch network stats."); 84b52e3e55098c4a6e3dbfe19885895411cfb38911Jeff Sharkey } finally { 85b52e3e55098c4a6e3dbfe19885895411cfb38911Jeff Sharkey TrafficStats.closeQuietly(session); 863ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 873ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 883ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang 893ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang /** 903ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * Print network data usage stats to instrumentation out 913ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang * @param stats {@link NetworkorStats} to print 923ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang */ 933ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang void reportStats(NetworkStats stats) { 94a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang Bundle result = new Bundle(); 95a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang long rxBytes = 0; 96a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang long txBytes = 0; 979cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang long rxPackets = 0; 989cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang long txPackets = 0; 993ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang for (int i = 0; i < stats.size(); ++i) { 100a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang // Label will be iface_uid_tag_set 1013ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang Entry statsEntry = stats.getValues(i, null); 1029cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang // Debugging use. 1039cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang /* 104a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang String labelTemplate = String.format("%s_%d_%d_%d", statsEntry.iface, statsEntry.uid, 105a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang statsEntry.tag, statsEntry.set) + "_%s"; 106a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang result.putLong(String.format(labelTemplate, "rxBytes"), statsEntry.rxBytes); 107a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang result.putLong(String.format(labelTemplate, "txBytes"), statsEntry.txBytes); 1089cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang */ 1099cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang rxPackets += statsEntry.rxPackets; 110a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang rxBytes += statsEntry.rxBytes; 1119cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang txPackets += statsEntry.txPackets; 112a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang txBytes += statsEntry.txBytes; 1133ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 1149cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang result.putLong("Total rx Bytes", rxBytes); 1159cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang result.putLong("Total tx Bytes", txBytes); 1169cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang result.putLong("Total rx Packets", rxPackets); 1179cf416fde65fd5795d5e40be7bda0557611bc562Tsu Chiang Chuang result.putLong("Total tx Packets", txPackets); 118a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang getInstrumentation().sendStatus(INSTRUMENTATION_IN_PROGRESS, result); 119a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang 1203ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang } 1213ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang} 122