1 /* 2 * Copyright (C) 2018 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.server.backup.testing; 18 19 import static org.mockito.Mockito.mock; 20 import static org.mockito.Mockito.when; 21 22 import android.app.Application; 23 import android.app.IActivityManager; 24 import android.content.Context; 25 import android.content.pm.PackageManager; 26 import android.os.HandlerThread; 27 import android.os.Looper; 28 import android.os.PowerManager; 29 import android.util.SparseArray; 30 31 import com.android.server.backup.BackupAgentTimeoutParameters; 32 import com.android.server.backup.BackupManagerService; 33 import com.android.server.backup.TransportManager; 34 import com.android.server.backup.internal.BackupHandler; 35 36 import java.lang.Thread.UncaughtExceptionHandler; 37 38 /** Test utils for {@link BackupManagerService} and friends. */ 39 public class BackupManagerServiceTestUtils { 40 /** Sets up basic mocks for {@link BackupManagerService}. */ setUpBackupManagerServiceBasics( BackupManagerService backupManagerService, Context context, TransportManager transportManager, PackageManager packageManager, BackupHandler backupHandler, PowerManager.WakeLock wakeLock, BackupAgentTimeoutParameters agentTimeoutParameters)41 public static void setUpBackupManagerServiceBasics( 42 BackupManagerService backupManagerService, 43 Context context, 44 TransportManager transportManager, 45 PackageManager packageManager, 46 BackupHandler backupHandler, 47 PowerManager.WakeLock wakeLock, 48 BackupAgentTimeoutParameters agentTimeoutParameters) { 49 when(backupManagerService.getContext()).thenReturn(context); 50 when(backupManagerService.getTransportManager()).thenReturn(transportManager); 51 when(backupManagerService.getPackageManager()).thenReturn(packageManager); 52 when(backupManagerService.getBackupHandler()).thenReturn(backupHandler); 53 when(backupManagerService.getCurrentOpLock()).thenReturn(new Object()); 54 when(backupManagerService.getQueueLock()).thenReturn(new Object()); 55 when(backupManagerService.getCurrentOperations()).thenReturn(new SparseArray<>()); 56 when(backupManagerService.getActivityManager()).thenReturn(mock(IActivityManager.class)); 57 when(backupManagerService.getWakelock()).thenReturn(wakeLock); 58 when(backupManagerService.getAgentTimeoutParameters()).thenReturn(agentTimeoutParameters); 59 } 60 createBackupWakeLock(Application application)61 public static PowerManager.WakeLock createBackupWakeLock(Application application) { 62 PowerManager powerManager = 63 (PowerManager) application.getSystemService(Context.POWER_SERVICE); 64 return powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*backup*"); 65 } 66 67 /** 68 * Creates a backup thread associated with a looper, starts it and returns its looper for 69 * shadowing and creation of the backup handler. 70 * 71 * <p>Note that Robolectric simulates multi-thread in a single-thread to avoid flakiness, so 72 * even though we started the thread, you should control its execution via the shadow of the 73 * looper returned. 74 * 75 * @return The {@link Looper} for the backup thread. 76 */ startBackupThreadAndGetLooper()77 public static Looper startBackupThreadAndGetLooper() { 78 HandlerThread backupThread = new HandlerThread("backup"); 79 backupThread.start(); 80 return backupThread.getLooper(); 81 } 82 83 /** 84 * Similar to {@link #startBackupThreadAndGetLooper()} but with a custom exception handler and 85 * returning the thread instead of the looper associated with it. 86 * 87 * @param exceptionHandler Uncaught exception handler for backup thread. 88 * @return The backup thread. 89 * @see #startBackupThreadAndGetLooper() 90 */ startBackupThread(UncaughtExceptionHandler exceptionHandler)91 public static HandlerThread startBackupThread(UncaughtExceptionHandler exceptionHandler) { 92 HandlerThread backupThread = new HandlerThread("backup"); 93 backupThread.setUncaughtExceptionHandler(exceptionHandler); 94 backupThread.start(); 95 return backupThread; 96 } 97 BackupManagerServiceTestUtils()98 private BackupManagerServiceTestUtils() {} 99 } 100