1 /* 2 * Copyright (C) 2017 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 android.os; 18 19 import static android.os.UserHandle.ERR_GID; 20 import static android.os.UserHandle.getAppId; 21 import static android.os.UserHandle.getCacheAppGid; 22 import static android.os.UserHandle.getSharedAppGid; 23 import static android.os.UserHandle.getUid; 24 import static android.os.UserHandle.getUserId; 25 26 import static org.junit.Assert.assertEquals; 27 28 import androidx.test.runner.AndroidJUnit4; 29 30 import org.junit.Test; 31 import org.junit.runner.RunWith; 32 33 @RunWith(AndroidJUnit4.class) 34 public class UserHandleTest { 35 // NOTE: keep logic in sync with system/core/libcutils/tests/multiuser_test.cpp 36 37 @Test testMerge()38 public void testMerge() throws Exception { 39 EXPECT_EQ(0, multiuser_get_uid(0, 0)); 40 EXPECT_EQ(1000, multiuser_get_uid(0, 1000)); 41 EXPECT_EQ(10000, multiuser_get_uid(0, 10000)); 42 EXPECT_EQ(50000, multiuser_get_uid(0, 50000)); 43 EXPECT_EQ(1000000, multiuser_get_uid(10, 0)); 44 EXPECT_EQ(1001000, multiuser_get_uid(10, 1000)); 45 EXPECT_EQ(1010000, multiuser_get_uid(10, 10000)); 46 EXPECT_EQ(1050000, multiuser_get_uid(10, 50000)); 47 } 48 49 @Test testSplitUser()50 public void testSplitUser() throws Exception { 51 EXPECT_EQ(0, multiuser_get_user_id(0)); 52 EXPECT_EQ(0, multiuser_get_user_id(1000)); 53 EXPECT_EQ(0, multiuser_get_user_id(10000)); 54 EXPECT_EQ(0, multiuser_get_user_id(50000)); 55 EXPECT_EQ(10, multiuser_get_user_id(1000000)); 56 EXPECT_EQ(10, multiuser_get_user_id(1001000)); 57 EXPECT_EQ(10, multiuser_get_user_id(1010000)); 58 EXPECT_EQ(10, multiuser_get_user_id(1050000)); 59 } 60 61 @Test testSplitApp()62 public void testSplitApp() throws Exception { 63 EXPECT_EQ(0, multiuser_get_app_id(0)); 64 EXPECT_EQ(1000, multiuser_get_app_id(1000)); 65 EXPECT_EQ(10000, multiuser_get_app_id(10000)); 66 EXPECT_EQ(50000, multiuser_get_app_id(50000)); 67 EXPECT_EQ(0, multiuser_get_app_id(1000000)); 68 EXPECT_EQ(1000, multiuser_get_app_id(1001000)); 69 EXPECT_EQ(10000, multiuser_get_app_id(1010000)); 70 EXPECT_EQ(50000, multiuser_get_app_id(1050000)); 71 } 72 73 @Test testCache()74 public void testCache() throws Exception { 75 EXPECT_EQ(ERR_GID, multiuser_get_cache_gid(0, 0)); 76 EXPECT_EQ(ERR_GID, multiuser_get_cache_gid(0, 1000)); 77 EXPECT_EQ(20000, multiuser_get_cache_gid(0, 10000)); 78 EXPECT_EQ(ERR_GID, multiuser_get_cache_gid(0, 50000)); 79 EXPECT_EQ(ERR_GID, multiuser_get_cache_gid(10, 0)); 80 EXPECT_EQ(ERR_GID, multiuser_get_cache_gid(10, 1000)); 81 EXPECT_EQ(1020000, multiuser_get_cache_gid(10, 10000)); 82 EXPECT_EQ(ERR_GID, multiuser_get_cache_gid(10, 50000)); 83 } 84 85 @Test testShared()86 public void testShared() throws Exception { 87 EXPECT_EQ(0, multiuser_get_shared_gid(0, 0)); 88 EXPECT_EQ(1000, multiuser_get_shared_gid(0, 1000)); 89 EXPECT_EQ(50000, multiuser_get_shared_gid(0, 10000)); 90 EXPECT_EQ(ERR_GID, multiuser_get_shared_gid(0, 50000)); 91 EXPECT_EQ(0, multiuser_get_shared_gid(10, 0)); 92 EXPECT_EQ(1000, multiuser_get_shared_gid(10, 1000)); 93 EXPECT_EQ(50000, multiuser_get_shared_gid(10, 10000)); 94 EXPECT_EQ(ERR_GID, multiuser_get_shared_gid(10, 50000)); 95 } 96 EXPECT_EQ(int expected, int actual)97 private static void EXPECT_EQ(int expected, int actual) { 98 assertEquals(expected, actual); 99 } 100 multiuser_get_uid(int userId, int appId)101 private static int multiuser_get_uid(int userId, int appId) { 102 return getUid(userId, appId); 103 } 104 multiuser_get_cache_gid(int userId, int appId)105 private static int multiuser_get_cache_gid(int userId, int appId) { 106 return getCacheAppGid(userId, appId); 107 } 108 multiuser_get_shared_gid(int userId, int appId)109 private static int multiuser_get_shared_gid(int userId, int appId) { 110 return getSharedAppGid(userId, appId); 111 } 112 multiuser_get_user_id(int uid)113 private static int multiuser_get_user_id(int uid) { 114 return getUserId(uid); 115 } 116 multiuser_get_app_id(int uid)117 private static int multiuser_get_app_id(int uid) { 118 return getAppId(uid); 119 } 120 } 121