1 /* 2 * Copyright (C) 2023 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.wallpaperbackup; 18 19 import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_IMG_LOCK; 20 import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_IMG_SYSTEM; 21 import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_LIVE_LOCK; 22 import static com.android.wallpaperbackup.WallpaperEventLogger.WALLPAPER_LIVE_SYSTEM; 23 24 import static com.google.common.truth.Truth.assertThat; 25 26 import static org.junit.Assert.assertEquals; 27 import static org.mockito.ArgumentMatchers.any; 28 import static org.mockito.Mockito.when; 29 30 import android.app.WallpaperInfo; 31 import android.app.backup.BackupAnnotations; 32 import android.app.backup.BackupManager; 33 import android.app.backup.BackupRestoreEventLogger; 34 import android.content.Context; 35 import android.content.Intent; 36 import android.content.pm.PackageManager; 37 import android.content.pm.ResolveInfo; 38 import android.service.wallpaper.WallpaperService; 39 40 import androidx.test.InstrumentationRegistry; 41 import androidx.test.runner.AndroidJUnit4; 42 43 import org.junit.Before; 44 import org.junit.Test; 45 import org.junit.runner.RunWith; 46 import org.mockito.Mock; 47 import org.mockito.MockitoAnnotations; 48 49 import java.util.List; 50 51 @RunWith(AndroidJUnit4.class) 52 public class WallpaperEventLoggerTest { 53 54 private BackupRestoreEventLogger mEventLogger; 55 56 @Mock 57 private BackupManager mMockBackupManager; 58 59 @Mock 60 private WallpaperBackupAgent mMockBackupAgent; 61 62 private static final String WALLPAPER_ERROR = "some_error"; 63 64 private WallpaperEventLogger mWallpaperEventLogger; 65 private WallpaperInfo mWallpaperInfo; 66 67 @Before setUp()68 public void setUp() throws Exception { 69 MockitoAnnotations.initMocks(this); 70 71 when(mMockBackupAgent.getBackupRestoreEventLogger()).thenReturn(mEventLogger); 72 when(mMockBackupManager.getBackupRestoreEventLogger(any())).thenReturn(mEventLogger); 73 74 mWallpaperInfo = getWallpaperInfo(); 75 mWallpaperEventLogger = new WallpaperEventLogger(mMockBackupManager, mMockBackupAgent); 76 } 77 78 @Test onSystemImgWallpaperBackedUp_logsSuccess()79 public void onSystemImgWallpaperBackedUp_logsSuccess() { 80 setUpLoggerForBackup(); 81 82 mWallpaperEventLogger.onSystemImageWallpaperBackedUp(); 83 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 84 85 assertThat(result).isNotNull(); 86 assertThat(result.getSuccessCount()).isEqualTo(1); 87 } 88 89 @Test onLockImgWallpaperBackedUp_logsSuccess()90 public void onLockImgWallpaperBackedUp_logsSuccess() { 91 setUpLoggerForBackup(); 92 93 mWallpaperEventLogger.onLockImageWallpaperBackedUp(); 94 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK); 95 96 assertThat(result).isNotNull(); 97 assertThat(result.getSuccessCount()).isEqualTo(1); 98 } 99 100 @Test onSystemLiveWallpaperBackedUp_logsSuccess()101 public void onSystemLiveWallpaperBackedUp_logsSuccess() { 102 setUpLoggerForBackup(); 103 104 mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo); 105 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM); 106 107 assertThat(result).isNotNull(); 108 assertThat(result.getSuccessCount()).isEqualTo(1); 109 } 110 111 @Test onLockLiveWallpaperBackedUp_logsSuccess()112 public void onLockLiveWallpaperBackedUp_logsSuccess() { 113 setUpLoggerForBackup(); 114 115 mWallpaperEventLogger.onLockLiveWallpaperBackedUp(mWallpaperInfo); 116 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK); 117 118 assertThat(result).isNotNull(); 119 assertThat(result.getSuccessCount()).isEqualTo(1); 120 } 121 122 @Test onImgWallpaperBackedUp_nullInfo_doesNotLogMetadata()123 public void onImgWallpaperBackedUp_nullInfo_doesNotLogMetadata() { 124 setUpLoggerForBackup(); 125 126 mWallpaperEventLogger.onSystemImageWallpaperBackedUp(); 127 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 128 129 assertThat(result).isNotNull(); 130 assertThat(result.getMetadataHash()).isNull(); 131 } 132 133 134 @Test onLiveWallpaperBackedUp_logsMetadata()135 public void onLiveWallpaperBackedUp_logsMetadata() { 136 setUpLoggerForBackup(); 137 138 mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo); 139 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM); 140 141 assertThat(result).isNotNull(); 142 assertThat(result.getMetadataHash()).isNotNull(); 143 } 144 145 146 @Test onSystemImgWallpaperBackupFailed_logsFail()147 public void onSystemImgWallpaperBackupFailed_logsFail() { 148 setUpLoggerForBackup(); 149 150 mWallpaperEventLogger.onSystemImageWallpaperBackupFailed(WALLPAPER_ERROR); 151 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 152 153 assertThat(result).isNotNull(); 154 assertThat(result.getFailCount()).isEqualTo(1); 155 assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR); 156 } 157 158 @Test onLockImgWallpaperBackupFailed_logsFail()159 public void onLockImgWallpaperBackupFailed_logsFail() { 160 setUpLoggerForBackup(); 161 162 mWallpaperEventLogger.onLockImageWallpaperBackupFailed(WALLPAPER_ERROR); 163 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK); 164 165 assertThat(result).isNotNull(); 166 assertThat(result.getFailCount()).isEqualTo(1); 167 assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR); 168 } 169 170 171 @Test onSystemLiveWallpaperBackupFailed_logsFail()172 public void onSystemLiveWallpaperBackupFailed_logsFail() { 173 setUpLoggerForBackup(); 174 175 mWallpaperEventLogger.onSystemLiveWallpaperBackupFailed(WALLPAPER_ERROR); 176 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM); 177 178 assertThat(result).isNotNull(); 179 assertThat(result.getFailCount()).isEqualTo(1); 180 assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR); 181 } 182 183 @Test onLockLiveWallpaperBackupFailed_logsFail()184 public void onLockLiveWallpaperBackupFailed_logsFail() { 185 setUpLoggerForBackup(); 186 187 mWallpaperEventLogger.onLockLiveWallpaperBackupFailed(WALLPAPER_ERROR); 188 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK); 189 190 assertThat(result).isNotNull(); 191 assertThat(result.getFailCount()).isEqualTo(1); 192 assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR); 193 } 194 195 196 @Test onWallpaperBackupException_someProcessed_doesNotLogErrorForProcessedType()197 public void onWallpaperBackupException_someProcessed_doesNotLogErrorForProcessedType() { 198 setUpLoggerForBackup(); 199 mWallpaperEventLogger.onSystemImageWallpaperBackedUp(); 200 201 mWallpaperEventLogger.onBackupException(new Exception()); 202 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 203 204 assertThat(result).isNotNull(); 205 assertThat(result.getFailCount()).isEqualTo(0); 206 } 207 208 209 @Test onWallpaperBackupException_someProcessed_logsErrorForUnprocessedType()210 public void onWallpaperBackupException_someProcessed_logsErrorForUnprocessedType() { 211 setUpLoggerForBackup(); 212 mWallpaperEventLogger.onSystemImageWallpaperBackedUp(); 213 214 mWallpaperEventLogger.onBackupException(new Exception()); 215 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK); 216 217 assertThat(result).isNotNull(); 218 assertThat(result.getFailCount()).isEqualTo(1); 219 } 220 221 @Test onWallpaperBackupException_liveTypeProcessed_doesNotLogForSameImgType()222 public void onWallpaperBackupException_liveTypeProcessed_doesNotLogForSameImgType() { 223 setUpLoggerForBackup(); 224 mWallpaperEventLogger.onSystemLiveWallpaperBackedUp(mWallpaperInfo); 225 226 mWallpaperEventLogger.onBackupException(new Exception()); 227 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 228 229 assertThat(result).isNull(); 230 } 231 232 @Test onSystemImgWallpaperRestored_logsSuccess()233 public void onSystemImgWallpaperRestored_logsSuccess() { 234 setUpLoggerForRestore(); 235 236 mWallpaperEventLogger.onSystemImageWallpaperRestored(); 237 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 238 239 assertThat(result).isNotNull(); 240 assertThat(result.getSuccessCount()).isEqualTo(1); 241 } 242 243 @Test onLockImgWallpaperRestored_logsSuccess()244 public void onLockImgWallpaperRestored_logsSuccess() { 245 setUpLoggerForRestore(); 246 247 mWallpaperEventLogger.onLockImageWallpaperRestored(); 248 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK); 249 250 assertThat(result).isNotNull(); 251 assertThat(result.getSuccessCount()).isEqualTo(1); 252 } 253 254 @Test onSystemLiveWallpaperRestored_logsSuccess()255 public void onSystemLiveWallpaperRestored_logsSuccess() { 256 setUpLoggerForRestore(); 257 258 mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent()); 259 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM); 260 261 assertThat(result).isNotNull(); 262 assertThat(result.getSuccessCount()).isEqualTo(1); 263 } 264 265 @Test onLockLiveWallpaperRestored_logsSuccess()266 public void onLockLiveWallpaperRestored_logsSuccess() { 267 setUpLoggerForRestore(); 268 269 mWallpaperEventLogger.onLockLiveWallpaperRestored(mWallpaperInfo.getComponent()); 270 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK); 271 272 assertThat(result).isNotNull(); 273 assertThat(result.getSuccessCount()).isEqualTo(1); 274 } 275 276 @Test onImgWallpaperRestored_nullInfo_doesNotLogMetadata()277 public void onImgWallpaperRestored_nullInfo_doesNotLogMetadata() { 278 setUpLoggerForRestore(); 279 280 mWallpaperEventLogger.onSystemImageWallpaperRestored(); 281 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 282 283 assertThat(result).isNotNull(); 284 assertThat(result.getMetadataHash()).isNull(); 285 } 286 287 288 @Test onLiveWallpaperRestored_logsMetadata()289 public void onLiveWallpaperRestored_logsMetadata() { 290 setUpLoggerForRestore(); 291 292 mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent()); 293 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM); 294 295 assertThat(result).isNotNull(); 296 assertThat(result.getMetadataHash()).isNotNull(); 297 } 298 299 300 @Test onSystemImgWallpaperRestoreFailed_logsFail()301 public void onSystemImgWallpaperRestoreFailed_logsFail() { 302 setUpLoggerForRestore(); 303 304 mWallpaperEventLogger.onSystemImageWallpaperRestoreFailed(WALLPAPER_ERROR); 305 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 306 307 assertThat(result).isNotNull(); 308 assertThat(result.getFailCount()).isEqualTo(1); 309 assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR); 310 } 311 312 @Test onLockImgWallpaperRestoreFailed_logsFail()313 public void onLockImgWallpaperRestoreFailed_logsFail() { 314 setUpLoggerForRestore(); 315 316 mWallpaperEventLogger.onLockImageWallpaperRestoreFailed(WALLPAPER_ERROR); 317 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK); 318 319 assertThat(result).isNotNull(); 320 assertThat(result.getFailCount()).isEqualTo(1); 321 assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR); 322 } 323 324 325 @Test onSystemLiveWallpaperRestoreFailed_logsFail()326 public void onSystemLiveWallpaperRestoreFailed_logsFail() { 327 setUpLoggerForRestore(); 328 329 mWallpaperEventLogger.onSystemLiveWallpaperRestoreFailed(WALLPAPER_ERROR); 330 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_SYSTEM); 331 332 assertThat(result).isNotNull(); 333 assertThat(result.getFailCount()).isEqualTo(1); 334 assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR); 335 } 336 337 @Test onLockLiveWallpaperRestoreFailed_logsFail()338 public void onLockLiveWallpaperRestoreFailed_logsFail() { 339 setUpLoggerForRestore(); 340 341 mWallpaperEventLogger.onLockLiveWallpaperRestoreFailed(WALLPAPER_ERROR); 342 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_LIVE_LOCK); 343 344 assertThat(result).isNotNull(); 345 assertThat(result.getFailCount()).isEqualTo(1); 346 assertThat(result.getErrors()).containsKey(WALLPAPER_ERROR); 347 } 348 349 350 @Test onWallpaperRestoreException_someProcessed_doesNotLogErrorForProcessedType()351 public void onWallpaperRestoreException_someProcessed_doesNotLogErrorForProcessedType() { 352 setUpLoggerForRestore(); 353 mWallpaperEventLogger.onSystemImageWallpaperRestored(); 354 355 mWallpaperEventLogger.onRestoreException(new Exception()); 356 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 357 358 assertThat(result).isNotNull(); 359 assertThat(result.getFailCount()).isEqualTo(0); 360 } 361 362 363 @Test onWallpaperRestoreException_someProcessed_logsErrorForUnprocessedType()364 public void onWallpaperRestoreException_someProcessed_logsErrorForUnprocessedType() { 365 setUpLoggerForRestore(); 366 mWallpaperEventLogger.onSystemImageWallpaperRestored(); 367 368 mWallpaperEventLogger.onRestoreException(new Exception()); 369 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_LOCK); 370 371 assertThat(result).isNotNull(); 372 assertThat(result.getFailCount()).isEqualTo(1); 373 } 374 375 @Test onWallpaperRestoreException_liveTypeProcessed_doesNotLogForSameImgType()376 public void onWallpaperRestoreException_liveTypeProcessed_doesNotLogForSameImgType() { 377 setUpLoggerForRestore(); 378 mWallpaperEventLogger.onSystemLiveWallpaperRestored(mWallpaperInfo.getComponent()); 379 380 mWallpaperEventLogger.onRestoreException(new Exception()); 381 BackupRestoreEventLogger.DataTypeResult result = getLogsForType(WALLPAPER_IMG_SYSTEM); 382 383 assertThat(result).isNull(); 384 } 385 getLogsForType(String dataType)386 private BackupRestoreEventLogger.DataTypeResult getLogsForType(String dataType) { 387 for (BackupRestoreEventLogger.DataTypeResult result : mEventLogger.getLoggingResults()) { 388 if ((result.getDataType()).equals(dataType)) { 389 return result; 390 } 391 } 392 return null; 393 } 394 setUpLoggerForBackup()395 private void setUpLoggerForBackup() { 396 mEventLogger = new BackupRestoreEventLogger(BackupAnnotations.OperationType.BACKUP); 397 createEventLogger(); 398 } 399 setUpLoggerForRestore()400 private void setUpLoggerForRestore() { 401 mEventLogger = new BackupRestoreEventLogger(BackupAnnotations.OperationType.RESTORE); 402 createEventLogger(); 403 } 404 createEventLogger()405 private void createEventLogger() { 406 when(mMockBackupAgent.getBackupRestoreEventLogger()).thenReturn(mEventLogger); 407 when(mMockBackupManager.getBackupRestoreEventLogger(any())).thenReturn(mEventLogger); 408 409 mWallpaperEventLogger = new WallpaperEventLogger(mMockBackupManager, mMockBackupAgent); 410 } 411 412 getWallpaperInfo()413 private WallpaperInfo getWallpaperInfo() throws Exception { 414 Context context = InstrumentationRegistry.getTargetContext(); 415 Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE); 416 intent.setPackage("com.android.wallpaperbackup.tests"); 417 PackageManager pm = context.getPackageManager(); 418 List<ResolveInfo> result = pm.queryIntentServices(intent, PackageManager.GET_META_DATA); 419 assertEquals(1, result.size()); 420 ResolveInfo info = result.get(0); 421 return new WallpaperInfo(context, info); 422 } 423 } 424