14a616216Sopenharmony_ci/* 24a616216Sopenharmony_ci * Copyright (C) 2022-2023 Huawei Device Co., Ltd. 34a616216Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44a616216Sopenharmony_ci * you may not use this file except in compliance with the License. 54a616216Sopenharmony_ci * You may obtain a copy of the License at 64a616216Sopenharmony_ci * 74a616216Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84a616216Sopenharmony_ci * 94a616216Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104a616216Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114a616216Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124a616216Sopenharmony_ci * See the License for the specific language governing permissions and 134a616216Sopenharmony_ci * limitations under the License. 144a616216Sopenharmony_ci */ 154a616216Sopenharmony_ci 164a616216Sopenharmony_ci#include <iostream> 174a616216Sopenharmony_ci#include <mutex> 184a616216Sopenharmony_ci#include <thread> 194a616216Sopenharmony_ci#include <condition_variable> 204a616216Sopenharmony_ci#include "gtest/gtest.h" 214a616216Sopenharmony_ci#include "file_ex.h" 224a616216Sopenharmony_ci#include "securec.h" 234a616216Sopenharmony_ci#include "parameter.h" 244a616216Sopenharmony_ci#include "dev_slinfo_adpt.h" 254a616216Sopenharmony_ci#include "DevSLMgrTest.h" 264a616216Sopenharmony_ci#include "DevslinfoListTest.h" 274a616216Sopenharmony_ci#include "nativetoken_kit.h" 284a616216Sopenharmony_ci#include "token_setproc.h" 294a616216Sopenharmony_ci#include "accesstoken_kit.h" 304a616216Sopenharmony_ci 314a616216Sopenharmony_ciusing namespace testing::ext; 324a616216Sopenharmony_ciclass DevSLMgrTest : public testing::Test { 334a616216Sopenharmony_cipublic: 344a616216Sopenharmony_ci DevSLMgrTest(); 354a616216Sopenharmony_ci ~DevSLMgrTest(); 364a616216Sopenharmony_ci static void SetUpTestCase(); 374a616216Sopenharmony_ci static void TearDownTestCase(); 384a616216Sopenharmony_ci void SetUp() override; 394a616216Sopenharmony_ci void TearDown() override; 404a616216Sopenharmony_ciprivate: 414a616216Sopenharmony_ci static bool isEnforcing_; 424a616216Sopenharmony_ci}; 434a616216Sopenharmony_ci 444a616216Sopenharmony_cistatic const int32_t DEV_SEC_LEVEL_ERR = 100; 454a616216Sopenharmony_cistatic const int32_t LIST_LENGTH = 128; 464a616216Sopenharmony_ci 474a616216Sopenharmony_cistruct DeviceSecurityInfo { 484a616216Sopenharmony_ci uint32_t magicNum {0}; 494a616216Sopenharmony_ci uint32_t result {0}; 504a616216Sopenharmony_ci uint32_t level {0}; 514a616216Sopenharmony_ci}; 524a616216Sopenharmony_ci 534a616216Sopenharmony_ciextern "C" { 544a616216Sopenharmony_ci extern void OnApiDeviceSecInfoCallback(const DeviceIdentify *identify, struct DeviceSecurityInfo *info); 554a616216Sopenharmony_ci} 564a616216Sopenharmony_ci 574a616216Sopenharmony_cistatic void NativeTokenGet() 584a616216Sopenharmony_ci{ 594a616216Sopenharmony_ci uint64_t tokenId; 604a616216Sopenharmony_ci const char **perms = new const char *[1]; 614a616216Sopenharmony_ci perms[0] = "ohos.permission.DISTRIBUTED_DATASYNC"; 624a616216Sopenharmony_ci NativeTokenInfoParams infoInstance = { 634a616216Sopenharmony_ci .dcapsNum = 0, 644a616216Sopenharmony_ci .permsNum = 1, 654a616216Sopenharmony_ci .aclsNum = 0, 664a616216Sopenharmony_ci .dcaps = nullptr, 674a616216Sopenharmony_ci .perms = perms, 684a616216Sopenharmony_ci .acls = nullptr, 694a616216Sopenharmony_ci .aplStr = "system_basic", 704a616216Sopenharmony_ci }; 714a616216Sopenharmony_ci 724a616216Sopenharmony_ci infoInstance.processName = "DevSLMgrTest"; 734a616216Sopenharmony_ci tokenId = GetAccessTokenId(&infoInstance); 744a616216Sopenharmony_ci SetSelfTokenID(tokenId); 754a616216Sopenharmony_ci OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); 764a616216Sopenharmony_ci delete[] perms; 774a616216Sopenharmony_ci} 784a616216Sopenharmony_ci 794a616216Sopenharmony_ciDevSLMgrTest::DevSLMgrTest() {} 804a616216Sopenharmony_ciDevSLMgrTest::~DevSLMgrTest() {} 814a616216Sopenharmony_civoid DevSLMgrTest::SetUpTestCase() 824a616216Sopenharmony_ci{ 834a616216Sopenharmony_ci string isEnforcing; 844a616216Sopenharmony_ci OHOS::LoadStringFromFile("/sys/fs/selinux/enforce", isEnforcing); 854a616216Sopenharmony_ci if (isEnforcing.compare("1") == 0) { 864a616216Sopenharmony_ci DevSLMgrTest::isEnforcing_ = true; 874a616216Sopenharmony_ci OHOS::SaveStringToFile("/sys/fs/selinux/enforce", "0"); 884a616216Sopenharmony_ci } 894a616216Sopenharmony_ci NativeTokenGet(); 904a616216Sopenharmony_ci} 914a616216Sopenharmony_civoid DevSLMgrTest::TearDownTestCase() 924a616216Sopenharmony_ci{ 934a616216Sopenharmony_ci if (DevSLMgrTest::isEnforcing_) { 944a616216Sopenharmony_ci OHOS::SaveStringToFile("/sys/fs/selinux/enforce", "1"); 954a616216Sopenharmony_ci } 964a616216Sopenharmony_ci} 974a616216Sopenharmony_civoid DevSLMgrTest::SetUp() {} 984a616216Sopenharmony_ci 994a616216Sopenharmony_civoid DevSLMgrTest::TearDown() {} 1004a616216Sopenharmony_ci 1014a616216Sopenharmony_cibool DevSLMgrTest::isEnforcing_ = false; 1024a616216Sopenharmony_ci 1034a616216Sopenharmony_cistatic void DATASL_GetUdidByOpp(DEVSLQueryParams *queryParams) 1044a616216Sopenharmony_ci{ 1054a616216Sopenharmony_ci char udid[65] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; 1064a616216Sopenharmony_ci (void)memcpy_s(queryParams->udid, MAX_UDID_LENGTH, udid, MAX_UDID_LENGTH); 1074a616216Sopenharmony_ci queryParams->udidLen = MAX_UDID_LENGTH; 1084a616216Sopenharmony_ci} 1094a616216Sopenharmony_ci 1104a616216Sopenharmony_cistatic void DATASL_GetUdidByExcept(DEVSLQueryParams *queryParams) 1114a616216Sopenharmony_ci{ 1124a616216Sopenharmony_ci char udid[65] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; 1134a616216Sopenharmony_ci (void)memcpy_s(queryParams->udid, MAX_UDID_LENGTH, udid, MAX_UDID_LENGTH); 1144a616216Sopenharmony_ci queryParams->udidLen = MAX_UDID_LENGTH + 1; 1154a616216Sopenharmony_ci} 1164a616216Sopenharmony_ci 1174a616216Sopenharmony_cistatic void DATASL_GetUdidByExceptZero(DEVSLQueryParams *queryParams) 1184a616216Sopenharmony_ci{ 1194a616216Sopenharmony_ci char udid[65] = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; 1204a616216Sopenharmony_ci (void)memcpy_s(queryParams->udid, MAX_UDID_LENGTH, udid, MAX_UDID_LENGTH); 1214a616216Sopenharmony_ci queryParams->udidLen = 0; 1224a616216Sopenharmony_ci} 1234a616216Sopenharmony_ci 1244a616216Sopenharmony_cistatic int32_t GetLocalUdid(DEVSLQueryParams *queryParams) 1254a616216Sopenharmony_ci{ 1264a616216Sopenharmony_ci char udid[65] = {0}; 1274a616216Sopenharmony_ci int32_t ret = GetDevUdid(udid, MAX_UDID_LENGTH + 1); 1284a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 1294a616216Sopenharmony_ci 1304a616216Sopenharmony_ci (void)memcpy_s(queryParams->udid, MAX_UDID_LENGTH, udid, MAX_UDID_LENGTH); 1314a616216Sopenharmony_ci queryParams->udidLen = MAX_UDID_LENGTH; 1324a616216Sopenharmony_ci return ret; 1334a616216Sopenharmony_ci} 1344a616216Sopenharmony_ci 1354a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestOnstart, TestSize.Level1) 1364a616216Sopenharmony_ci{ 1374a616216Sopenharmony_ci int32_t ret; 1384a616216Sopenharmony_ci 1394a616216Sopenharmony_ci ret = DATASL_OnStart(); 1404a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 1414a616216Sopenharmony_ci DATASL_OnStop(); 1424a616216Sopenharmony_ci} 1434a616216Sopenharmony_ci 1444a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevel001, TestSize.Level1) 1454a616216Sopenharmony_ci{ 1464a616216Sopenharmony_ci int32_t ret; 1474a616216Sopenharmony_ci uint32_t levelInfo = 0; 1484a616216Sopenharmony_ci 1494a616216Sopenharmony_ci ret = DATASL_OnStart(); 1504a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 1514a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevel(nullptr, &levelInfo); 1524a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, ret); 1534a616216Sopenharmony_ci DATASL_OnStop(); 1544a616216Sopenharmony_ci} 1554a616216Sopenharmony_ci 1564a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevel002, TestSize.Level1) 1574a616216Sopenharmony_ci{ 1584a616216Sopenharmony_ci int32_t ret; 1594a616216Sopenharmony_ci 1604a616216Sopenharmony_ci DEVSLQueryParams queryParams; 1614a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 1624a616216Sopenharmony_ci DATASL_GetUdidByOpp(&queryParams); 1634a616216Sopenharmony_ci 1644a616216Sopenharmony_ci ret = DATASL_OnStart(); 1654a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 1664a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevel(&queryParams, nullptr); 1674a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, ret); 1684a616216Sopenharmony_ci DATASL_OnStop(); 1694a616216Sopenharmony_ci} 1704a616216Sopenharmony_ci 1714a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevel003, TestSize.Level1) 1724a616216Sopenharmony_ci{ 1734a616216Sopenharmony_ci int32_t ret; 1744a616216Sopenharmony_ci uint32_t levelInfo = 0; 1754a616216Sopenharmony_ci 1764a616216Sopenharmony_ci DEVSLQueryParams queryParams; 1774a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 1784a616216Sopenharmony_ci DATASL_GetUdidByOpp(&queryParams); 1794a616216Sopenharmony_ci 1804a616216Sopenharmony_ci ret = DATASL_OnStart(); 1814a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 1824a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevel(&queryParams, &levelInfo); 1834a616216Sopenharmony_ci EXPECT_EQ(DATA_SEC_LEVEL0, static_cast<int32_t>(levelInfo)); 1844a616216Sopenharmony_ci EXPECT_EQ(ERR_NOEXIST_DEVICE, ret); 1854a616216Sopenharmony_ci DATASL_OnStop(); 1864a616216Sopenharmony_ci} 1874a616216Sopenharmony_ci 1884a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevel004, TestSize.Level1) 1894a616216Sopenharmony_ci{ 1904a616216Sopenharmony_ci int32_t ret; 1914a616216Sopenharmony_ci uint32_t levelInfo = 0; 1924a616216Sopenharmony_ci 1934a616216Sopenharmony_ci DEVSLQueryParams queryParams; 1944a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 1954a616216Sopenharmony_ci ret = GetLocalUdid(&queryParams); 1964a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 1974a616216Sopenharmony_ci 1984a616216Sopenharmony_ci ret = DATASL_OnStart(); 1994a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 2004a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevel(&queryParams, &levelInfo); 2014a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 2024a616216Sopenharmony_ci DATASL_OnStop(); 2034a616216Sopenharmony_ci} 2044a616216Sopenharmony_ci 2054a616216Sopenharmony_cistatic void tmpCallback000(DEVSLQueryParams *queryParams, int32_t result, uint32_t levelInfo) 2064a616216Sopenharmony_ci{ 2074a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, result); 2084a616216Sopenharmony_ci} 2094a616216Sopenharmony_ci 2104a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelAsync001, TestSize.Level1) 2114a616216Sopenharmony_ci{ 2124a616216Sopenharmony_ci int32_t ret; 2134a616216Sopenharmony_ci 2144a616216Sopenharmony_ci ret = DATASL_OnStart(); 2154a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 2164a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevelAsync(nullptr, &tmpCallback000); 2174a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, ret); 2184a616216Sopenharmony_ci DATASL_OnStop(); 2194a616216Sopenharmony_ci} 2204a616216Sopenharmony_ci 2214a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelAsync002, TestSize.Level1) 2224a616216Sopenharmony_ci{ 2234a616216Sopenharmony_ci int32_t ret; 2244a616216Sopenharmony_ci DEVSLQueryParams queryParams; 2254a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 2264a616216Sopenharmony_ci DATASL_GetUdidByOpp(&queryParams); 2274a616216Sopenharmony_ci 2284a616216Sopenharmony_ci ret = DATASL_OnStart(); 2294a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 2304a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevelAsync(&queryParams, nullptr); 2314a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, ret); 2324a616216Sopenharmony_ci DATASL_OnStop(); 2334a616216Sopenharmony_ci} 2344a616216Sopenharmony_ci 2354a616216Sopenharmony_cistatic void tmpCallback(DEVSLQueryParams *queryParams, int32_t result, uint32_t levelInfo) 2364a616216Sopenharmony_ci{ 2374a616216Sopenharmony_ci EXPECT_EQ(ERR_NOEXIST_DEVICE, result); 2384a616216Sopenharmony_ci EXPECT_EQ(DATA_SEC_LEVEL0, static_cast<int32_t>(levelInfo)); 2394a616216Sopenharmony_ci} 2404a616216Sopenharmony_ci 2414a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelAsync003, TestSize.Level1) 2424a616216Sopenharmony_ci{ 2434a616216Sopenharmony_ci int32_t ret; 2444a616216Sopenharmony_ci DEVSLQueryParams queryParams; 2454a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 2464a616216Sopenharmony_ci DATASL_GetUdidByOpp(&queryParams); 2474a616216Sopenharmony_ci 2484a616216Sopenharmony_ci ret = DATASL_OnStart(); 2494a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 2504a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevelAsync(&queryParams, &tmpCallback); 2514a616216Sopenharmony_ci EXPECT_EQ(ERR_NOEXIST_DEVICE, ret); 2524a616216Sopenharmony_ci DATASL_OnStop(); 2534a616216Sopenharmony_ci} 2544a616216Sopenharmony_ci 2554a616216Sopenharmony_cistatic int32_t g_cnt = 0; 2564a616216Sopenharmony_cistatic std::mutex g_mtx; 2574a616216Sopenharmony_cistatic std::condition_variable g_cv; 2584a616216Sopenharmony_ci 2594a616216Sopenharmony_cistatic void tmpCallbackLocal(DEVSLQueryParams *queryParams, int32_t result, uint32_t levelInfo) 2604a616216Sopenharmony_ci{ 2614a616216Sopenharmony_ci g_cnt++; 2624a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, result); 2634a616216Sopenharmony_ci} 2644a616216Sopenharmony_ci 2654a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelAsync004, TestSize.Level1) 2664a616216Sopenharmony_ci{ 2674a616216Sopenharmony_ci int32_t ret; 2684a616216Sopenharmony_ci DEVSLQueryParams queryParams; 2694a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 2704a616216Sopenharmony_ci ret = GetLocalUdid(&queryParams); 2714a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 2724a616216Sopenharmony_ci 2734a616216Sopenharmony_ci ret = DATASL_OnStart(); 2744a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 2754a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevelAsync(&queryParams, &tmpCallbackLocal); 2764a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 2774a616216Sopenharmony_ci 2784a616216Sopenharmony_ci std::unique_lock<std::mutex> lck(g_mtx); 2794a616216Sopenharmony_ci g_cv.wait_for(lck, std::chrono::milliseconds(2000), []() { return (g_cnt == 1); }); 2804a616216Sopenharmony_ci EXPECT_EQ(g_cnt, 1); 2814a616216Sopenharmony_ci 2824a616216Sopenharmony_ci DATASL_OnStop(); 2834a616216Sopenharmony_ci} 2844a616216Sopenharmony_ci 2854a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelExcept001, TestSize.Level1) 2864a616216Sopenharmony_ci{ 2874a616216Sopenharmony_ci OnApiDeviceSecInfoCallback(nullptr, nullptr); 2884a616216Sopenharmony_ci GetDeviceSecLevelByUdidAsync(nullptr, 0); 2894a616216Sopenharmony_ci int32_t ret; 2904a616216Sopenharmony_ci uint32_t levelInfo = 0; 2914a616216Sopenharmony_ci int32_t devLevel = 0; 2924a616216Sopenharmony_ci DEVSLQueryParams queryParams; 2934a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 2944a616216Sopenharmony_ci DATASL_GetUdidByExcept(&queryParams); 2954a616216Sopenharmony_ci ret = GetDeviceSecLevelByUdid(static_cast<const uint8_t *>(queryParams.udid), queryParams.udidLen, &devLevel); 2964a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERROR, ret); 2974a616216Sopenharmony_ci ret = DATASL_OnStart(); 2984a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 2994a616216Sopenharmony_ci ret = StartDevslEnv(); 3004a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 3014a616216Sopenharmony_ci 3024a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevel(&queryParams, &levelInfo); 3034a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, ret); 3044a616216Sopenharmony_ci 3054a616216Sopenharmony_ci DeviceIdentify devId; 3064a616216Sopenharmony_ci (void)memset_s(&devId, sizeof(devId), 0, sizeof(devId)); 3074a616216Sopenharmony_ci (void)memcpy_s(devId.identity, MAX_UDID_LENGTH, queryParams.udid, queryParams.udidLen); 3084a616216Sopenharmony_ci devId.length = queryParams.udidLen; 3094a616216Sopenharmony_ci DeviceSecurityInfo devInfo; 3104a616216Sopenharmony_ci 3114a616216Sopenharmony_ci OnApiDeviceSecInfoCallback(&devId, nullptr); 3124a616216Sopenharmony_ci OnApiDeviceSecInfoCallback(&devId, &devInfo); 3134a616216Sopenharmony_ci 3144a616216Sopenharmony_ci DATASL_OnStop(); 3154a616216Sopenharmony_ci} 3164a616216Sopenharmony_ci 3174a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelExcept002, TestSize.Level1) 3184a616216Sopenharmony_ci{ 3194a616216Sopenharmony_ci int32_t ret; 3204a616216Sopenharmony_ci int32_t devLevel = 0; 3214a616216Sopenharmony_ci ret = DATASL_OnStart(); 3224a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 3234a616216Sopenharmony_ci 3244a616216Sopenharmony_ci DEVSLQueryParams queryParamsLocal; 3254a616216Sopenharmony_ci (void)memset_s(&queryParamsLocal, sizeof(queryParamsLocal), 0, sizeof(queryParamsLocal)); 3264a616216Sopenharmony_ci ret = GetLocalUdid(&queryParamsLocal); 3274a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 3284a616216Sopenharmony_ci 3294a616216Sopenharmony_ci DeviceSecurityInfo devInfo; 3304a616216Sopenharmony_ci DeviceIdentify devIdLocal; 3314a616216Sopenharmony_ci (void)memset_s(&devIdLocal, sizeof(devIdLocal), 0, sizeof(devIdLocal)); 3324a616216Sopenharmony_ci (void)memcpy_s(devIdLocal.identity, MAX_UDID_LENGTH, queryParamsLocal.udid, queryParamsLocal.udidLen); 3334a616216Sopenharmony_ci devIdLocal.length = queryParamsLocal.udidLen; 3344a616216Sopenharmony_ci OnApiDeviceSecInfoCallback(&devIdLocal, &devInfo); 3354a616216Sopenharmony_ci 3364a616216Sopenharmony_ci DEVSLQueryParams queryParams; 3374a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 3384a616216Sopenharmony_ci DATASL_GetUdidByExcept(&queryParams); 3394a616216Sopenharmony_ci DEVSLQueryParams queryParamsOpp; 3404a616216Sopenharmony_ci (void)memset_s(&queryParamsOpp, sizeof(queryParamsOpp), 0, sizeof(queryParamsOpp)); 3414a616216Sopenharmony_ci DATASL_GetUdidByOpp(&queryParamsOpp); 3424a616216Sopenharmony_ci ret = GetDeviceSecLevelByUdid(static_cast<const uint8_t *>(queryParamsOpp.udid), queryParamsOpp.udidLen, &devLevel); 3434a616216Sopenharmony_ci EXPECT_EQ(ERR_NOEXIST_DEVICE, ret); 3444a616216Sopenharmony_ci 3454a616216Sopenharmony_ci DeviceIdentify devIdOpp; 3464a616216Sopenharmony_ci OnApiDeviceSecInfoCallback(&devIdOpp, &devInfo); 3474a616216Sopenharmony_ci 3484a616216Sopenharmony_ci ret = CompareUdid(&queryParamsLocal, &queryParams); 3494a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERROR, ret); 3504a616216Sopenharmony_ci 3514a616216Sopenharmony_ci ret = CompareUdid(&queryParamsLocal, &queryParamsOpp); 3524a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERROR, ret); 3534a616216Sopenharmony_ci 3544a616216Sopenharmony_ci ret = CompareUdid(&queryParamsLocal, &queryParamsLocal); 3554a616216Sopenharmony_ci 3564a616216Sopenharmony_ci uint32_t result = GetDataSecLevelByDevSecLevel(DEV_SEC_LEVEL_ERR); 3574a616216Sopenharmony_ci EXPECT_EQ(DATA_SEC_LEVEL0, result); 3584a616216Sopenharmony_ci 3594a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 3604a616216Sopenharmony_ci DATASL_OnStop(); 3614a616216Sopenharmony_ci} 3624a616216Sopenharmony_ci 3634a616216Sopenharmony_cistatic struct DATASLListParams *g_tmpList = nullptr; 3644a616216Sopenharmony_ci 3654a616216Sopenharmony_cistatic void ListCallback(DEVSLQueryParams *queryParams, int32_t result, uint32_t levelInfo) 3664a616216Sopenharmony_ci{ 3674a616216Sopenharmony_ci EXPECT_EQ(result, DEVSL_SUCCESS); 3684a616216Sopenharmony_ci} 3694a616216Sopenharmony_ci 3704a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelExcept003, TestSize.Level1) 3714a616216Sopenharmony_ci{ 3724a616216Sopenharmony_ci int32_t ret = InitPthreadMutex(); 3734a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 3744a616216Sopenharmony_ci 3754a616216Sopenharmony_ci ClearList(g_tmpList); 3764a616216Sopenharmony_ci DEVSLQueryParams queryParamsOpp; 3774a616216Sopenharmony_ci (void)memset_s(&queryParamsOpp, sizeof(queryParamsOpp), 0, sizeof(queryParamsOpp)); 3784a616216Sopenharmony_ci DATASL_GetUdidByOpp(&queryParamsOpp); 3794a616216Sopenharmony_ci 3804a616216Sopenharmony_ci DeviceIdentify devIdOpp; 3814a616216Sopenharmony_ci (void)memset_s(&devIdOpp, sizeof(devIdOpp), 0, sizeof(devIdOpp)); 3824a616216Sopenharmony_ci (void)memcpy_s(devIdOpp.identity, MAX_UDID_LENGTH, queryParamsOpp.udid, queryParamsOpp.udidLen); 3834a616216Sopenharmony_ci devIdOpp.length = queryParamsOpp.udidLen; 3844a616216Sopenharmony_ci DeviceSecurityInfo devInfo; 3854a616216Sopenharmony_ci 3864a616216Sopenharmony_ci OnApiDeviceSecInfoCallback(&devIdOpp, &devInfo); 3874a616216Sopenharmony_ci 3884a616216Sopenharmony_ci g_tmpList = InitList(); 3894a616216Sopenharmony_ci EXPECT_NE(g_tmpList, nullptr); 3904a616216Sopenharmony_ci 3914a616216Sopenharmony_ci struct DATASLCallbackParams *newListNode = 3924a616216Sopenharmony_ci (struct DATASLCallbackParams*)malloc(sizeof(struct DATASLCallbackParams)); 3934a616216Sopenharmony_ci EXPECT_NE(newListNode, nullptr); 3944a616216Sopenharmony_ci (void)memcpy_s(newListNode->queryParams.udid, MAX_UDID_LENGTH, queryParamsOpp.udid, queryParamsOpp.udidLen); 3954a616216Sopenharmony_ci newListNode->queryParams.udidLen = queryParamsOpp.udidLen; 3964a616216Sopenharmony_ci newListNode->callback = &ListCallback; 3974a616216Sopenharmony_ci 3984a616216Sopenharmony_ci PushListNode(g_tmpList, newListNode); 3994a616216Sopenharmony_ci RemoveListNode(g_tmpList, newListNode); 4004a616216Sopenharmony_ci ClearList(g_tmpList); 4014a616216Sopenharmony_ci g_tmpList = nullptr; 4024a616216Sopenharmony_ci DestroyPthreadMutex(); 4034a616216Sopenharmony_ci} 4044a616216Sopenharmony_ci 4054a616216Sopenharmony_cistatic void tmpCallbackExcept004(DEVSLQueryParams *queryParams, int32_t result, uint32_t levelInfo) 4064a616216Sopenharmony_ci{ 4074a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, result); 4084a616216Sopenharmony_ci} 4094a616216Sopenharmony_ci 4104a616216Sopenharmony_cistatic void AddList(void) 4114a616216Sopenharmony_ci{ 4124a616216Sopenharmony_ci DEVSLQueryParams queryParams; 4134a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 4144a616216Sopenharmony_ci (void)GetLocalUdid(&queryParams); 4154a616216Sopenharmony_ci 4164a616216Sopenharmony_ci struct DATASLCallbackParams *newListNode = 4174a616216Sopenharmony_ci (struct DATASLCallbackParams*)malloc(sizeof(struct DATASLCallbackParams)); 4184a616216Sopenharmony_ci EXPECT_NE(newListNode, nullptr); 4194a616216Sopenharmony_ci (void)memcpy_s(newListNode->queryParams.udid, MAX_UDID_LENGTH, queryParams.udid, queryParams.udidLen); 4204a616216Sopenharmony_ci newListNode->queryParams.udidLen = queryParams.udidLen; 4214a616216Sopenharmony_ci newListNode->callback = &tmpCallbackExcept004; 4224a616216Sopenharmony_ci 4234a616216Sopenharmony_ci PushListNode(g_tmpList, newListNode); 4244a616216Sopenharmony_ci} 4254a616216Sopenharmony_ci 4264a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelExcept004, TestSize.Level1) 4274a616216Sopenharmony_ci{ 4284a616216Sopenharmony_ci int32_t ret; 4294a616216Sopenharmony_ci ret = DATASL_OnStart(); 4304a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 4314a616216Sopenharmony_ci 4324a616216Sopenharmony_ci DEVSLQueryParams queryParams; 4334a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 4344a616216Sopenharmony_ci DATASL_GetUdidByExceptZero(&queryParams); 4354a616216Sopenharmony_ci uint32_t levelInfo = 0; 4364a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevel(&queryParams, &levelInfo); 4374a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, ret); 4384a616216Sopenharmony_ci 4394a616216Sopenharmony_ci ret = DATASL_GetHighestSecLevelAsync(&queryParams, &tmpCallbackExcept004); 4404a616216Sopenharmony_ci EXPECT_EQ(DEVSL_ERR_BAD_PARAMETERS, ret); 4414a616216Sopenharmony_ci 4424a616216Sopenharmony_ci g_tmpList = InitList(); 4434a616216Sopenharmony_ci EXPECT_NE(g_tmpList, nullptr); 4444a616216Sopenharmony_ci for (int i = 0; i < LIST_LENGTH; i++) { 4454a616216Sopenharmony_ci AddList(); 4464a616216Sopenharmony_ci } 4474a616216Sopenharmony_ci (void)GetListLength(g_tmpList); 4484a616216Sopenharmony_ci 4494a616216Sopenharmony_ci ClearList(g_tmpList); 4504a616216Sopenharmony_ci g_tmpList = nullptr; 4514a616216Sopenharmony_ci DATASL_OnStop(); 4524a616216Sopenharmony_ci} 4534a616216Sopenharmony_ci 4544a616216Sopenharmony_cistatic HWTEST_F(DevSLMgrTest, TestGetHighestSecLevelExcept005, TestSize.Level1) 4554a616216Sopenharmony_ci{ 4564a616216Sopenharmony_ci int32_t ret; 4574a616216Sopenharmony_ci ret = DATASL_OnStart(); 4584a616216Sopenharmony_ci EXPECT_EQ(DEVSL_SUCCESS, ret); 4594a616216Sopenharmony_ci 4604a616216Sopenharmony_ci g_tmpList = InitList(); 4614a616216Sopenharmony_ci EXPECT_NE(g_tmpList, nullptr); 4624a616216Sopenharmony_ci 4634a616216Sopenharmony_ci DEVSLQueryParams queryParams; 4644a616216Sopenharmony_ci (void)memset_s(&queryParams, sizeof(queryParams), 0, sizeof(queryParams)); 4654a616216Sopenharmony_ci (void)GetLocalUdid(&queryParams); 4664a616216Sopenharmony_ci struct DATASLCallbackParams *newListNode = 4674a616216Sopenharmony_ci (struct DATASLCallbackParams*)malloc(sizeof(struct DATASLCallbackParams)); 4684a616216Sopenharmony_ci EXPECT_NE(newListNode, nullptr); 4694a616216Sopenharmony_ci (void)memcpy_s(newListNode->queryParams.udid, MAX_UDID_LENGTH, queryParams.udid, queryParams.udidLen); 4704a616216Sopenharmony_ci newListNode->queryParams.udidLen = queryParams.udidLen; 4714a616216Sopenharmony_ci newListNode->callback = nullptr; 4724a616216Sopenharmony_ci RemoveListNode(g_tmpList, newListNode); 4734a616216Sopenharmony_ci PushListNode(g_tmpList, newListNode); 4744a616216Sopenharmony_ci RemoveListNode(g_tmpList, newListNode); 4754a616216Sopenharmony_ci 4764a616216Sopenharmony_ci ClearList(g_tmpList); 4774a616216Sopenharmony_ci g_tmpList = nullptr; 4784a616216Sopenharmony_ci DATASL_OnStop(); 4794a616216Sopenharmony_ci}