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