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}