1 /* 2 * Copyright (C) 2021 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.bedstead.nene.users; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.testng.Assert.assertThrows; 22 23 import com.android.bedstead.nene.TestApis; 24 25 import org.junit.Ignore; 26 import org.junit.Test; 27 import org.junit.runner.RunWith; 28 import org.junit.runners.JUnit4; 29 30 @RunWith(JUnit4.class) 31 public class UserTest { 32 33 private static final int NON_EXISTING_USER_ID = 10000; 34 private static final int USER_ID = NON_EXISTING_USER_ID; 35 private static final int SERIAL_NO = 1000; 36 private static final UserType USER_TYPE = new UserType(new UserType.MutableUserType()); 37 private static final String USER_NAME = "userName"; 38 39 private final TestApis mTestApis = new TestApis(); 40 41 @Test id_returnsId()42 public void id_returnsId() { 43 User.MutableUser mutableUser = createValidMutableUser(); 44 mutableUser.mId = USER_ID; 45 User user = new User(mTestApis, mutableUser); 46 47 assertThat(user.id()).isEqualTo(USER_ID); 48 } 49 50 @Test construct_idNotSet_throwsNullPointerException()51 public void construct_idNotSet_throwsNullPointerException() { 52 User.MutableUser mutableUser = createValidMutableUser(); 53 mutableUser.mId = null; 54 55 assertThrows(NullPointerException.class, () -> new User(mTestApis, mutableUser)); 56 } 57 58 @Test serialNo_returnsSerialNo()59 public void serialNo_returnsSerialNo() { 60 User.MutableUser mutableUser = createValidMutableUser(); 61 mutableUser.mSerialNo = SERIAL_NO; 62 User user = new User(mTestApis, mutableUser); 63 64 assertThat(user.serialNo()).isEqualTo(SERIAL_NO); 65 } 66 67 @Test serialNo_notSet_returnsNull()68 public void serialNo_notSet_returnsNull() { 69 User.MutableUser mutableUser = createValidMutableUser(); 70 User user = new User(mTestApis, mutableUser); 71 72 assertThat(user.serialNo()).isNull(); 73 } 74 75 @Test name_returnsName()76 public void name_returnsName() { 77 User.MutableUser mutableUser = createValidMutableUser(); 78 mutableUser.mName = USER_NAME; 79 User user = new User(mTestApis, mutableUser); 80 81 assertThat(user.name()).isEqualTo(USER_NAME); 82 } 83 84 @Test name_notSet_returnsNull()85 public void name_notSet_returnsNull() { 86 User.MutableUser mutableUser = createValidMutableUser(); 87 User user = new User(mTestApis, mutableUser); 88 89 assertThat(user.name()).isNull(); 90 } 91 92 @Test type_returnsName()93 public void type_returnsName() { 94 User.MutableUser mutableUser = createValidMutableUser(); 95 mutableUser.mType = USER_TYPE; 96 User user = new User(mTestApis, mutableUser); 97 98 assertThat(user.type()).isEqualTo(USER_TYPE); 99 } 100 101 @Test type_notSet_returnsNull()102 public void type_notSet_returnsNull() { 103 User.MutableUser mutableUser = createValidMutableUser(); 104 User user = new User(mTestApis, mutableUser); 105 106 assertThat(user.type()).isNull(); 107 } 108 109 @Test hasProfileOwner_returnsHasProfileOwner()110 public void hasProfileOwner_returnsHasProfileOwner() { 111 User.MutableUser mutableUser = createValidMutableUser(); 112 mutableUser.mHasProfileOwner = true; 113 User user = new User(mTestApis, mutableUser); 114 115 assertThat(user.hasProfileOwner()).isTrue(); 116 } 117 118 @Test hasProfileOwner_notSet_returnsNull()119 public void hasProfileOwner_notSet_returnsNull() { 120 User.MutableUser mutableUser = createValidMutableUser(); 121 User user = new User(mTestApis, mutableUser); 122 123 assertThat(user.hasProfileOwner()).isNull(); 124 } 125 126 @Test isPrimary_returnsIsPrimary()127 public void isPrimary_returnsIsPrimary() { 128 User.MutableUser mutableUser = createValidMutableUser(); 129 mutableUser.mIsPrimary = true; 130 User user = new User(mTestApis, mutableUser); 131 132 assertThat(user.isPrimary()).isTrue(); 133 } 134 135 @Test isPrimary_notSet_returnsNull()136 public void isPrimary_notSet_returnsNull() { 137 User.MutableUser mutableUser = createValidMutableUser(); 138 User user = new User(mTestApis, mutableUser); 139 140 assertThat(user.isPrimary()).isNull(); 141 } 142 143 @Test state_userNotStarted_returnsState()144 public void state_userNotStarted_returnsState() { 145 UserReference user = mTestApis.users().createUser().create(); 146 user.stop(); 147 148 try { 149 assertThat(user.resolve().state()).isEqualTo(User.UserState.NOT_RUNNING); 150 } finally { 151 user.remove(); 152 } 153 } 154 155 @Test 156 @Ignore("TODO: Ensure we can enter the user locked state") state_userLocked_returnsState()157 public void state_userLocked_returnsState() { 158 UserReference user = mTestApis.users().createUser().createAndStart(); 159 160 try { 161 assertThat(user.resolve().state()).isEqualTo(User.UserState.RUNNING_LOCKED); 162 } finally { 163 user.remove(); 164 } 165 } 166 167 @Test state_userUnlocked_returnsState()168 public void state_userUnlocked_returnsState() { 169 UserReference user = mTestApis.users().createUser().createAndStart(); 170 171 try { 172 assertThat(user.resolve().state()).isEqualTo(User.UserState.RUNNING_UNLOCKED); 173 } finally { 174 user.remove(); 175 } 176 } 177 178 @Test parent_returnsParent()179 public void parent_returnsParent() { 180 UserReference parentUser = new User(mTestApis, createValidMutableUser()); 181 User.MutableUser mutableUser = createValidMutableUser(); 182 mutableUser.mParent = parentUser; 183 User user = new User(mTestApis, mutableUser); 184 185 assertThat(user.parent()).isEqualTo(parentUser); 186 } 187 188 @Test autoclose_removesUser()189 public void autoclose_removesUser() { 190 int numUsers = mTestApis.users().all().size(); 191 192 try (UserReference user = mTestApis.users().createUser().create()) { 193 // We intentionally don't do anything here, just rely on the auto-close behaviour 194 } 195 196 assertThat(mTestApis.users().all()).hasSize(numUsers); 197 } 198 createValidMutableUser()199 private User.MutableUser createValidMutableUser() { 200 User.MutableUser mutableUser = new User.MutableUser(); 201 mutableUser.mId = 1; 202 return mutableUser; 203 } 204 } 205