DataIdleTest.java revision a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74
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() {
553ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang        NetworkTemplate template = NetworkTemplate.buildTemplateWifi();
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 {
753ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            NetworkStats stats = mStatsService.getSummaryForAllUid(template, Long.MIN_VALUE,
763ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang                    Long.MAX_VALUE, false);
773ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            reportStats(stats);
783ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang        } catch (RemoteException e) {
79a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang            Log.w(LOG_TAG, "Failed to fetch network stats.");
803ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang        }
813ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang    }
823ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang
833ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang    /**
843ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang     * Print network data usage stats to instrumentation out
853ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang     * @param stats {@link NetworkorStats} to print
863ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang     */
873ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang    void reportStats(NetworkStats stats) {
88a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang        Bundle result = new Bundle();
89a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang        long rxBytes = 0;
90a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang        long txBytes = 0;
913ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang        for (int i = 0; i < stats.size(); ++i) {
92a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang            // Label will be iface_uid_tag_set
933ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            Entry  statsEntry = stats.getValues(i, null);
94a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang            String labelTemplate = String.format("%s_%d_%d_%d", statsEntry.iface, statsEntry.uid,
95a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang                    statsEntry.tag, statsEntry.set) + "_%s";
96a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang            result.putLong(String.format(labelTemplate, "rxBytes"), statsEntry.rxBytes);
97a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang            result.putLong(String.format(labelTemplate, "txBytes"), statsEntry.txBytes);
98a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang            rxBytes += statsEntry.rxBytes;
99a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang            txBytes += statsEntry.txBytes;
1003ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang        }
101a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang        result.putLong("Total rxBytes", rxBytes);
102a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang        result.putLong("Total txBytes", txBytes);
103a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang        getInstrumentation().sendStatus(INSTRUMENTATION_IN_PROGRESS, result);
104a14d20f60cd41f1b71e8a228a6e9ac002a1dfb74Tsu Chiang Chuang
1053ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang    }
1063ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang}
107