19762338dSopenharmony_ci/*
29762338dSopenharmony_ci * Copyright (C) 2024 HiHope Open Source Organization.
39762338dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
49762338dSopenharmony_ci * you may not use this file except in compliance with the License.
59762338dSopenharmony_ci * You may obtain a copy of the License at
69762338dSopenharmony_ci *
79762338dSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
89762338dSopenharmony_ci *
99762338dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
109762338dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
119762338dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
129762338dSopenharmony_ci * See the License for the specific language governing permissions and
139762338dSopenharmony_ci * limitations under the License.
149762338dSopenharmony_ci */
159762338dSopenharmony_ci
169762338dSopenharmony_ci#include <cerrno>
179762338dSopenharmony_ci#include <cstdio>
189762338dSopenharmony_ci#include <cstdlib>
199762338dSopenharmony_ci#include <string>
209762338dSopenharmony_ci#include <vector>
219762338dSopenharmony_ci#include <unistd.h>
229762338dSopenharmony_ci#include <gtest/gtest.h>
239762338dSopenharmony_ci#include <sys/fsuid.h>
249762338dSopenharmony_ci#include <sys/personality.h>
259762338dSopenharmony_ci#include <sys/stat.h>
269762338dSopenharmony_ci#include <sys/types.h>
279762338dSopenharmony_ci
289762338dSopenharmony_ci
299762338dSopenharmony_ciusing namespace testing::ext;
309762338dSopenharmony_ciusing namespace std;
319762338dSopenharmony_ci
329762338dSopenharmony_cistatic const int MAX_GROUPS = 1024;
339762338dSopenharmony_ciconst unsigned long RETRIEVE_PERSONALITY = 0xffffffff;
349762338dSopenharmony_ciconst unsigned long DEFAULT_PERSONALITY = 0;
359762338dSopenharmony_ci
369762338dSopenharmony_ciclass UserApiTest : public testing::Test {
379762338dSopenharmony_cipublic:
389762338dSopenharmony_ci    static void SetUpTestCase();
399762338dSopenharmony_ci    static void TearDownTestCase();
409762338dSopenharmony_ci    void SetUp();
419762338dSopenharmony_ci    void TearDown();
429762338dSopenharmony_ciprivate:
439762338dSopenharmony_ci};
449762338dSopenharmony_civoid UserApiTest::SetUp()
459762338dSopenharmony_ci{
469762338dSopenharmony_ci}
479762338dSopenharmony_civoid UserApiTest::TearDown()
489762338dSopenharmony_ci{
499762338dSopenharmony_ci}
509762338dSopenharmony_civoid UserApiTest::SetUpTestCase()
519762338dSopenharmony_ci{
529762338dSopenharmony_ci}
539762338dSopenharmony_civoid UserApiTest::TearDownTestCase()
549762338dSopenharmony_ci{
559762338dSopenharmony_ci}
569762338dSopenharmony_ci
579762338dSopenharmony_ci/*
589762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0100
599762338dSopenharmony_ci * @tc.name   : SetpGidSetGroupIDSuccess_0001
609762338dSopenharmony_ci * @tc.desc   : SetpGid Set group ID success.
619762338dSopenharmony_ci * @tc.size   : MediumTest
629762338dSopenharmony_ci * @tc.type   : Function
639762338dSopenharmony_ci * @tc.level  : Level 1
649762338dSopenharmony_ci */
659762338dSopenharmony_ciHWTEST_F(UserApiTest, SetpGidSetGroupIDSuccess_0001, Function | MediumTest | Level1)
669762338dSopenharmony_ci{
679762338dSopenharmony_ci    int ret;
689762338dSopenharmony_ci    gid_t gid = getgid();
699762338dSopenharmony_ci    EXPECT_TRUE(gid >= 0);
709762338dSopenharmony_ci
719762338dSopenharmony_ci    ret = setpgid(gid, gid);
729762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
739762338dSopenharmony_ci
749762338dSopenharmony_ci    ret = setpgid(0, gid);
759762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
769762338dSopenharmony_ci
779762338dSopenharmony_ci    ret = setpgid(gid, 0);
789762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
799762338dSopenharmony_ci}
809762338dSopenharmony_ci
819762338dSopenharmony_ci/*
829762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0200
839762338dSopenharmony_ci * @tc.name   : SetpGidSetGroupIDFail_0002
849762338dSopenharmony_ci * @tc.desc   : SetpGid Set group ID fail.
859762338dSopenharmony_ci * @tc.size   : MediumTest
869762338dSopenharmony_ci * @tc.type   : Function
879762338dSopenharmony_ci * @tc.level  : Level 2
889762338dSopenharmony_ci */
899762338dSopenharmony_ciHWTEST_F(UserApiTest, SetpGidSetGroupIDFail_0002, Function | MediumTest | Level2)
909762338dSopenharmony_ci{
919762338dSopenharmony_ci    gid_t invalidGid = -1;
929762338dSopenharmony_ci    errno = 0;
939762338dSopenharmony_ci    int ret = setpgid(0, invalidGid);
949762338dSopenharmony_ci    EXPECT_EQ(ret, -1);
959762338dSopenharmony_ci    EXPECT_EQ(errno, EINVAL);
969762338dSopenharmony_ci}
979762338dSopenharmony_ci
989762338dSopenharmony_ci/*
999762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0300
1009762338dSopenharmony_ci * @tc.name   : GetgroupsGetGroupIDListSuccess_0003
1019762338dSopenharmony_ci * @tc.desc   : Getgroups get list of supplementary group IDs success.
1029762338dSopenharmony_ci * @tc.size   : MediumTest
1039762338dSopenharmony_ci * @tc.type   : Function
1049762338dSopenharmony_ci * @tc.level  : Level 1
1059762338dSopenharmony_ci */
1069762338dSopenharmony_ciHWTEST_F(UserApiTest, GetgroupsGetGroupIDListSuccess_0003, Function | MediumTest | Level1)
1079762338dSopenharmony_ci{
1089762338dSopenharmony_ci    int numGroups;
1099762338dSopenharmony_ci    gid_t groups[MAX_GROUPS];
1109762338dSopenharmony_ci
1119762338dSopenharmony_ci    numGroups = getgroups(MAX_GROUPS, groups);
1129762338dSopenharmony_ci    EXPECT_TRUE(numGroups >= 0);
1139762338dSopenharmony_ci}
1149762338dSopenharmony_ci
1159762338dSopenharmony_ci/*
1169762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0400
1179762338dSopenharmony_ci * @tc.name   : GetgroupsGetGroupIDInNullFail_0004
1189762338dSopenharmony_ci * @tc.desc   : Getgroups get list of supplementary group IDs in nullptr fail, errno EFAULT.
1199762338dSopenharmony_ci * @tc.size   : MediumTest
1209762338dSopenharmony_ci * @tc.type   : Function
1219762338dSopenharmony_ci * @tc.level  : Level 2
1229762338dSopenharmony_ci */
1239762338dSopenharmony_ciHWTEST_F(UserApiTest, GetgroupsGetGroupIDInNullFail_0004, Function | MediumTest | Level2)
1249762338dSopenharmony_ci{
1259762338dSopenharmony_ci    errno = 0;
1269762338dSopenharmony_ci    int numGroups = getgroups(MAX_GROUPS, nullptr);
1279762338dSopenharmony_ci    EXPECT_EQ(numGroups, -1);
1289762338dSopenharmony_ci    EXPECT_EQ(errno, EFAULT);
1299762338dSopenharmony_ci}
1309762338dSopenharmony_ci
1319762338dSopenharmony_ci/*
1329762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0500
1339762338dSopenharmony_ci * @tc.name   : GetpgidAcquireSpecifyProcessGroupIDSuccess_0005
1349762338dSopenharmony_ci * @tc.desc   : Getpgid acquire specify process group ID success.
1359762338dSopenharmony_ci * @tc.size   : MediumTest
1369762338dSopenharmony_ci * @tc.type   : Function
1379762338dSopenharmony_ci * @tc.level  : Level 1
1389762338dSopenharmony_ci */
1399762338dSopenharmony_ciHWTEST_F(UserApiTest, GetpgidAcquireSpecifyProcessGroupIDSuccess_0005, Function | MediumTest | Level1)
1409762338dSopenharmony_ci{
1419762338dSopenharmony_ci    pid_t pid = getpid();
1429762338dSopenharmony_ci    pid_t pgid = getpgid(pid);
1439762338dSopenharmony_ci    EXPECT_TRUE(pgid >= 0);
1449762338dSopenharmony_ci}
1459762338dSopenharmony_ci
1469762338dSopenharmony_ci/*
1479762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0600
1489762338dSopenharmony_ci * @tc.name   : GetpgidAcquireInvalidProcessGroupIDFail_0006
1499762338dSopenharmony_ci * @tc.desc   : Getpgid acquire group ID of invalid process ID fail, errno ESRCH.
1509762338dSopenharmony_ci * @tc.size   : MediumTest
1519762338dSopenharmony_ci * @tc.type   : Function
1529762338dSopenharmony_ci * @tc.level  : Level 2
1539762338dSopenharmony_ci */
1549762338dSopenharmony_ciHWTEST_F(UserApiTest, GetpgidAcquireInvalidProcessGroupIDFail_0006, Function | MediumTest | Level2)
1559762338dSopenharmony_ci{
1569762338dSopenharmony_ci    int invalidPID = -1;
1579762338dSopenharmony_ci    errno = 0;
1589762338dSopenharmony_ci    pid_t pgid = getpgid(invalidPID);
1599762338dSopenharmony_ci    EXPECT_EQ(pgid, -1);
1609762338dSopenharmony_ci    EXPECT_EQ(errno, ESRCH);
1619762338dSopenharmony_ci}
1629762338dSopenharmony_ci
1639762338dSopenharmony_ci/*
1649762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0700
1659762338dSopenharmony_ci * @tc.name   : GetresuidGetReadEffectiveSavedUIDSuccess_0007
1669762338dSopenharmony_ci * @tc.desc   : Getresuid get real uid effective uid and saved uid success.
1679762338dSopenharmony_ci * @tc.size   : MediumTest
1689762338dSopenharmony_ci * @tc.type   : Function
1699762338dSopenharmony_ci * @tc.level  : Level 1
1709762338dSopenharmony_ci */
1719762338dSopenharmony_ciHWTEST_F(UserApiTest, GetresuidGetReadEffectiveSavedUIDSuccess_0007, Function | MediumTest | Level1)
1729762338dSopenharmony_ci{
1739762338dSopenharmony_ci    int ret;
1749762338dSopenharmony_ci    uid_t getRUid, getEUid, savedUid;
1759762338dSopenharmony_ci    uid_t realUid = getuid();
1769762338dSopenharmony_ci    uid_t effectiveUid = geteuid();
1779762338dSopenharmony_ci    ret = getresuid(&getRUid, &getEUid, &savedUid);
1789762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
1799762338dSopenharmony_ci    EXPECT_EQ(realUid, getRUid);
1809762338dSopenharmony_ci    EXPECT_EQ(effectiveUid, getEUid);
1819762338dSopenharmony_ci    EXPECT_TRUE(savedUid >= 0);
1829762338dSopenharmony_ci}
1839762338dSopenharmony_ci
1849762338dSopenharmony_ci/*
1859762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0800
1869762338dSopenharmony_ci * @tc.name   : GetresuidGetReadEffectiveSavedUIDInNullptrFail_0008
1879762338dSopenharmony_ci * @tc.desc   : Getresuid get real uid effective uid and saved uid in nullptr fail.
1889762338dSopenharmony_ci * @tc.size   : MediumTest
1899762338dSopenharmony_ci * @tc.type   : Function
1909762338dSopenharmony_ci * @tc.level  : Level 2
1919762338dSopenharmony_ci */
1929762338dSopenharmony_ciHWTEST_F(UserApiTest, GetresuidGetReadEffectiveSavedUIDInNullptrFail_0008, Function | MediumTest | Level2)
1939762338dSopenharmony_ci{
1949762338dSopenharmony_ci    int ret;
1959762338dSopenharmony_ci    uid_t realUid, effectiveUid, savedUid;
1969762338dSopenharmony_ci
1979762338dSopenharmony_ci    errno = 0;
1989762338dSopenharmony_ci    ret = getresuid(nullptr, &effectiveUid, &savedUid);
1999762338dSopenharmony_ci    EXPECT_EQ(ret, -1);
2009762338dSopenharmony_ci    EXPECT_EQ(errno, EFAULT);
2019762338dSopenharmony_ci    errno = 0;
2029762338dSopenharmony_ci    ret = getresuid(&realUid, nullptr, &savedUid);
2039762338dSopenharmony_ci    EXPECT_EQ(ret, -1);
2049762338dSopenharmony_ci    EXPECT_EQ(errno, EFAULT);
2059762338dSopenharmony_ci    errno = 0;
2069762338dSopenharmony_ci    ret = getresuid(&realUid, &effectiveUid, nullptr);
2079762338dSopenharmony_ci    EXPECT_EQ(ret, -1);
2089762338dSopenharmony_ci    EXPECT_EQ(errno, EFAULT);
2099762338dSopenharmony_ci}
2109762338dSopenharmony_ci
2119762338dSopenharmony_ci
2129762338dSopenharmony_ci/*
2139762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_0900
2149762338dSopenharmony_ci * @tc.name   : GetuidAcquireUIDSuccess_0009
2159762338dSopenharmony_ci * @tc.desc   : Getuid acquire user ID success.
2169762338dSopenharmony_ci * @tc.size   : MediumTest
2179762338dSopenharmony_ci * @tc.type   : Function
2189762338dSopenharmony_ci * @tc.level  : Level 1
2199762338dSopenharmony_ci */
2209762338dSopenharmony_ciHWTEST_F(UserApiTest, GetuidAcquireUIDSuccess_0009, Function | MediumTest | Level1)
2219762338dSopenharmony_ci{
2229762338dSopenharmony_ci    int ret;
2239762338dSopenharmony_ci    uid_t uid = getuid();
2249762338dSopenharmony_ci    EXPECT_TRUE(uid >= 0);
2259762338dSopenharmony_ci
2269762338dSopenharmony_ci    uid_t setUid = uid + 1;
2279762338dSopenharmony_ci    ret = setuid(setUid);
2289762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
2299762338dSopenharmony_ci
2309762338dSopenharmony_ci    uid_t newUid = getuid();
2319762338dSopenharmony_ci    EXPECT_EQ(newUid, setUid);
2329762338dSopenharmony_ci}
2339762338dSopenharmony_ci
2349762338dSopenharmony_ci/*
2359762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1000
2369762338dSopenharmony_ci * @tc.name   : PersonalitySetExecutionDomainSuccess_0010
2379762338dSopenharmony_ci * @tc.desc   : Personality set the process execution domain success.
2389762338dSopenharmony_ci * @tc.size   : MediumTest
2399762338dSopenharmony_ci * @tc.type   : Function
2409762338dSopenharmony_ci * @tc.level  : Level 1
2419762338dSopenharmony_ci */
2429762338dSopenharmony_ciHWTEST_F(UserApiTest, PersonalitySetExecutionDomainSuccess_0010, Function | MediumTest | Level1)
2439762338dSopenharmony_ci{
2449762338dSopenharmony_ci    int ret = personality(PER_LINUX32);
2459762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
2469762338dSopenharmony_ci    unsigned long currentPersonality = static_cast<unsigned long>(personality(RETRIEVE_PERSONALITY));
2479762338dSopenharmony_ci    EXPECT_EQ(currentPersonality, PER_LINUX32);
2489762338dSopenharmony_ci
2499762338dSopenharmony_ci    ret = personality(DEFAULT_PERSONALITY);
2509762338dSopenharmony_ci    EXPECT_GE(ret, 0);
2519762338dSopenharmony_ci}
2529762338dSopenharmony_ci
2539762338dSopenharmony_ci/*
2549762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1100
2559762338dSopenharmony_ci * @tc.name   : SetfsgidCurrentSuccess_0011
2569762338dSopenharmony_ci * @tc.desc   : Setfsgid set current gid.
2579762338dSopenharmony_ci * @tc.size   : MediumTest
2589762338dSopenharmony_ci * @tc.type   : Function
2599762338dSopenharmony_ci * @tc.level  : Level 1
2609762338dSopenharmony_ci */
2619762338dSopenharmony_ciHWTEST_F(UserApiTest, SetfsgidCurrentSuccess_0011, Function | MediumTest | Level1)
2629762338dSopenharmony_ci{
2639762338dSopenharmony_ci    int ret;
2649762338dSopenharmony_ci    ret = setfsgid(0);
2659762338dSopenharmony_ci    EXPECT_GE(ret, 0);
2669762338dSopenharmony_ci}
2679762338dSopenharmony_ci
2689762338dSopenharmony_ci/*
2699762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1200
2709762338dSopenharmony_ci * @tc.name   : SetfsgidInvalidFsgidFailed_0012
2719762338dSopenharmony_ci * @tc.desc   : Setfsgid set user ID success.
2729762338dSopenharmony_ci * @tc.size   : MediumTest
2739762338dSopenharmony_ci * @tc.type   : Function
2749762338dSopenharmony_ci * @tc.level  : Level 2
2759762338dSopenharmony_ci */
2769762338dSopenharmony_ciHWTEST_F(UserApiTest, SetfsgidInvalidFsgidFailed_0012, Function | MediumTest | Level2)
2779762338dSopenharmony_ci{
2789762338dSopenharmony_ci    int ret;
2799762338dSopenharmony_ci    ret = setfsgid(-1);
2809762338dSopenharmony_ci    EXPECT_GE(ret, -1);
2819762338dSopenharmony_ci    EXPECT_EQ(errno, EFAULT);
2829762338dSopenharmony_ci}
2839762338dSopenharmony_ci
2849762338dSopenharmony_ci/*
2859762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1300
2869762338dSopenharmony_ci * @tc.name   : SetfsuidSetFSUserIDSuccess_0013
2879762338dSopenharmony_ci * @tc.desc   : Setfsuid set user ID used for file system checks success.
2889762338dSopenharmony_ci * @tc.size   : MediumTest
2899762338dSopenharmony_ci * @tc.type   : Function
2909762338dSopenharmony_ci * @tc.level  : Level 1
2919762338dSopenharmony_ci */
2929762338dSopenharmony_ciHWTEST_F(UserApiTest, SetfsuidSetFSUserIDSuccess_0013, Function | MediumTest | Level1)
2939762338dSopenharmony_ci{
2949762338dSopenharmony_ci    int ret;
2959762338dSopenharmony_ci    uid_t effectiveUid = geteuid();
2969762338dSopenharmony_ci    EXPECT_TRUE(effectiveUid >= 0);
2979762338dSopenharmony_ci
2989762338dSopenharmony_ci    uid_t fsUid = effectiveUid + 1;
2999762338dSopenharmony_ci    ret = setfsuid(fsUid);
3009762338dSopenharmony_ci    EXPECT_GE(ret, 0);
3019762338dSopenharmony_ci}
3029762338dSopenharmony_ci
3039762338dSopenharmony_ci/*
3049762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1400
3059762338dSopenharmony_ci * @tc.name   : SetgidSetGroupIDSuccess_0014
3069762338dSopenharmony_ci * @tc.desc   : Setgid Set group ID success.
3079762338dSopenharmony_ci * @tc.size   : MediumTest
3089762338dSopenharmony_ci * @tc.type   : Function
3099762338dSopenharmony_ci * @tc.level  : Level 1
3109762338dSopenharmony_ci */
3119762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgidSetGroupIDSuccess_0014, Function | MediumTest | Level1)
3129762338dSopenharmony_ci{
3139762338dSopenharmony_ci    int ret;
3149762338dSopenharmony_ci    gid_t gid = getgid();
3159762338dSopenharmony_ci    EXPECT_TRUE(gid >= 0);
3169762338dSopenharmony_ci
3179762338dSopenharmony_ci    gid_t setGid = gid + 1;
3189762338dSopenharmony_ci    ret = setgid(setGid);
3199762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
3209762338dSopenharmony_ci
3219762338dSopenharmony_ci    gid_t newGid = getgid();
3229762338dSopenharmony_ci    EXPECT_EQ(newGid, setGid);
3239762338dSopenharmony_ci}
3249762338dSopenharmony_ci
3259762338dSopenharmony_ci/*
3269762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1500
3279762338dSopenharmony_ci * @tc.name   : SetgidSetGroupIDFail_0015
3289762338dSopenharmony_ci * @tc.desc   : Setgid Set group ID fail.
3299762338dSopenharmony_ci * @tc.size   : MediumTest
3309762338dSopenharmony_ci * @tc.type   : Function
3319762338dSopenharmony_ci * @tc.level  : Level 2
3329762338dSopenharmony_ci */
3339762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgidSetGroupIDFail_0015, Function | MediumTest | Level2)
3349762338dSopenharmony_ci{
3359762338dSopenharmony_ci    gid_t invalidGid = -1;
3369762338dSopenharmony_ci    errno = 0;
3379762338dSopenharmony_ci    int ret = setgid(invalidGid);
3389762338dSopenharmony_ci    EXPECT_EQ(ret, -1);
3399762338dSopenharmony_ci    EXPECT_EQ(errno, EINVAL);
3409762338dSopenharmony_ci}
3419762338dSopenharmony_ci
3429762338dSopenharmony_ci/*
3439762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1600
3449762338dSopenharmony_ci * @tc.name   : SetgroupsSetGroupIDListSuccess_0016
3459762338dSopenharmony_ci * @tc.desc   : Setgroups set list of supplementary group IDs success.
3469762338dSopenharmony_ci * @tc.size   : MediumTest
3479762338dSopenharmony_ci * @tc.type   : Function
3489762338dSopenharmony_ci * @tc.level  : Level 1
3499762338dSopenharmony_ci */
3509762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgroupsSetGroupIDListSuccess_0016, Function | MediumTest | Level1)
3519762338dSopenharmony_ci{
3529762338dSopenharmony_ci    int numGroups;
3539762338dSopenharmony_ci    int ret;
3549762338dSopenharmony_ci    const int groupLength = 3;
3559762338dSopenharmony_ci    gid_t groups[groupLength] = { 1001, 1002, 1003 };
3569762338dSopenharmony_ci    gid_t groupsCheck[MAX_GROUPS];
3579762338dSopenharmony_ci
3589762338dSopenharmony_ci    ret = setgroups(groupLength, groups);
3599762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
3609762338dSopenharmony_ci    numGroups = getgroups(MAX_GROUPS, groupsCheck);
3619762338dSopenharmony_ci    EXPECT_EQ(numGroups, groupLength);
3629762338dSopenharmony_ci    for (int i = 0; i < numGroups; i++) {
3639762338dSopenharmony_ci        EXPECT_EQ(groups[i], groupsCheck[i]);
3649762338dSopenharmony_ci    }
3659762338dSopenharmony_ci}
3669762338dSopenharmony_ci
3679762338dSopenharmony_ci/*
3689762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1700
3699762338dSopenharmony_ci * @tc.name   : SetgroupsSetGroupIDNullptrFail_0017
3709762338dSopenharmony_ci * @tc.desc   : Setgroups set list of supplementary group IDs in nullptr fail, errno EFAULT.
3719762338dSopenharmony_ci * @tc.size   : MediumTest
3729762338dSopenharmony_ci * @tc.type   : Function
3739762338dSopenharmony_ci * @tc.level  : Level 2
3749762338dSopenharmony_ci */
3759762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgroupsSetGroupIDNullptrFail_0017, Function | MediumTest | Level2)
3769762338dSopenharmony_ci{
3779762338dSopenharmony_ci    errno = 0;
3789762338dSopenharmony_ci    int ret = setgroups(MAX_GROUPS, nullptr);
3799762338dSopenharmony_ci    EXPECT_EQ(ret, -1);
3809762338dSopenharmony_ci    EXPECT_EQ(errno, EFAULT);
3819762338dSopenharmony_ci
3829762338dSopenharmony_ci    errno = 0;
3839762338dSopenharmony_ci    ret = getgroups(MAX_GROUPS, nullptr);
3849762338dSopenharmony_ci    EXPECT_EQ(ret, -1);
3859762338dSopenharmony_ci    EXPECT_EQ(errno, EFAULT);
3869762338dSopenharmony_ci}
3879762338dSopenharmony_ci
3889762338dSopenharmony_ci/*
3899762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1800
3909762338dSopenharmony_ci * @tc.name   : SetregidSetRealEffectiveGIDSuccess_0018
3919762338dSopenharmony_ci * @tc.desc   : Setregid Set real and effective group ID success.
3929762338dSopenharmony_ci * @tc.size   : MediumTest
3939762338dSopenharmony_ci * @tc.type   : Function
3949762338dSopenharmony_ci * @tc.level  : Level 1
3959762338dSopenharmony_ci */
3969762338dSopenharmony_ciHWTEST_F(UserApiTest, SetregidSetRealEffectiveGIDSuccess_0018, Function | MediumTest | Level1)
3979762338dSopenharmony_ci{
3989762338dSopenharmony_ci    int ret;
3999762338dSopenharmony_ci    gid_t realGid = getgid();
4009762338dSopenharmony_ci    EXPECT_TRUE(realGid >= 0);
4019762338dSopenharmony_ci    gid_t effectiveGid = getegid();
4029762338dSopenharmony_ci    EXPECT_TRUE(effectiveGid >= 0);
4039762338dSopenharmony_ci
4049762338dSopenharmony_ci    gid_t setRealGid = realGid + 1;
4059762338dSopenharmony_ci    gid_t setEffectiveGid = effectiveGid + 1;
4069762338dSopenharmony_ci    ret = setregid(setRealGid, setEffectiveGid);
4079762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
4089762338dSopenharmony_ci
4099762338dSopenharmony_ci    gid_t newRealGid = getgid();
4109762338dSopenharmony_ci    EXPECT_EQ(newRealGid, setRealGid);
4119762338dSopenharmony_ci    gid_t newEffectiveGid = getegid();
4129762338dSopenharmony_ci    EXPECT_EQ(newEffectiveGid, setEffectiveGid);
4139762338dSopenharmony_ci}
4149762338dSopenharmony_ci
4159762338dSopenharmony_ci/*
4169762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_1900
4179762338dSopenharmony_ci * @tc.name   : SetresgidSetRealEffectiveSavedGIDSuccess_0019
4189762338dSopenharmony_ci * @tc.desc   : Setresgid Set real effective and saved group ID success.
4199762338dSopenharmony_ci * @tc.size   : MediumTest
4209762338dSopenharmony_ci * @tc.type   : Function
4219762338dSopenharmony_ci * @tc.level  : Level 1
4229762338dSopenharmony_ci */
4239762338dSopenharmony_ciHWTEST_F(UserApiTest, SetresgidSetRealEffectiveSavedGIDSuccess_0019, Function | MediumTest | Level1)
4249762338dSopenharmony_ci{
4259762338dSopenharmony_ci    int ret;
4269762338dSopenharmony_ci    pid_t pid = getpid();
4279762338dSopenharmony_ci    gid_t realGid = getgid();
4289762338dSopenharmony_ci    EXPECT_TRUE(realGid >= 0);
4299762338dSopenharmony_ci    gid_t effectiveGid = getegid();
4309762338dSopenharmony_ci    EXPECT_TRUE(effectiveGid >= 0);
4319762338dSopenharmony_ci    gid_t savedGid = getsid(pid);
4329762338dSopenharmony_ci    EXPECT_TRUE(savedGid >= 0);
4339762338dSopenharmony_ci
4349762338dSopenharmony_ci    gid_t setRealGid = realGid + 1;
4359762338dSopenharmony_ci    gid_t setEffectiveGid = effectiveGid + 1;
4369762338dSopenharmony_ci    gid_t notModifySavedGid = -1;
4379762338dSopenharmony_ci    ret = setresgid(setRealGid, setEffectiveGid, notModifySavedGid);
4389762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
4399762338dSopenharmony_ci
4409762338dSopenharmony_ci    gid_t newRealGid = getgid();
4419762338dSopenharmony_ci    EXPECT_EQ(newRealGid, setRealGid);
4429762338dSopenharmony_ci    gid_t newEffectiveGid = getegid();
4439762338dSopenharmony_ci    EXPECT_EQ(newEffectiveGid, setEffectiveGid);
4449762338dSopenharmony_ci    gid_t newSavedGid = getsid(pid);
4459762338dSopenharmony_ci    EXPECT_EQ(newSavedGid, savedGid);
4469762338dSopenharmony_ci}
4479762338dSopenharmony_ci
4489762338dSopenharmony_ci/*
4499762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_2000
4509762338dSopenharmony_ci * @tc.name   : SetresuidSuccess_0020
4519762338dSopenharmony_ci * @tc.desc   : Setresuid set current uid.
4529762338dSopenharmony_ci * @tc.size   : MediumTest
4539762338dSopenharmony_ci * @tc.type   : Function
4549762338dSopenharmony_ci * @tc.level  : Level 1
4559762338dSopenharmony_ci */
4569762338dSopenharmony_ciHWTEST_F(UserApiTest, SetresuidSuccess_0020, Function | MediumTest | Level1)
4579762338dSopenharmony_ci{
4589762338dSopenharmony_ci    int ret;
4599762338dSopenharmony_ci    ret = setresuid(0, 0, 0);
4609762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
4619762338dSopenharmony_ci}
4629762338dSopenharmony_ci
4639762338dSopenharmony_ci/*
4649762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_2100
4659762338dSopenharmony_ci * @tc.name   : SetreuidSuccess_0021
4669762338dSopenharmony_ci * @tc.desc   : Setresuid Set current uid.
4679762338dSopenharmony_ci * @tc.size   : MediumTest
4689762338dSopenharmony_ci * @tc.type   : Function
4699762338dSopenharmony_ci * @tc.level  : Level 1
4709762338dSopenharmony_ci */
4719762338dSopenharmony_ciHWTEST_F(UserApiTest, SetreuidSuccess_0021, Function | MediumTest | Level1)
4729762338dSopenharmony_ci{
4739762338dSopenharmony_ci    int ret;
4749762338dSopenharmony_ci    ret = setreuid(0, 0);
4759762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
4769762338dSopenharmony_ci}
4779762338dSopenharmony_ci
4789762338dSopenharmony_ci/*
4799762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_2200
4809762338dSopenharmony_ci * @tc.name   : SetuidSetUserIDSuccess_0022
4819762338dSopenharmony_ci * @tc.desc   : Setuid set user ID success.
4829762338dSopenharmony_ci * @tc.size   : MediumTest
4839762338dSopenharmony_ci * @tc.type   : Function
4849762338dSopenharmony_ci * @tc.level  : Level 1
4859762338dSopenharmony_ci */
4869762338dSopenharmony_ciHWTEST_F(UserApiTest, SetuidSetUserIDSuccess_0022, Function | MediumTest | Level1)
4879762338dSopenharmony_ci{
4889762338dSopenharmony_ci    int ret;
4899762338dSopenharmony_ci    uid_t uid = getuid();
4909762338dSopenharmony_ci    EXPECT_TRUE(uid >= 0);
4919762338dSopenharmony_ci
4929762338dSopenharmony_ci    uid_t setUid = uid + 1;
4939762338dSopenharmony_ci    ret = setuid(setUid);
4949762338dSopenharmony_ci    EXPECT_EQ(ret, 0);
4959762338dSopenharmony_ci
4969762338dSopenharmony_ci    uid_t newUid = getuid();
4979762338dSopenharmony_ci    EXPECT_EQ(newUid, setUid);
4989762338dSopenharmony_ci}
4999762338dSopenharmony_ci
5009762338dSopenharmony_ci/*
5019762338dSopenharmony_ci * @tc.number : SUB_KERNEL_SYSCALL_USER_2300
5029762338dSopenharmony_ci * @tc.name   : SetgidSetInvalidUIDFail_0023
5039762338dSopenharmony_ci * @tc.desc   : Setgid set invalid user ID fail.
5049762338dSopenharmony_ci * @tc.size   : MediumTest
5059762338dSopenharmony_ci * @tc.type   : Function
5069762338dSopenharmony_ci * @tc.level  : Level 2
5079762338dSopenharmony_ci */
5089762338dSopenharmony_ciHWTEST_F(UserApiTest, SetgidSetInvalidUIDFail_0023, Function | MediumTest | Level2)
5099762338dSopenharmony_ci{
5109762338dSopenharmony_ci    uid_t invalidUid = -1;
5119762338dSopenharmony_ci    errno = 0;
5129762338dSopenharmony_ci    int ret = setuid(invalidUid);
5139762338dSopenharmony_ci    EXPECT_EQ(ret, -1);
5149762338dSopenharmony_ci    EXPECT_EQ(errno, EINVAL);
5159762338dSopenharmony_ci}