Home | History | Annotate | Download | only in os
      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 android.support.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
     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
     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
     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
     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
     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 
     97     private static void EXPECT_EQ(int expected, int actual) {
     98         assertEquals(expected, actual);
     99     }
    100 
    101     private static int multiuser_get_uid(int userId, int appId) {
    102         return getUid(userId, appId);
    103     }
    104 
    105     private static int multiuser_get_cache_gid(int userId, int appId) {
    106         return getCacheAppGid(userId, appId);
    107     }
    108 
    109     private static int multiuser_get_shared_gid(int userId, int appId) {
    110         return getSharedAppGid(userId, appId);
    111     }
    112 
    113     private static int multiuser_get_user_id(int uid) {
    114         return getUserId(uid);
    115     }
    116 
    117     private static int multiuser_get_app_id(int uid) {
    118         return getAppId(uid);
    119     }
    120 }
    121