159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka/* 259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * Copyright (C) 2017 The Android Open Source Project 359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * 459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * Licensed under the Apache License, Version 2.0 (the "License"); 559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * you may not use this file except in compliance with the License. 659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * You may obtain a copy of the License at 759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * 859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * http://www.apache.org/licenses/LICENSE-2.0 959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * 1059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * Unless required by applicable law or agreed to in writing, software 1159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * distributed under the License is distributed on an "AS IS" BASIS, 1259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * See the License for the specific language governing permissions and 1459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * limitations under the License. 1559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka */ 1659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 1759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankapackage com.android.internal.os; 1859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 1959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport static android.os.BatteryStats.STATS_SINCE_CHARGED; 2059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 2159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport static com.android.internal.os.BatteryStatsImpl.LongSamplingCounterArray; 2259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport static com.android.internal.os.BatteryStatsImpl.TimeBase; 2359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 2459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport static org.junit.Assert.assertTrue; 2559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport static org.mockito.Mockito.verify; 2659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport static org.mockito.Mockito.verifyNoMoreInteractions; 2759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport static org.mockito.Mockito.verifyZeroInteractions; 2859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport static org.mockito.Mockito.when; 2959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 3059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport android.os.Parcel; 3159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport android.support.test.filters.SmallTest; 3259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport android.support.test.runner.AndroidJUnit4; 3359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 3459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport org.junit.Before; 3559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport org.junit.Test; 3659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport org.junit.runner.RunWith; 3759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport org.mockito.Mock; 3859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport org.mockito.Mockito; 3959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport org.mockito.MockitoAnnotations; 4059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 4159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankaimport java.util.Arrays; 4259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 4359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka/** 4459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * Test class for {@link BatteryStatsImpl.LongSamplingCounterArray}. 4559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * 4659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * To run the tests, use 4759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * 4859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * runtest -c com.android.internal.os.LongSamplingCounterArrayTest frameworks-core 4959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * 5059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * or the following steps: 5159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * 5259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * Build: m FrameworksCoreTests 5359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * Install: adb install -r \ 5459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * ${ANDROID_PRODUCT_OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk 5559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * Run: adb shell am instrument -e class com.android.internal.os.LongSamplingCounterArrayTest -w \ 5659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka * com.android.frameworks.coretests/android.support.test.runner.AndroidJUnitRunner 5759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka */ 5859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka@SmallTest 5959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka@RunWith(AndroidJUnit4.class) 6059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shankapublic class LongSamplingCounterArrayTest { 6159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 6259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka private static final long[] COUNTS = {1111, 2222, 3333, 4444}; 6359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka private static final long[] LOADED_COUNTS = {5555, 6666, 7777, 8888}; 6459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka private static final long[] PLUGGED_COUNTS = {9999, 11111, 22222, 33333}; 6559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka private static final long[] UNPLUGGED_COUNTS = {44444, 55555, 66666, 77777}; 6659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka private static final long[] ZEROES = {0, 0, 0, 0}; 6759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 6859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Mock private TimeBase mTimeBase; 6959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka private LongSamplingCounterArray mCounterArray; 7059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 7159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Before 7259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka public void setUp() { 7359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka MockitoAnnotations.initMocks(this); 7459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray = new LongSamplingCounterArray(mTimeBase); 7559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka Mockito.reset(mTimeBase); 7659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 7759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 7859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Test 7959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka public void testReadWriteParcel() { 8059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka final Parcel parcel = Parcel.obtain(); 8159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka initializeCounterArrayWithDefaultValues(); 8259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka LongSamplingCounterArray.writeToParcel(parcel, mCounterArray); 8359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka parcel.setDataPosition(0); 8459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 8559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka // Now clear counterArray and verify values are read from parcel correctly. 8659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka updateCounts(null, null, null, null); 8759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray = LongSamplingCounterArray.readFromParcel(parcel, mTimeBase); 8859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(COUNTS, mCounterArray.mCounts, "Unexpected counts"); 8959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(LOADED_COUNTS, mCounterArray.mLoadedCounts, "Unexpected loadedCounts"); 9059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(COUNTS, mCounterArray.mPluggedCounts, "Unexpected pluggedCounts"); 9159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(UNPLUGGED_COUNTS, mCounterArray.mUnpluggedCounts, 9259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka "Unexpected unpluggedCounts"); 9359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka parcel.recycle(); 9459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 9559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 9659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Test 9759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka public void testReadWriteSummaryParcel() { 9859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka final Parcel parcel = Parcel.obtain(); 9959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka initializeCounterArrayWithDefaultValues(); 10059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka LongSamplingCounterArray.writeSummaryToParcelLocked(parcel, mCounterArray); 10159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka parcel.setDataPosition(0); 10259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 10359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka // Now clear counterArray and verify values are read from parcel correctly. 10459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka updateCounts(null, null, null, null); 10559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray = LongSamplingCounterArray.readSummaryFromParcelLocked(parcel, mTimeBase); 10659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(COUNTS, mCounterArray.mCounts, "Unexpected counts"); 10759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(COUNTS, mCounterArray.mLoadedCounts, "Unexpected loadedCounts"); 10859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(COUNTS, mCounterArray.mPluggedCounts, "Unexpected pluggedCounts"); 10959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(COUNTS, mCounterArray.mUnpluggedCounts, "Unexpected unpluggedCounts"); 11059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka parcel.recycle(); 11159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 11259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 11359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Test 11459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka public void testOnTimeStarted() { 11559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka initializeCounterArrayWithDefaultValues(); 11659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.onTimeStarted(0, 0, 0); 11759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(PLUGGED_COUNTS, mCounterArray.mCounts, "Unexpected counts"); 11859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(LOADED_COUNTS, mCounterArray.mLoadedCounts, "Unexpected loadedCounts"); 11959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(PLUGGED_COUNTS, mCounterArray.mPluggedCounts, "Unexpected pluggedCounts"); 12059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(PLUGGED_COUNTS, mCounterArray.mUnpluggedCounts, 12159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka "Unexpected unpluggedCounts"); 12259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 12359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 12459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Test 12559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka public void testOnTimeStopped() { 12659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka initializeCounterArrayWithDefaultValues(); 12759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.onTimeStopped(0, 0, 0); 12859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(COUNTS, mCounterArray.mCounts, "Unexpected counts"); 12959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(LOADED_COUNTS, mCounterArray.mLoadedCounts, "Unexpected loadedCounts"); 13059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(COUNTS, mCounterArray.mPluggedCounts, "Unexpected pluggedCounts"); 13159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(UNPLUGGED_COUNTS, mCounterArray.mUnpluggedCounts, 13259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka "Unexpected unpluggedCounts"); 13359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 13459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 13559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Test 13659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka public void testGetCountsLocked() { 13759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka initializeCounterArrayWithDefaultValues(); 13859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 13959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka when(mTimeBase.isRunning()).thenReturn(false); 14059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka long[] actualVal = mCounterArray.getCountsLocked(STATS_SINCE_CHARGED); 14159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka long[] expectedVal = PLUGGED_COUNTS; 14259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(expectedVal, actualVal, "Unexpected values"); 14359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 14459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka when(mTimeBase.isRunning()).thenReturn(true); 14559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka actualVal = mCounterArray.getCountsLocked(STATS_SINCE_CHARGED); 14659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka expectedVal = COUNTS; 14759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(expectedVal, actualVal, "Unexpected values"); 14859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 14959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 15059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Test 15159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka public void testAddCountLocked() { 15259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka final long[] deltas = {123, 234, 345, 456}; 15359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.addCountLocked(deltas); 15459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(deltas, mCounterArray.mCounts, "Unexpected counts"); 15559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(null, mCounterArray.mLoadedCounts, "Unexpected loadedCounts"); 15659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(null, mCounterArray.mPluggedCounts, "Unexpected pluggedCounts"); 15759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(null, mCounterArray.mUnpluggedCounts, "Unexpected unpluggedCounts"); 15859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 15959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka initializeCounterArrayWithDefaultValues(); 16059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka final long[] newCounts = new long[deltas.length]; 16159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka for (int i = 0; i < deltas.length; ++i) { 16259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka newCounts[i] = COUNTS[i] + deltas[i]; 16359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 16459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.addCountLocked(deltas); 16559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(newCounts, mCounterArray.mCounts, "Unexpected counts"); 16659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(LOADED_COUNTS, mCounterArray.mLoadedCounts, "Unexpected loadedCounts"); 16759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(PLUGGED_COUNTS, mCounterArray.mPluggedCounts, "Unexpected pluggedCounts"); 16859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(UNPLUGGED_COUNTS, mCounterArray.mUnpluggedCounts, 16959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka "Unexpected unpluggedCounts"); 17059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 17159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 17259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Test 17359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka public void testReset() { 17459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka initializeCounterArrayWithDefaultValues(); 17559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka // Test with detachIfReset=false 17659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.reset(false /* detachIfReset */); 17759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(ZEROES, mCounterArray.mCounts, "Unexpected counts"); 17859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(ZEROES, mCounterArray.mLoadedCounts, "Unexpected loadedCounts"); 17959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(ZEROES, mCounterArray.mPluggedCounts, "Unexpected pluggedCounts"); 18059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(ZEROES, mCounterArray.mUnpluggedCounts, "Unexpected unpluggedCounts"); 18159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka verifyZeroInteractions(mTimeBase); 18259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 18359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka initializeCounterArrayWithDefaultValues(); 18459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka // Test with detachIfReset=true 18559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.reset(true /* detachIfReset */); 18659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(ZEROES, mCounterArray.mCounts, "Unexpected counts"); 18759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(ZEROES, mCounterArray.mLoadedCounts, "Unexpected loadedCounts"); 18859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(ZEROES, mCounterArray.mPluggedCounts, "Unexpected pluggedCounts"); 18959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertArrayEquals(ZEROES, mCounterArray.mUnpluggedCounts, "Unexpected unpluggedCounts"); 19059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka verify(mTimeBase).remove(mCounterArray); 19159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka verifyNoMoreInteractions(mTimeBase); 19259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 19359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 19459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka @Test 19559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka public void testDetach() { 19659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.detach(); 19759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka verify(mTimeBase).remove(mCounterArray); 19859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka verifyNoMoreInteractions(mTimeBase); 19959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 20059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 20159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka private void initializeCounterArrayWithDefaultValues() { 20259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka updateCounts(COUNTS, LOADED_COUNTS, PLUGGED_COUNTS, UNPLUGGED_COUNTS); 20359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 20459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 20559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka private void assertArrayEquals(long[] expected, long[] actual, String msg) { 20659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka assertTrue(msg + ", expected: " + Arrays.toString(expected) 20759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka + ", actual: " + Arrays.toString(actual), Arrays.equals(expected, actual)); 20859f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 20959f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka 21059f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka private void updateCounts(long[] counts, long[] loadedCounts, 21159f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka long[] pluggedCounts, long[] unpluggedCounts) { 21259f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.mCounts = counts; 21359f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.mLoadedCounts = loadedCounts; 21459f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.mPluggedCounts = pluggedCounts; 21559f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka mCounterArray.mUnpluggedCounts = unpluggedCounts; 21659f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka } 21759f5c00b41b742eefcee450365bb522b7c0e8cc6Sudheer Shanka} 218