1 /* 2 * Copyright (C) 2024 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.cts.packagemanager.stats.host; 18 19 import static android.content.pm.Flags.FLAG_COMPONENT_STATE_CHANGED_METRICS; 20 21 import static com.android.os.packagemanager.ComponentStateChangedReported.ComponentState.COMPONENT_STATE_DEFAULT; 22 import static com.android.os.packagemanager.ComponentStateChangedReported.ComponentState.COMPONENT_STATE_DISABLED; 23 import static com.android.os.packagemanager.ComponentStateChangedReported.ComponentState.COMPONENT_STATE_ENABLED; 24 25 import static com.google.common.truth.Truth.assertThat; 26 27 import android.cts.statsdatom.lib.AtomTestUtils; 28 import android.cts.statsdatom.lib.ConfigUtils; 29 import android.cts.statsdatom.lib.DeviceUtils; 30 import android.cts.statsdatom.lib.ReportUtils; 31 import android.platform.test.annotations.AppModeFull; 32 import android.platform.test.annotations.RequiresFlagsEnabled; 33 import android.platform.test.flag.junit.CheckFlagsRule; 34 import android.platform.test.flag.junit.host.HostFlagsValueProvider; 35 36 import com.android.os.StatsLog; 37 import com.android.os.packagemanager.ComponentStateChangedReported; 38 import com.android.os.packagemanager.PackagemanagerExtensionAtoms; 39 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner; 40 import com.android.tradefed.testtype.junit4.BaseHostJUnit4Test; 41 import com.android.tradefed.util.RunUtil; 42 43 import com.google.protobuf.ExtensionRegistry; 44 45 import org.junit.After; 46 import org.junit.Before; 47 import org.junit.Rule; 48 import org.junit.Test; 49 import org.junit.runner.RunWith; 50 51 import java.util.List; 52 53 /** 54 * Tests for ComponentStateChangedReported logging. 55 */ 56 @RunWith(DeviceJUnit4ClassRunner.class) 57 @AppModeFull 58 public class ComponentStateChangedReportedStatsTests extends BaseHostJUnit4Test { 59 private static final String TEST_INSTALL_APK = "CtsStatsdAtomTestComponentStateApp.apk"; 60 private static final String TEST_INSTALL_PACKAGE = 61 "com.android.cts.packagemanager.stats.testcomponentstateapp"; 62 private static final String HELPER_PACKAGE = "com.android.cts.packagemanager.stats.device"; 63 private static final String HELPER_CLASS = 64 HELPER_PACKAGE + ".ComponentStateChangedReportedStatsTestsHelper"; 65 private static final String TEST_METHOD_SET_APPLICATION_ENABLED_SETTING = 66 "testSetApplicationEnabledSetting"; 67 private static final String TEST_METHOD_SET_COMPONENT_ENABLED_SETTING_FOR_LAUNCHER_ACTIVITY = 68 "testSetComponentEnabledSettingForLauncherActivity"; 69 private static final String TEST_METHOD_SET_COMPONENT_ENABLED_SETTING_FOR_NO_LAUNCHER_ACTIVITY = 70 "testSetComponentEnabledSettingForNoLauncherActivity"; 71 private static final String TEST_METHOD_SET_COMPONENT_ENABLED_SETTING_ENABLED_THEN_DISABLED = 72 "testSetComponentEnabledSettingEnabledThenDisabled"; 73 private static final String TEST_METHOD_SET_COMPONENT_ENABLED_SETTING_TWO_LAUNCHER_ACTIVITIES = 74 "testComponentStateChangedReportedForTwoDifferentStateLauncherActivities"; 75 private static final String TEST_METHOD_SET_APPLICATION_ENABLED_THEN_DISABLED = 76 "testComponentStateChangedReportedEnabledThenDisabledWholeApp"; 77 78 @Rule 79 public final CheckFlagsRule mCheckFlagsRule = 80 HostFlagsValueProvider.createCheckFlagsRule(this::getDevice); 81 82 @Before setUp()83 public void setUp() throws Exception { 84 installPackage("CtsStatsdAtomApp.apk"); 85 ConfigUtils.removeConfig(getDevice()); 86 ReportUtils.clearReports(getDevice()); 87 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_LONG); 88 } 89 90 @After tearDown()91 public void tearDown() throws Exception { 92 getDevice().uninstallPackage(TEST_INSTALL_PACKAGE); 93 ConfigUtils.removeConfig(getDevice()); 94 ReportUtils.clearReports(getDevice()); 95 } 96 97 @RequiresFlagsEnabled(FLAG_COMPONENT_STATE_CHANGED_METRICS) 98 @Test testComponentStateChangedReportedForWholeApp()99 public void testComponentStateChangedReportedForWholeApp() throws Throwable { 100 ConfigUtils.uploadConfigForPushedAtom(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG, 101 PackagemanagerExtensionAtoms.COMPONENT_STATE_CHANGED_REPORTED_FIELD_NUMBER); 102 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_SHORT); 103 104 ExtensionRegistry registry = ExtensionRegistry.newInstance(); 105 PackagemanagerExtensionAtoms.registerAllExtensions(registry); 106 107 installPackage(TEST_INSTALL_APK); 108 assertThat(getDevice().isPackageInstalled(TEST_INSTALL_PACKAGE, 109 String.valueOf(getDevice().getCurrentUser()))).isTrue(); 110 111 // Run test in CTS package 112 runDeviceTests(getDevice(), HELPER_PACKAGE, HELPER_CLASS, 113 TEST_METHOD_SET_APPLICATION_ENABLED_SETTING); 114 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_LONG); 115 116 List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice(), 117 registry); 118 assertThat(data).isNotNull(); 119 120 ComponentStateChangedReported atom = data.get(0).getAtom().getExtension( 121 PackagemanagerExtensionAtoms.componentStateChangedReported); 122 assertThat(atom.getUid()).isEqualTo( 123 PackageManagerStatsTestsBase.getAppUid(getDevice(), TEST_INSTALL_PACKAGE)); 124 assertThat(atom.getComponentOldState()).isEqualTo(COMPONENT_STATE_DEFAULT); 125 assertThat(atom.getComponentNewState()).isEqualTo(COMPONENT_STATE_ENABLED); 126 assertThat(atom.getIsLauncher()).isFalse(); 127 assertThat(atom.getIsForWholeApp()).isTrue(); 128 assertThat(atom.getCallingUid()).isEqualTo( 129 PackageManagerStatsTestsBase.getAppUid(getDevice(), HELPER_PACKAGE)); 130 } 131 132 @RequiresFlagsEnabled(FLAG_COMPONENT_STATE_CHANGED_METRICS) 133 @Test testComponentStateChangedReportedForLauncherActivity()134 public void testComponentStateChangedReportedForLauncherActivity() throws Throwable { 135 ConfigUtils.uploadConfigForPushedAtom(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG, 136 PackagemanagerExtensionAtoms.COMPONENT_STATE_CHANGED_REPORTED_FIELD_NUMBER); 137 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_SHORT); 138 139 ExtensionRegistry registry = ExtensionRegistry.newInstance(); 140 PackagemanagerExtensionAtoms.registerAllExtensions(registry); 141 142 installPackage(TEST_INSTALL_APK); 143 assertThat(getDevice().isPackageInstalled(TEST_INSTALL_PACKAGE, 144 String.valueOf(getDevice().getCurrentUser()))).isTrue(); 145 146 // Run test in CTS package 147 runDeviceTests(getDevice(), HELPER_PACKAGE, HELPER_CLASS, 148 TEST_METHOD_SET_COMPONENT_ENABLED_SETTING_FOR_LAUNCHER_ACTIVITY); 149 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_LONG); 150 151 List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice(), 152 registry); 153 assertThat(data).isNotNull(); 154 155 ComponentStateChangedReported atom = data.get(0).getAtom().getExtension( 156 PackagemanagerExtensionAtoms.componentStateChangedReported); 157 assertThat(atom.getUid()).isEqualTo( 158 PackageManagerStatsTestsBase.getAppUid(getDevice(), TEST_INSTALL_PACKAGE)); 159 assertThat(atom.getComponentOldState()).isEqualTo(COMPONENT_STATE_DEFAULT); 160 assertThat(atom.getComponentNewState()).isEqualTo(COMPONENT_STATE_ENABLED); 161 assertThat(atom.getIsLauncher()).isTrue(); 162 assertThat(atom.getIsForWholeApp()).isFalse(); 163 assertThat(atom.getCallingUid()).isEqualTo( 164 PackageManagerStatsTestsBase.getAppUid(getDevice(), HELPER_PACKAGE)); 165 } 166 167 @RequiresFlagsEnabled(FLAG_COMPONENT_STATE_CHANGED_METRICS) 168 @Test testComponentStateChangedReportedForNoLauncherActivity()169 public void testComponentStateChangedReportedForNoLauncherActivity() throws Throwable { 170 ConfigUtils.uploadConfigForPushedAtom(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG, 171 PackagemanagerExtensionAtoms.COMPONENT_STATE_CHANGED_REPORTED_FIELD_NUMBER); 172 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_SHORT); 173 174 ExtensionRegistry registry = ExtensionRegistry.newInstance(); 175 PackagemanagerExtensionAtoms.registerAllExtensions(registry); 176 177 installPackage(TEST_INSTALL_APK); 178 assertThat(getDevice().isPackageInstalled(TEST_INSTALL_PACKAGE, 179 String.valueOf(getDevice().getCurrentUser()))).isTrue(); 180 181 // Run test in CTS package 182 runDeviceTests(getDevice(), HELPER_PACKAGE, HELPER_CLASS, 183 TEST_METHOD_SET_COMPONENT_ENABLED_SETTING_FOR_NO_LAUNCHER_ACTIVITY); 184 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_LONG); 185 186 List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice(), 187 registry); 188 assertThat(data).isNotNull(); 189 190 ComponentStateChangedReported atom = data.get(0).getAtom().getExtension( 191 PackagemanagerExtensionAtoms.componentStateChangedReported); 192 assertThat(atom.getUid()).isEqualTo( 193 PackageManagerStatsTestsBase.getAppUid(getDevice(), TEST_INSTALL_PACKAGE)); 194 assertThat(atom.getComponentOldState()).isEqualTo(COMPONENT_STATE_DEFAULT); 195 assertThat(atom.getComponentNewState()).isEqualTo(COMPONENT_STATE_ENABLED); 196 assertThat(atom.getIsLauncher()).isFalse(); 197 assertThat(atom.getIsForWholeApp()).isFalse(); 198 assertThat(atom.getCallingUid()).isEqualTo( 199 PackageManagerStatsTestsBase.getAppUid(getDevice(), HELPER_PACKAGE)); 200 } 201 202 @RequiresFlagsEnabled(FLAG_COMPONENT_STATE_CHANGED_METRICS) 203 @Test testComponentStateChangedReportedEnabledThenDisabled()204 public void testComponentStateChangedReportedEnabledThenDisabled() throws Throwable { 205 ConfigUtils.uploadConfigForPushedAtom(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG, 206 PackagemanagerExtensionAtoms.COMPONENT_STATE_CHANGED_REPORTED_FIELD_NUMBER); 207 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_SHORT); 208 209 ExtensionRegistry registry = ExtensionRegistry.newInstance(); 210 PackagemanagerExtensionAtoms.registerAllExtensions(registry); 211 212 installPackage(TEST_INSTALL_APK); 213 assertThat(getDevice().isPackageInstalled(TEST_INSTALL_PACKAGE, 214 String.valueOf(getDevice().getCurrentUser()))).isTrue(); 215 216 // Run test in CTS package 217 runDeviceTests(getDevice(), HELPER_PACKAGE, HELPER_CLASS, 218 TEST_METHOD_SET_COMPONENT_ENABLED_SETTING_ENABLED_THEN_DISABLED); 219 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_LONG); 220 221 List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice(), 222 registry); 223 assertThat(data.size()).isEqualTo(2); 224 225 ComponentStateChangedReported atom1 = data.get(0).getAtom().getExtension( 226 PackagemanagerExtensionAtoms.componentStateChangedReported); 227 assertThat(atom1.getUid()).isEqualTo( 228 PackageManagerStatsTestsBase.getAppUid(getDevice(), TEST_INSTALL_PACKAGE)); 229 assertThat(atom1.getComponentOldState()).isEqualTo(COMPONENT_STATE_DEFAULT); 230 assertThat(atom1.getComponentNewState()).isEqualTo(COMPONENT_STATE_ENABLED); 231 assertThat(atom1.getIsLauncher()).isFalse(); 232 assertThat(atom1.getIsForWholeApp()).isFalse(); 233 assertThat(atom1.getCallingUid()).isEqualTo( 234 PackageManagerStatsTestsBase.getAppUid(getDevice(), HELPER_PACKAGE)); 235 236 ComponentStateChangedReported atom2 = data.get(1).getAtom().getExtension( 237 PackagemanagerExtensionAtoms.componentStateChangedReported); 238 assertThat(atom2.getUid()).isEqualTo( 239 PackageManagerStatsTestsBase.getAppUid(getDevice(), TEST_INSTALL_PACKAGE)); 240 assertThat(atom2.getComponentOldState()).isEqualTo(COMPONENT_STATE_ENABLED); 241 assertThat(atom2.getComponentNewState()).isEqualTo(COMPONENT_STATE_DISABLED); 242 assertThat(atom2.getIsLauncher()).isFalse(); 243 assertThat(atom2.getIsForWholeApp()).isFalse(); 244 assertThat(atom2.getCallingUid()).isEqualTo( 245 PackageManagerStatsTestsBase.getAppUid(getDevice(), HELPER_PACKAGE)); 246 } 247 248 @RequiresFlagsEnabled(FLAG_COMPONENT_STATE_CHANGED_METRICS) 249 @Test testComponentStateChangedReportedEnabledThenDisabledWholeApp()250 public void testComponentStateChangedReportedEnabledThenDisabledWholeApp() throws Throwable { 251 ConfigUtils.uploadConfigForPushedAtom(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG, 252 PackagemanagerExtensionAtoms.COMPONENT_STATE_CHANGED_REPORTED_FIELD_NUMBER); 253 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_SHORT); 254 255 ExtensionRegistry registry = ExtensionRegistry.newInstance(); 256 PackagemanagerExtensionAtoms.registerAllExtensions(registry); 257 258 installPackage(TEST_INSTALL_APK); 259 assertThat(getDevice().isPackageInstalled(TEST_INSTALL_PACKAGE, 260 String.valueOf(getDevice().getCurrentUser()))).isTrue(); 261 262 // Run test in CTS package 263 runDeviceTests(getDevice(), HELPER_PACKAGE, HELPER_CLASS, 264 TEST_METHOD_SET_APPLICATION_ENABLED_THEN_DISABLED); 265 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_LONG); 266 267 List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice(), 268 registry); 269 assertThat(data.size()).isEqualTo(2); 270 271 ComponentStateChangedReported atom1 = data.get(0).getAtom().getExtension( 272 PackagemanagerExtensionAtoms.componentStateChangedReported); 273 assertThat(atom1.getUid()).isEqualTo( 274 PackageManagerStatsTestsBase.getAppUid(getDevice(), TEST_INSTALL_PACKAGE)); 275 assertThat(atom1.getComponentOldState()).isEqualTo(COMPONENT_STATE_DEFAULT); 276 assertThat(atom1.getComponentNewState()).isEqualTo(COMPONENT_STATE_ENABLED); 277 assertThat(atom1.getIsLauncher()).isFalse(); 278 assertThat(atom1.getIsForWholeApp()).isTrue(); 279 assertThat(atom1.getCallingUid()).isEqualTo( 280 PackageManagerStatsTestsBase.getAppUid(getDevice(), HELPER_PACKAGE)); 281 282 ComponentStateChangedReported atom2 = data.get(1).getAtom().getExtension( 283 PackagemanagerExtensionAtoms.componentStateChangedReported); 284 assertThat(atom2.getUid()).isEqualTo( 285 PackageManagerStatsTestsBase.getAppUid(getDevice(), TEST_INSTALL_PACKAGE)); 286 assertThat(atom2.getComponentOldState()).isEqualTo(COMPONENT_STATE_ENABLED); 287 assertThat(atom2.getComponentNewState()).isEqualTo(COMPONENT_STATE_DISABLED); 288 assertThat(atom2.getIsLauncher()).isFalse(); 289 assertThat(atom2.getIsForWholeApp()).isTrue(); 290 assertThat(atom2.getCallingUid()).isEqualTo( 291 PackageManagerStatsTestsBase.getAppUid(getDevice(), HELPER_PACKAGE)); 292 } 293 294 @RequiresFlagsEnabled(FLAG_COMPONENT_STATE_CHANGED_METRICS) 295 @Test testComponentStateChangedReportedForTwoDifferentStateLauncherActivities()296 public void testComponentStateChangedReportedForTwoDifferentStateLauncherActivities() 297 throws Throwable { 298 ConfigUtils.uploadConfigForPushedAtom(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG, 299 PackagemanagerExtensionAtoms.COMPONENT_STATE_CHANGED_REPORTED_FIELD_NUMBER); 300 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_SHORT); 301 302 ExtensionRegistry registry = ExtensionRegistry.newInstance(); 303 PackagemanagerExtensionAtoms.registerAllExtensions(registry); 304 305 installPackage(TEST_INSTALL_APK); 306 assertThat(getDevice().isPackageInstalled(TEST_INSTALL_PACKAGE, 307 String.valueOf(getDevice().getCurrentUser()))).isTrue(); 308 309 // Run test in CTS package 310 runDeviceTests(getDevice(), HELPER_PACKAGE, HELPER_CLASS, 311 TEST_METHOD_SET_COMPONENT_ENABLED_SETTING_TWO_LAUNCHER_ACTIVITIES); 312 RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_LONG); 313 314 List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(getDevice(), 315 registry); 316 assertThat(data.size()).isEqualTo(2); 317 318 ComponentStateChangedReported atom1 = data.get(0).getAtom().getExtension( 319 PackagemanagerExtensionAtoms.componentStateChangedReported); 320 assertThat(atom1.getUid()).isEqualTo( 321 PackageManagerStatsTestsBase.getAppUid(getDevice(), TEST_INSTALL_PACKAGE)); 322 assertThat(atom1.getComponentOldState()).isEqualTo(COMPONENT_STATE_DEFAULT); 323 assertThat(atom1.getComponentNewState()).isEqualTo(COMPONENT_STATE_DISABLED); 324 assertThat(atom1.getIsLauncher()).isTrue(); 325 assertThat(atom1.getIsForWholeApp()).isFalse(); 326 assertThat(atom1.getCallingUid()).isEqualTo( 327 PackageManagerStatsTestsBase.getAppUid(getDevice(), HELPER_PACKAGE)); 328 329 ComponentStateChangedReported atom2 = data.get(1).getAtom().getExtension( 330 PackagemanagerExtensionAtoms.componentStateChangedReported); 331 assertThat(atom2.getUid()).isEqualTo( 332 PackageManagerStatsTestsBase.getAppUid(getDevice(), TEST_INSTALL_PACKAGE)); 333 assertThat(atom2.getComponentOldState()).isEqualTo(COMPONENT_STATE_DEFAULT); 334 assertThat(atom2.getComponentNewState()).isEqualTo(COMPONENT_STATE_ENABLED); 335 assertThat(atom2.getIsLauncher()).isTrue(); 336 assertThat(atom2.getIsForWholeApp()).isFalse(); 337 assertThat(atom2.getCallingUid()).isEqualTo( 338 PackageManagerStatsTestsBase.getAppUid(getDevice(), HELPER_PACKAGE)); 339 } 340 } 341