Home | History | Annotate | Download | only in telephony
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 
     17 package com.android.internal.telephony;
     18 
     19 import static com.android.internal.telephony.TelephonyTestUtils.waitForMs;
     20 import junit.framework.TestCase;
     21 
     22 public class ClientWakelockTrackerTest extends TestCase {
     23     ClientWakelockTracker myTracker;
     24 
     25     public void setUp() throws Exception {
     26         super.setUp();
     27         myTracker = new ClientWakelockTracker();
     28     }
     29 
     30     public void tearDown() throws Exception {
     31         super.tearDown();
     32     }
     33 
     34     /* This test has client "ABC" send 1 message at time t and gets response at t+40,
     35     client "PQR" sends a message at t+20 and gets response at t+120. Verify that
     36     "ABC" is attributed 30ms and "PQR" 90ms of the total wakelock time of 120ms
     37      */
     38     public void testTwoClients() throws Exception {
     39         myTracker.startTracking("ABC", 101, 1, 1);
     40         waitForMs(20);
     41         assertEquals(1, myTracker.mActiveClients.size());
     42         myTracker.startTracking("PQR", 102, 2, 2);
     43         assertEquals(2, myTracker.mActiveClients.size());
     44         ClientWakelockAccountant abc = myTracker.mClients.get("ABC");
     45         ClientWakelockAccountant pqr = myTracker.mClients.get("PQR");
     46         assertEquals(2, abc.mPendingRilWakelocks.get(0).getConcurrentRequests());
     47         assertEquals(2, pqr.mPendingRilWakelocks.get(0).getConcurrentRequests());
     48         waitForMs(20);
     49         myTracker.stopTracking("ABC", 101, 1, 1);
     50         assertEquals(1, myTracker.mActiveClients.size());
     51         assertEquals(0, abc.getPendingRequestCount());
     52         assertEquals(1, pqr.mPendingRilWakelocks.get(0).getConcurrentRequests());
     53         waitForMs(80);
     54         myTracker.stopTracking("PQR", 102, 2, 0);
     55         assertEquals(0, myTracker.mActiveClients.size());
     56         assertEquals(0, abc.getPendingRequestCount());
     57         assertEquals(0, pqr.getPendingRequestCount());
     58 
     59         assertTimeTaken(abc, 30);
     60         assertTimeTaken(pqr, 90);
     61     }
     62 
     63     private void assertTimeTaken(ClientWakelockAccountant abc, int time) {
     64         assertTrue(abc.mRequestStats.getCompletedRequestsWakelockTime() > (time - 1));
     65         assertTrue(abc.mRequestStats.getCompletedRequestsWakelockTime() < (time + 19));
     66     }
     67 
     68     /* This test has client "ABC" send 1 message at time t and gets response at t+40,
     69     and sends another message at t+20 and gets response at t+120. Verify that
     70     "ABC" is attributed 120ms
     71      */
     72     public void testOneClient() throws Exception {
     73         myTracker.startTracking("ABC", 101, 1, 1);
     74         waitForMs(20);
     75         assertEquals(1, myTracker.mActiveClients.size());
     76         myTracker.startTracking("ABC", 102, 2, 2);
     77         assertEquals(1, myTracker.mActiveClients.size());
     78         ClientWakelockAccountant abc = myTracker.mClients.get("ABC");
     79         assertEquals(2, abc.mPendingRilWakelocks.get(0).getConcurrentRequests());
     80         assertEquals(2, abc.mPendingRilWakelocks.get(1).getConcurrentRequests());
     81         waitForMs(20);
     82         myTracker.stopTracking("ABC", 101, 1, 1);
     83         assertEquals(1, myTracker.mActiveClients.size());
     84         assertEquals(1, abc.getPendingRequestCount());
     85         assertEquals(1, abc.mPendingRilWakelocks.get(0).getConcurrentRequests());
     86         waitForMs(80);
     87         myTracker.stopTracking("ABC", 102, 2, 0);
     88         assertEquals(0, myTracker.mActiveClients.size());
     89         assertEquals(0, abc.getPendingRequestCount());
     90         assertEquals(2, abc.mRequestStats.getCompletedRequestsCount());
     91 
     92         assertTimeTaken(abc, 120);
     93     }
     94 
     95     /* This test has client "ABC" send 1 message at time t and another at time t+20
     96     and gets response for all at t+40. Verify that "ABC" is attributed 40ms
     97      */
     98     public void testStopTrackingAllOneClient() throws Exception {
     99         myTracker.startTracking("ABC", 101, 1, 1);
    100         waitForMs(20);
    101         assertEquals(1, myTracker.mActiveClients.size());
    102         myTracker.startTracking("ABC", 102, 2, 2);
    103         ClientWakelockAccountant abc = myTracker.mClients.get("ABC");
    104         assertEquals(1, myTracker.mActiveClients.size());
    105         assertEquals(2, abc.mPendingRilWakelocks.get(0).getConcurrentRequests());
    106         assertEquals(2, abc.mPendingRilWakelocks.get(1).getConcurrentRequests());
    107         waitForMs(20);
    108         myTracker.stopTrackingAll();
    109         assertEquals(0, myTracker.mActiveClients.size());
    110         assertEquals(0, abc.getPendingRequestCount());
    111         assertEquals(2, abc.mRequestStats.getCompletedRequestsCount());
    112 
    113         assertTimeTaken(abc, 40);
    114     }
    115 
    116     /* This test has client "ABC" send 1 message at time t and client "PQR" sends 1 message
    117      at time (t+20)ms. Both of them get response at (t+40). Verify that
    118     "ABC" is attributed 30ms amd PQR is attributed 10ms
    119      */
    120     public void testStopTrackingAllTwoClients() throws Exception {
    121         myTracker.startTracking("ABC", 101, 1, 1);
    122         waitForMs(20);
    123         assertEquals(1, myTracker.mActiveClients.size());
    124         myTracker.startTracking("PQR", 102, 2, 2);
    125         ClientWakelockAccountant abc = myTracker.mClients.get("ABC");
    126         ClientWakelockAccountant pqr = myTracker.mClients.get("PQR");
    127         assertEquals(2, myTracker.mActiveClients.size());
    128         assertEquals(2, abc.mPendingRilWakelocks.get(0).getConcurrentRequests());
    129         assertEquals(2, pqr.mPendingRilWakelocks.get(0).getConcurrentRequests());
    130         waitForMs(20);
    131         myTracker.stopTrackingAll();
    132         assertEquals(0, myTracker.mActiveClients.size());
    133         assertEquals(0, abc.getPendingRequestCount());
    134         assertEquals(1, abc.mRequestStats.getCompletedRequestsCount());
    135         assertEquals(0, pqr.getPendingRequestCount());
    136 
    137         assertTimeTaken(pqr, 10);
    138         assertTimeTaken(abc, 30);
    139     }
    140 }
    141