blob: 7aadd87efb0873e578eb4bff7566b54dafb5de6c [file] [log] [blame]
Bookatz029832a2019-10-04 16:50:22 -07001/*
2 * Copyright (C) 2019 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
17package com.android.server.pm;
18
19import static android.content.pm.UserInfo.FLAG_DEMO;
20import static android.content.pm.UserInfo.FLAG_EPHEMERAL;
21import static android.content.pm.UserInfo.FLAG_FULL;
22import static android.content.pm.UserInfo.FLAG_GUEST;
23import static android.content.pm.UserInfo.FLAG_MANAGED_PROFILE;
24import static android.content.pm.UserInfo.FLAG_PROFILE;
25import static android.content.pm.UserInfo.FLAG_RESTRICTED;
26import static android.content.pm.UserInfo.FLAG_SYSTEM;
27
28import static org.junit.Assert.assertEquals;
29import static org.junit.Assert.assertFalse;
30import static org.junit.Assert.assertTrue;
31import static org.testng.Assert.assertThrows;
32
33import android.content.pm.UserInfo;
34import android.content.res.Resources;
35import android.os.UserManager;
36
37import androidx.test.filters.MediumTest;
38import androidx.test.runner.AndroidJUnit4;
39
40import org.junit.Test;
41import org.junit.runner.RunWith;
42
43import java.util.ArrayList;
44import java.util.Arrays;
45
46/**
47 * Tests for {@link UserTypeDetails} and {@link UserTypeFactory}.
48 *
49 * <p>Run with: atest UserManagerServiceUserTypeTest
50 */
51@RunWith(AndroidJUnit4.class)
52@MediumTest
53public class UserManagerServiceUserTypeTest {
54
55 @Test
56 public void testUserTypeBuilder_createUserType() {
57 UserTypeDetails type = new UserTypeDetails.Builder()
58 .setName("a.name")
59 .setEnabled(true)
60 .setMaxAllowed(21)
61 .setBaseType(FLAG_FULL)
62 .setDefaultUserInfoPropertyFlags(FLAG_EPHEMERAL)
63 .setBadgeLabels(23, 24, 25)
64 .setBadgeColors(26, 27)
65 .setIconBadge(28)
66 .setBadgePlain(29)
67 .setBadgeNoBackground(30)
68 .setLabel(31)
69 .setMaxAllowedPerParent(32)
70 .setDefaultRestrictions(new ArrayList<>(Arrays.asList("r1", "r2")))
71 .createUserTypeDetails();
72
73 assertEquals("a.name", type.getName());
74 assertTrue(type.isEnabled());
75 assertEquals(21, type.getMaxAllowed());
76 assertEquals(FLAG_FULL | FLAG_EPHEMERAL, type.getDefaultUserInfoFlags());
77 assertEquals(28, type.getIconBadge());
78 assertEquals(29, type.getBadgePlain());
79 assertEquals(30, type.getBadgeNoBackground());
80 assertEquals(31, type.getLabel());
81 assertEquals(32, type.getMaxAllowedPerParent());
82 assertEquals(new ArrayList<>(Arrays.asList("r1", "r2")), type.getDefaultRestrictions());
83
84
85 assertEquals(23, type.getBadgeLabel(0));
86 assertEquals(24, type.getBadgeLabel(1));
87 assertEquals(25, type.getBadgeLabel(2));
88 assertEquals(25, type.getBadgeLabel(3));
89 assertEquals(25, type.getBadgeLabel(4));
90 assertEquals(Resources.ID_NULL, type.getBadgeLabel(-1));
91
92 assertEquals(26, type.getBadgeColor(0));
93 assertEquals(27, type.getBadgeColor(1));
94 assertEquals(27, type.getBadgeColor(2));
95 assertEquals(27, type.getBadgeColor(3));
96 assertEquals(Resources.ID_NULL, type.getBadgeColor(-100));
97
98 assertTrue(type.hasBadge());
99 }
100
101 @Test
102 public void testUserTypeBuilder_defaults() {
103 UserTypeDetails type = new UserTypeDetails.Builder()
104 .setName("name") // Required (no default allowed)
105 .setBaseType(FLAG_FULL) // Required (no default allowed)
106 .createUserTypeDetails();
107
108 assertTrue(type.isEnabled());
109 assertEquals(UserTypeDetails.UNLIMITED_NUMBER_OF_USERS, type.getMaxAllowed());
110 assertEquals(UserTypeDetails.UNLIMITED_NUMBER_OF_USERS, type.getMaxAllowedPerParent());
111 assertEquals(FLAG_FULL, type.getDefaultUserInfoFlags());
112 assertEquals(Resources.ID_NULL, type.getIconBadge());
113 assertEquals(Resources.ID_NULL, type.getBadgePlain());
114 assertEquals(Resources.ID_NULL, type.getBadgeNoBackground());
115 assertEquals(Resources.ID_NULL, type.getBadgeLabel(0));
116 assertEquals(Resources.ID_NULL, type.getBadgeColor(0));
117 assertEquals(Resources.ID_NULL, type.getLabel());
118 assertTrue(type.getDefaultRestrictions().isEmpty());
119
120 assertFalse(type.hasBadge());
121 }
122
123 @Test
124 public void testUserTypeBuilder_nameIsRequired() {
125 assertThrows(IllegalArgumentException.class,
126 () -> new UserTypeDetails.Builder()
127 .setMaxAllowed(21)
128 .setBaseType(FLAG_FULL)
129 .createUserTypeDetails());
130 }
131
132 @Test
133 public void testUserTypeBuilder_baseTypeIsRequired() {
134 assertThrows(IllegalArgumentException.class,
135 () -> new UserTypeDetails.Builder()
136 .setName("name")
137 .createUserTypeDetails());
138 }
139
140 @Test
141 public void testUserTypeBuilder_colorIsRequiredIfBadged() {
142 assertThrows(IllegalArgumentException.class,
143 () -> getMinimalBuilder()
144 .setIconBadge(1)
145 .setBadgeLabels(2)
146 .createUserTypeDetails());
147 }
148
149 @Test
150 public void testUserTypeBuilder_badgeLabelIsRequiredIfBadged() {
151 assertThrows(IllegalArgumentException.class,
152 () -> getMinimalBuilder()
153 .setIconBadge(1)
154 .setBadgeColors(2)
155 .createUserTypeDetails());
156 }
157
158 @Test
159 public void testCheckUserTypeConsistency() {
160 assertTrue(UserManagerService.checkUserTypeConsistency(FLAG_GUEST));
161 assertTrue(UserManagerService.checkUserTypeConsistency(FLAG_GUEST | FLAG_EPHEMERAL));
162 assertTrue(UserManagerService.checkUserTypeConsistency(FLAG_PROFILE));
163
164 assertFalse(UserManagerService.checkUserTypeConsistency(FLAG_DEMO | FLAG_RESTRICTED));
165 assertFalse(UserManagerService.checkUserTypeConsistency(FLAG_PROFILE | FLAG_SYSTEM));
166 assertFalse(UserManagerService.checkUserTypeConsistency(FLAG_PROFILE | FLAG_FULL));
167 }
168
169 @Test
170 public void testGetDefaultUserType() {
171 // Simple example.
172 assertEquals(UserManager.USER_TYPE_FULL_RESTRICTED,
173 UserInfo.getDefaultUserType(FLAG_RESTRICTED));
174
175 // Type plus a non-type flag.
176 assertEquals(UserManager.USER_TYPE_FULL_GUEST,
177 UserInfo.getDefaultUserType(FLAG_GUEST | FLAG_EPHEMERAL));
178
179 // Two types, which is illegal.
180 assertThrows(IllegalArgumentException.class,
181 () -> UserInfo.getDefaultUserType(FLAG_MANAGED_PROFILE | FLAG_GUEST));
182
183 // No type, which defaults to {@link UserManager#USER_TYPE_FULL_SECONDARY}.
184 assertEquals(UserManager.USER_TYPE_FULL_SECONDARY,
185 UserInfo.getDefaultUserType(FLAG_EPHEMERAL));
186 }
187
188 /** Returns a minimal {@link UserTypeDetails.Builder} that can legitimately be created. */
189 private UserTypeDetails.Builder getMinimalBuilder() {
190 return new UserTypeDetails.Builder().setName("name").setBaseType(FLAG_FULL);
191 }
192}