DataIdleTest.java revision 3ae29d455866ce358b42617134610415c04e0d53
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) {
793ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            Log.w(LOG_TAG, "Failed to fetch network stats for wifi.");
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) {
883ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang        for (int i = 0; i < stats.size(); ++i) {
893ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            Entry  statsEntry = stats.getValues(i, null);
903ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            Bundle result = new Bundle();
913ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            result.putInt("uid", statsEntry.uid);
923ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            result.putInt("tag", statsEntry.tag);
933ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            result.putInt("set", statsEntry.set);
943ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            result.putString("iface", statsEntry.iface);
953ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            result.putLong("rxBytes", statsEntry.rxBytes);
963ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            result.putLong("txBytes", statsEntry.txBytes);
973ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang            getInstrumentation().sendStatus(INSTRUMENTATION_IN_PROGRESS, result);
983ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang        }
993ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang    }
1003ae29d455866ce358b42617134610415c04e0d53Tsu Chiang Chuang}
101