1 /* 2 * Copyright (C) 2022 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.cellbroadcastservice.tests; 18 19 import static com.android.cellbroadcastservice.CellBroadcastServiceMetrics.FeatureMetrics.ADDITIONAL_CBR_PACKAGES; 20 import static com.android.cellbroadcastservice.CellBroadcastServiceMetrics.FeatureMetrics.AREA_INFO_PACKAGES; 21 import static com.android.cellbroadcastservice.CellBroadcastServiceMetrics.FeatureMetrics.RESET_AREA_INFO; 22 23 import static org.mockito.ArgumentMatchers.anyBoolean; 24 import static org.mockito.ArgumentMatchers.anyInt; 25 import static org.mockito.ArgumentMatchers.anyString; 26 import static org.mockito.ArgumentMatchers.eq; 27 import static org.mockito.Mockito.doReturn; 28 import static org.mockito.Mockito.mock; 29 import static org.mockito.Mockito.times; 30 import static org.mockito.Mockito.verify; 31 32 import android.testing.AndroidTestingRunner; 33 import android.testing.TestableLooper; 34 35 import com.android.cellbroadcastservice.CellBroadcastServiceMetrics; 36 37 import org.junit.After; 38 import org.junit.Before; 39 import org.junit.Test; 40 import org.junit.runner.RunWith; 41 42 import java.util.Arrays; 43 44 @RunWith(AndroidTestingRunner.class) 45 @TestableLooper.RunWithLooper 46 public class CellBroadcastServiceMetricsTest extends CellBroadcastServiceTestBase { 47 48 @Before setUp()49 public void setUp() throws Exception { 50 super.setUp(); 51 52 doReturn(mSharedPreference).when(mMockedContext) 53 .getSharedPreferences(anyString(), anyInt()); 54 doReturn(false).when(mSharedPreference).getBoolean(anyString(), anyBoolean()); 55 } 56 57 @After tearDown()58 public void tearDown() throws Exception { 59 super.tearDown(); 60 } 61 62 @Test testGetInstance()63 public void testGetInstance() { 64 CellBroadcastServiceMetrics test1 = CellBroadcastServiceMetrics.getInstance(); 65 CellBroadcastServiceMetrics test2 = CellBroadcastServiceMetrics.getInstance(); 66 67 assertSame(test1, test2); 68 } 69 70 @Test testGetFeatureMetrics()71 public void testGetFeatureMetrics() { 72 CellBroadcastServiceMetrics.FeatureMetrics test1 = 73 CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext); 74 CellBroadcastServiceMetrics.FeatureMetrics test2 = 75 CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext); 76 77 assertSame(test1, test2); 78 79 assertFalse(test1.isOverrideCbrPkgs()); 80 assertFalse(test1.isOverrideAreaInfoPkgs()); 81 assertFalse(test1.isResetAreaInfo()); 82 83 doReturn(true).when(mSharedPreference) 84 .getBoolean(eq(ADDITIONAL_CBR_PACKAGES), anyBoolean()); 85 doReturn(false).when(mSharedPreference) 86 .getBoolean(eq(AREA_INFO_PACKAGES), anyBoolean()); 87 doReturn(true).when(mSharedPreference) 88 .getBoolean(eq(RESET_AREA_INFO), anyBoolean()); 89 90 CellBroadcastServiceMetrics.getInstance().setFeatureMetrics(null); 91 CellBroadcastServiceMetrics.getInstance().setFeatureMetricsSharedPreferences(null); 92 93 test1 = CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext); 94 95 assertTrue(test1.isOverrideCbrPkgs()); 96 assertFalse(test1.isOverrideAreaInfoPkgs()); 97 assertTrue(test1.isResetAreaInfo()); 98 99 CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext) 100 .onChangedAdditionalCbrPackage(false); 101 CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext) 102 .onChangedAreaInfoPackage(Arrays.asList(new String[]{"com.google.android"})); 103 CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext) 104 .onChangedResetAreaInfo(false); 105 106 test1 = CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext); 107 108 assertFalse(test1.isOverrideCbrPkgs()); 109 assertTrue(test1.isOverrideAreaInfoPkgs()); 110 assertFalse(test1.isResetAreaInfo()); 111 } 112 113 @Test testEquals()114 public void testEquals() { 115 CellBroadcastServiceMetrics.getInstance().setFeatureMetrics(null); 116 CellBroadcastServiceMetrics.FeatureMetrics testFeatureMetrics = 117 CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext); 118 CellBroadcastServiceMetrics.FeatureMetrics testSharedPreferenceFeatureMetrics = 119 CellBroadcastServiceMetrics.getInstance().getFeatureMetricsSharedPreferences(); 120 121 assertTrue(testFeatureMetrics.equals(testSharedPreferenceFeatureMetrics)); 122 assertNotSame(testFeatureMetrics, testSharedPreferenceFeatureMetrics); 123 124 testFeatureMetrics.onChangedAdditionalCbrPackage(false); 125 testFeatureMetrics.onChangedAreaInfoPackage(Arrays.asList(new String[]{"test.com"})); 126 testFeatureMetrics.onChangedResetAreaInfo(false); 127 128 assertFalse(testFeatureMetrics.equals(testSharedPreferenceFeatureMetrics)); 129 130 testSharedPreferenceFeatureMetrics 131 .onChangedAdditionalCbrPackage(false); 132 testSharedPreferenceFeatureMetrics 133 .onChangedAreaInfoPackage(Arrays.asList(new String[]{"test.com"})); 134 testSharedPreferenceFeatureMetrics 135 .onChangedResetAreaInfo(false); 136 137 assertTrue(testFeatureMetrics.equals(testSharedPreferenceFeatureMetrics)); 138 } 139 140 @Test testClone()141 public void testClone() throws CloneNotSupportedException { 142 CellBroadcastServiceMetrics.getInstance().setFeatureMetrics(null); 143 CellBroadcastServiceMetrics.FeatureMetrics testFeatureMetrics = 144 CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext); 145 CellBroadcastServiceMetrics.FeatureMetrics testSharedPreferenceFeatureMetrics = 146 CellBroadcastServiceMetrics.getInstance().getFeatureMetricsSharedPreferences(); 147 148 assertTrue(testFeatureMetrics.equals(testSharedPreferenceFeatureMetrics)); 149 150 testFeatureMetrics.onChangedAdditionalCbrPackage(false); 151 testFeatureMetrics.onChangedAreaInfoPackage(Arrays.asList(new String[]{"test.com"})); 152 testFeatureMetrics.onChangedResetAreaInfo(false); 153 154 assertFalse(testFeatureMetrics.equals(testSharedPreferenceFeatureMetrics)); 155 156 testSharedPreferenceFeatureMetrics = 157 (CellBroadcastServiceMetrics.FeatureMetrics) testFeatureMetrics.clone(); 158 159 assertTrue(testFeatureMetrics.equals(testSharedPreferenceFeatureMetrics)); 160 assertNotSame(testFeatureMetrics, testSharedPreferenceFeatureMetrics); 161 } 162 163 @Test testLogFeatureChangedAsNeeded()164 public void testLogFeatureChangedAsNeeded() throws CloneNotSupportedException { 165 CellBroadcastServiceMetrics.getInstance().setFeatureMetrics(null); 166 CellBroadcastServiceMetrics.FeatureMetrics testFeatureMetrics = 167 CellBroadcastServiceMetrics.getInstance().getFeatureMetrics(mMockedContext); 168 CellBroadcastServiceMetrics.FeatureMetrics testSharedPreferenceFeatureMetrics = 169 CellBroadcastServiceMetrics.getInstance().getFeatureMetricsSharedPreferences(); 170 171 assertTrue(testFeatureMetrics.equals(testSharedPreferenceFeatureMetrics)); 172 173 testFeatureMetrics.onChangedAdditionalCbrPackage(true); 174 testFeatureMetrics.onChangedAreaInfoPackage(Arrays.asList(new String[]{"test.com"})); 175 testFeatureMetrics.onChangedResetAreaInfo(true); 176 177 assertFalse(testFeatureMetrics.equals(testSharedPreferenceFeatureMetrics)); 178 179 CellBroadcastServiceMetrics.getInstance().logFeatureChangedAsNeeded(mMockedContext); 180 181 CellBroadcastServiceMetrics.FeatureMetrics mockedFeatureMetrics = 182 mock(CellBroadcastServiceMetrics.FeatureMetrics.class); 183 184 CellBroadcastServiceMetrics.getInstance() 185 .setFeatureMetricsSharedPreferences(mockedFeatureMetrics); 186 187 assertFalse(mockedFeatureMetrics.equals(testFeatureMetrics)); 188 189 CellBroadcastServiceMetrics.getInstance().logFeatureChangedAsNeeded(mMockedContext); 190 191 CellBroadcastServiceMetrics.getInstance().setFeatureMetrics(mockedFeatureMetrics); 192 193 assertTrue(testFeatureMetrics.equals(CellBroadcastServiceMetrics.getInstance() 194 .getFeatureMetricsSharedPreferences())); 195 196 CellBroadcastServiceMetrics.getInstance().logFeatureChangedAsNeeded(mMockedContext); 197 198 verify(mockedFeatureMetrics, times(1)).logFeatureChanged(); 199 verify(mockedFeatureMetrics, times(1)).updateSharedPreferences(); 200 verify(mockedFeatureMetrics, times(1)).clone(); 201 } 202 } 203