aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRett Berg <rett@google.com>2019-06-10 15:16:23 -0700
committerRett Berg <rett@google.com>2019-07-25 11:12:41 -0700
commit8d30e3146ce773d66a5b3130818f4af0292fcb1f (patch)
tree0f146305894e18b0ea1a572a72328516430fc984
parent0e8212313a0fc7b659ad06586c14d2d9d58e7f25 (diff)
downloadtradefederation-8d30e3146ce773d66a5b3130818f4af0292fcb1f.tar.gz
add support for guest user
Bug: 135057192 Bug: 130661989 Test: tapas tradefed-all && make && \ tools/tradefederation/core/tradefed.sh run singleCommand host -n \ --class com.android.tradefed.UnitTests Change-Id: I2b9469dfd4d2634df4f00784537e9e67f2174ac3 Merged-In: I2b9469dfd4d2634df4f00784537e9e67f2174ac3
-rw-r--r--src/com/android/tradefed/device/UserInfo.java30
-rw-r--r--src/com/android/tradefed/suite/checker/UserChecker.java2
-rw-r--r--tests/src/com/android/tradefed/suite/checker/UserCheckerTest.java38
-rw-r--r--tests/src/com/android/tradefed/targetprep/SwitchUserTargetPreparerTest.java29
4 files changed, 93 insertions, 6 deletions
diff --git a/src/com/android/tradefed/device/UserInfo.java b/src/com/android/tradefed/device/UserInfo.java
index b37ef1b05..4cccbbb9d 100644
--- a/src/com/android/tradefed/device/UserInfo.java
+++ b/src/com/android/tradefed/device/UserInfo.java
@@ -42,12 +42,36 @@ public final class UserInfo {
public enum UserType {
/** current foreground user of the device */
CURRENT,
+ /**
+ * guest user. Only one can exist at a time, may be ephemeral and have more restrictions.
+ */
+ GUEST,
/** user flagged as primary on the device; most often primary = system user = user 0 */
PRIMARY,
/** system user = user 0 */
SYSTEM,
/** secondary user, i.e. non-primary and non-system. */
SECONDARY;
+
+ public boolean isCurrent() {
+ return this == CURRENT;
+ }
+
+ public boolean isGuest() {
+ return this == GUEST;
+ }
+
+ public boolean isPrimary() {
+ return this == PRIMARY;
+ }
+
+ public boolean isSystem() {
+ return this == SYSTEM;
+ }
+
+ public boolean isSecondary() {
+ return this == SECONDARY;
+ }
}
public UserInfo(int userId, String userName, int flag, boolean isRunning) {
@@ -73,6 +97,10 @@ public final class UserInfo {
return mIsRunning;
}
+ public boolean isGuest() {
+ return (mFlag & FLAG_GUEST) == FLAG_GUEST;
+ }
+
public boolean isPrimary() {
return (mFlag & FLAG_PRIMARY) == FLAG_PRIMARY;
}
@@ -90,6 +118,8 @@ public final class UserInfo {
switch (userType) {
case CURRENT:
return mUserId == currentUserId;
+ case GUEST:
+ return isGuest();
case PRIMARY:
return isPrimary();
case SYSTEM:
diff --git a/src/com/android/tradefed/suite/checker/UserChecker.java b/src/com/android/tradefed/suite/checker/UserChecker.java
index bca52d5a7..92b12dd2e 100644
--- a/src/com/android/tradefed/suite/checker/UserChecker.java
+++ b/src/com/android/tradefed/suite/checker/UserChecker.java
@@ -65,7 +65,7 @@ public class UserChecker implements ISystemStatusChecker {
mSwitchedToUserId =
device.createUser(
/* name= */ "Tf" + mUserToSwitchTo.toString().toLowerCase(),
- /* guest= */ false,
+ /* guest= */ mUserToSwitchTo.isGuest(),
/* ephemeral= */ false);
CLog.i(
"No user of type %s found, created user %d",
diff --git a/tests/src/com/android/tradefed/suite/checker/UserCheckerTest.java b/tests/src/com/android/tradefed/suite/checker/UserCheckerTest.java
index 6d36c6c3b..d4fece268 100644
--- a/tests/src/com/android/tradefed/suite/checker/UserCheckerTest.java
+++ b/tests/src/com/android/tradefed/suite/checker/UserCheckerTest.java
@@ -185,6 +185,26 @@ public class UserCheckerTest {
}
@Test
+ public void testSwitchToGuest() throws Exception {
+ UserChecker checker = new UserChecker();
+ OptionSetter mOptionSetter = new OptionSetter(checker);
+ mOptionSetter.setOptionValue("user-type", "guest");
+ ITestDevice device =
+ mockDeviceUserState(
+ /* currentUser= */ 0,
+ /* userIds= */ new Integer[] {0, 10},
+ /* flags= */ new Integer[] {0, UserInfo.FLAG_GUEST},
+ /* isRunning= */ new Boolean[] {true, false});
+
+ when(device.switchUser(10)).thenReturn(true);
+
+ StatusCheckerResult result = checker.preExecutionCheck(device);
+ assertEquals(CheckStatus.SUCCESS, result.getStatus());
+ verify(device, never()).createUser(any(), anyBoolean(), anyBoolean());
+ verify(device, times(1)).switchUser(10);
+ }
+
+ @Test
public void testCreateSecondary() throws Exception {
UserChecker checker = new UserChecker();
OptionSetter mOptionSetter = new OptionSetter(checker);
@@ -201,6 +221,24 @@ public class UserCheckerTest {
verify(device, times(1)).switchUser(10);
}
+ @Test
+ public void testCreateGuest() throws Exception {
+ UserChecker checker = new UserChecker();
+ OptionSetter mOptionSetter = new OptionSetter(checker);
+ mOptionSetter.setOptionValue("user-type", "guest");
+ ITestDevice device =
+ mockDeviceUserState(/* currentUser= */ 0, /* userIds= */ new Integer[] {0});
+
+ when(device.createUser("Tfguest", /* guest= */ true, /* ephemeral= */ false))
+ .thenReturn(10);
+ when(device.switchUser(10)).thenReturn(true);
+
+ StatusCheckerResult result = checker.preExecutionCheck(device);
+ assertEquals(CheckStatus.SUCCESS, result.getStatus());
+ verify(device, times(1)).createUser("Tfguest", /* guest= */ true, /* ephemeral= */ false);
+ verify(device, times(1)).switchUser(10);
+ }
+
// // TEST HELPERS
/** Return a device with the user state calls mocked. */
diff --git a/tests/src/com/android/tradefed/targetprep/SwitchUserTargetPreparerTest.java b/tests/src/com/android/tradefed/targetprep/SwitchUserTargetPreparerTest.java
index d18c55196..c5bbb067e 100644
--- a/tests/src/com/android/tradefed/targetprep/SwitchUserTargetPreparerTest.java
+++ b/tests/src/com/android/tradefed/targetprep/SwitchUserTargetPreparerTest.java
@@ -57,7 +57,7 @@ public class SwitchUserTargetPreparerTest {
}
@Test
- public void testSetUpRunAsPrimary_ifAlreadyInPrimary()
+ public void testSetUpRunAsPrimary_ifAlreadyInPrimary_noSwitch()
throws DeviceNotAvailableException, TargetSetupError, ConfigurationException {
mOptionSetter.setOptionValue("user-type", "primary");
@@ -77,23 +77,22 @@ public class SwitchUserTargetPreparerTest {
}
@Test
- public void testSetUpRunAsSystem_ifAlreadyInSystem_switchToSystem()
+ public void testSetUpRunAsSystem_ifAlreadyInSystem_noSwitch()
throws DeviceNotAvailableException, TargetSetupError, ConfigurationException {
mOptionSetter.setOptionValue("user-type", "system");
// setup
- when(mMockDevice.getCurrentUser()).thenReturn(11);
+ when(mMockDevice.getCurrentUser()).thenReturn(0);
mockListUsersInfo(
mMockDevice,
/* userIds= */ new Integer[] {0, 11},
/* flags= */ new Integer[] {0, UserInfo.FLAG_PRIMARY});
- when(mMockDevice.switchUser(0)).thenReturn(true);
// act
mSwitchUserTargetPreparer.setUp(mMockDevice, /* buildInfo= */ null);
// assert
- verify(mMockDevice, times(1)).switchUser(0);
+ verify(mMockDevice, never()).switchUser(0);
}
@Test
@@ -117,6 +116,26 @@ public class SwitchUserTargetPreparerTest {
}
@Test
+ public void testSetUpRunAsGuest_ifNotInGuest_switchToGuest()
+ throws DeviceNotAvailableException, TargetSetupError, ConfigurationException {
+ mOptionSetter.setOptionValue("user-type", "guest");
+
+ // setup
+ when(mMockDevice.getCurrentUser()).thenReturn(11);
+ mockListUsersInfo(
+ mMockDevice,
+ /* userIds= */ new Integer[] {0, 10, 11},
+ /* flags= */ new Integer[] {0, UserInfo.FLAG_GUEST, 0});
+ when(mMockDevice.switchUser(10)).thenReturn(true);
+
+ // act
+ mSwitchUserTargetPreparer.setUp(mMockDevice, /* buildInfo= */ null);
+
+ // assert
+ verify(mMockDevice, times(1)).switchUser(10);
+ }
+
+ @Test
public void testSetUpRunAsSystem_ifNotInSystem_switchToSystem()
throws DeviceNotAvailableException, TargetSetupError, ConfigurationException {
mOptionSetter.setOptionValue("user-type", "system");