DataIdleTest.java revision 9cf416fde65fd5795d5e40be7bda0557611bc562
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 {
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