blob: b495220e615c5a20a50b05bbfac262657d580eeb [file] [log] [blame]
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.car.test.mocks;
import static android.car.test.mocks.AndroidMockitoHelper.mockAmGetCurrentUser;
import static android.car.test.mocks.AndroidMockitoHelper.mockBinderGetCallingUserHandle;
import static android.car.test.mocks.AndroidMockitoHelper.mockContextGetService;
import static android.car.test.mocks.AndroidMockitoHelper.mockQueryService;
import static android.car.test.mocks.AndroidMockitoHelper.mockSmGetService;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmCreateUser;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetAliveUsers;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetSystemUser;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUserHandles;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUserInfo;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmIsHeadlessSystemUserMode;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmIsUserRunning;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmRemoveUserOrSetEphemeral;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import android.app.ActivityManager;
import android.app.Service;
import android.car.test.util.UserTestingHelper;
import android.car.test.util.Visitor;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.os.Binder;
import android.os.IBinder;
import android.os.IInterface;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
import com.android.dx.mockito.inline.extended.StaticMockitoSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.quality.Strictness;
public final class AndroidMockitoHelperTest {
private static final int TEST_USER_ID = 100;
private UserInfo mTestUser;
private StaticMockitoSession mMockSession;
@Mock private UserManager mMockedUserManager;
@Before
public void setUp() {
mMockSession = mockitoSession()
.initMocks(this)
.strictness(Strictness.LENIENT)
.spyStatic(UserManager.class)
.spyStatic(ActivityManager.class)
.spyStatic(ServiceManager.class)
.spyStatic(Binder.class)
.startMocking();
mTestUser = mockUmCreateUser(mMockedUserManager, "testUser",
UserManager.USER_TYPE_FULL_SYSTEM, UserInfo.FLAG_ADMIN, TEST_USER_ID);
}
@After
public void tearDown() {
mMockSession.finishMocking();
}
@Test
public void testMockUmCreateUser() {
assertThat(mMockedUserManager.createUser(mTestUser.name, mTestUser.userType,
mTestUser.flags).getUserHandle()).isEqualTo(mTestUser.getUserHandle());
}
@Test
public void testMockAmGetCurrentUser() {
mockAmGetCurrentUser(UserHandle.USER_NULL);
assertThat(ActivityManager.getCurrentUser()).isEqualTo(UserHandle.USER_NULL);
}
@Test
public void testMockUmIsHeadlessSystemUserMode_true() {
mockUmIsHeadlessSystemUserMode(/* mode= */ true);
assertThat(UserManager.isHeadlessSystemUserMode()).isTrue();
}
@Test
public void testMockUmIsHeadlessSystemUserMode_false() {
mockUmIsHeadlessSystemUserMode(/* mode= */ false);
assertThat(UserManager.isHeadlessSystemUserMode()).isFalse();
}
@Test
public void testMockUmGetUserInfo() {
mockUmGetUserInfo(mMockedUserManager, mTestUser);
assertThat(mMockedUserManager.getUserInfo(TEST_USER_ID)).isSameInstanceAs(mTestUser);
}
@Test
public void testMockUmGetSystemUser() {
mockUmGetSystemUser(mMockedUserManager);
UserInfo expectedUser = new UserTestingHelper.UserInfoBuilder(UserHandle.USER_SYSTEM)
.setFlags(UserInfo.FLAG_SYSTEM).build();
assertThat(
mMockedUserManager.getUserInfo(UserHandle.USER_SYSTEM).getUserHandle()).isEqualTo(
expectedUser.getUserHandle());
}
@Test
public void testMockUmIsUserRunning_running() {
mockUmIsUserRunning(mMockedUserManager, TEST_USER_ID, /* isRunning= */ true);
assertThat(mMockedUserManager.isUserRunning(TEST_USER_ID)).isTrue();
}
@Test
public void testMockUmIsUserRunning_notRunning() {
mockUmIsUserRunning(mMockedUserManager, TEST_USER_ID, /* isRunning= */ false);
assertThat(mMockedUserManager.isUserRunning(TEST_USER_ID)).isFalse();
}
@Test
public void testMockUmGetAliveUsers() {
UserInfo user1 = mMockedUserManager.createUser("test1",
UserManager.USER_TYPE_FULL_SECONDARY, UserInfo.FLAG_ADMIN);
UserInfo user2 = mMockedUserManager.createUser("test2", UserManager.USER_TYPE_FULL_GUEST,
UserInfo.FLAG_EPHEMERAL);
mockUmGetAliveUsers(mMockedUserManager, user1, user2);
assertThat(mMockedUserManager.getAliveUsers()).containsExactly(user1, user2);
}
@Test
public void testMockUmGetUserHandles() {
UserHandle user1 = UserHandle.of(100);
UserHandle user2 = UserHandle.of(200);
mockUmGetUserHandles(mMockedUserManager, true, 100, 200);
assertThat(mMockedUserManager.getUserHandles(true)).containsExactly(user1, user2).inOrder();
}
@Test
public void testMockBinderGetCallingUserHandle() {
mockBinderGetCallingUserHandle(TEST_USER_ID);
assertThat(Binder.getCallingUserHandle()).isEqualTo(UserHandle.of(TEST_USER_ID));
}
@Test
public void testMockSmGetService() {
IBinder someBinder = mock(IBinder.class);
mockSmGetService("someServiceName", someBinder);
assertThat(ServiceManager.getService("someServiceName")).isEqualTo(someBinder);
}
@Test
public void testMockQueryService() {
IInterface someService = mock(IInterface.class);
IBinder someBinder = mock(IBinder.class);
mockQueryService("someServiceName", someBinder, someService);
assertThat(ServiceManager.getService("someServiceName")).isEqualTo(someBinder);
assertThat(someBinder.queryLocalInterface("anyString")).isEqualTo(someService);
}
@Test
public void testMockUmRemoveUserOrSetEphemeral() {
VisitorImpl<UserInfo> visitor = new VisitorImpl<>();
mockUmRemoveUserOrSetEphemeral(mMockedUserManager, mTestUser,
/* evenWhenDisallowed= */ true, /* result= */ 1, visitor);
mMockedUserManager.removeUserOrSetEphemeral(TEST_USER_ID, /* evenWhenDisallowed= */ true);
assertThat(visitor.mVisited).isEqualTo(mTestUser);
}
private static final class VisitorImpl<T> implements Visitor<T> {
T mVisited;
@Override
public void visit(T visited) {
mVisited = visited;
}
}
@Test
public void testMockContextGetService() {
Context context = mock(Context.class);
Service someService = mock(Service.class);
mockContextGetService(context, Service.class, someService);
assertThat(context.getSystemService(Service.class)).isEqualTo(someService);
}
@Test
public void testMockContextGetService_PackageManager() {
Context context = mock(Context.class);
PackageManager packageManager = mock(PackageManager.class);
mockContextGetService(context, PackageManager.class, packageManager);
assertThat(context.getPackageManager()).isEqualTo(packageManager);
}
}