10b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla/* 20b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * Copyright (C) 2016 The Android Open Source Project 30b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * 40b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * Licensed under the Apache License, Version 2.0 (the "License"); 50b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * you may not use this file except in compliance with the License. 60b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * You may obtain a copy of the License at 70b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * 80b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * http://www.apache.org/licenses/LICENSE-2.0 90b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * 100b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * Unless required by applicable law or agreed to in writing, software 110b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * distributed under the License is distributed on an "AS IS" BASIS, 120b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * See the License for the specific language governing permissions and 140b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla * limitations under the License 150b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla */ 160b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 170b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kallapackage com.android.internal.telephony; 180b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 190b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kallaimport static com.android.internal.telephony.TelephonyTestUtils.waitForMs; 200b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 210b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kallaimport android.os.Build; 220b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kallaimport android.util.Log; 230b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kallaimport android.telephony.Rlog; 240b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kallaimport android.telephony.TelephonyHistogram; 250b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 260b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kallaimport junit.framework.Assert; 270b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kallaimport junit.framework.TestCase; 280b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 290b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kallapublic class ClientWakelockAccountantTest extends TestCase { 300b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla private final static String LOG_TAG = "ClientWakelockAccountantTest"; 310b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla ClientWakelockAccountant mClient; 320b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 330b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla @Override 340b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla public void setUp() throws Exception { 350b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla super.setUp(); 360b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient = new ClientWakelockAccountant("Package Name"); 370b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla } 380b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 390b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla @Override 400b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla public void tearDown() throws Exception { 410b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla super.tearDown(); 420b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla } 430b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 440b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla public void testStartAttributingWakelock() throws Exception { 450b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 460b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(0, mClient.getPendingRequestCount()); 470b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.startAttributingWakelock(15, 25, 1, 100); 480b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(1, mClient.getPendingRequestCount()); 490b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.startAttributingWakelock(22, 26, 2, 150); 500b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(2, mClient.getPendingRequestCount()); 510b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla } 520b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 530b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla /* This test only tests ClientWakelockAccountant to make sure that it applies the 540b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla multiplier as expected. Here we start 1 Client and add 2 requests. 550b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla First request multiplier stays at 1 and goes on for 200ms and second request 560b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla multiplier stays at 0.5 and request goes on for 500ms. So totally we 570b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla expect the wakelock time for the Client to be 200*1 + 500*0.5 = 450ms 580b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla */ 590b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla public void testStopAttributingWakelock() throws Exception { 600b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.startAttributingWakelock(15, 25, 1, 100); 610b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.startAttributingWakelock(25, 26, 2, 200); 620b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.changeConcurrentRequests(2, 200); 630b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(2, mClient.getPendingRequestCount()); 640b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(0, mClient.mRequestStats.getCompletedRequestsCount()); 650b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.stopAttributingWakelock(15, 25, 300); 660b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.changeConcurrentRequests(1, 300); 670b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(1, mClient.mRequestStats.getRequestHistograms().size()); 680b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.stopAttributingWakelock(25, 26, 700); 690b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(0, mClient.getPendingRequestCount()); 700b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(2, mClient.mRequestStats.getCompletedRequestsCount()); 710b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(600, mClient.mRequestStats.getCompletedRequestsWakelockTime()); 720b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(0, mClient.updatePendingRequestWakelockTime(0)); 730b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(2, mClient.mRequestStats.getRequestHistograms().size()); 740b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla } 750b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 760b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla public void testStopAllPendingRequests() throws Exception { 770b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 780b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.startAttributingWakelock(15, 25, 1, 100); 790b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.startAttributingWakelock(22, 26, 2, 150); 800b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(2, mClient.getPendingRequestCount()); 810b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.stopAllPendingRequests(300); 820b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(0, mClient.getPendingRequestCount()); 830b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(2, mClient.mRequestStats.getCompletedRequestsCount()); 840b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(275, mClient.mRequestStats.getCompletedRequestsWakelockTime()); 850b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(0, mClient.updatePendingRequestWakelockTime(0)); 860b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(2, mClient.mRequestStats.getRequestHistograms().size()); 870b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla } 880b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla 890b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla public void testStartAttributingWithZeroConcurrentRequests() throws Exception { 900b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla if(Build.IS_DEBUGGABLE) { 910b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla try { 920b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.startAttributingWakelock(15, 25, 0, 100); 930b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla fail("Expecting an illegal argument Exception to be thrown"); 940b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla } catch (IllegalArgumentException e) { } 950b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla } else { 960b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla mClient.startAttributingWakelock(15, 25, 0, 100); 970b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla Assert.assertEquals(1, mClient.getPendingRequestCount()); 980b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla } 990b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla } 1000b1f9e9741e7a006c0e79a28e32d59ac90e570e4Naveen Kalla} 101