158ec469eSopenharmony_ci/*
258ec469eSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
358ec469eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
458ec469eSopenharmony_ci * you may not use this file except in compliance with the License.
558ec469eSopenharmony_ci * You may obtain a copy of the License at
658ec469eSopenharmony_ci *
758ec469eSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
858ec469eSopenharmony_ci *
958ec469eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1058ec469eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1158ec469eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1258ec469eSopenharmony_ci * See the License for the specific language governing permissions and
1358ec469eSopenharmony_ci * limitations under the License.
1458ec469eSopenharmony_ci */
1558ec469eSopenharmony_ci
1658ec469eSopenharmony_ci#include <gtest/gtest.h>
1758ec469eSopenharmony_ci#include <thread>
1858ec469eSopenharmony_ci
1958ec469eSopenharmony_ci#include "accesstoken_kit.h"
2058ec469eSopenharmony_ci#include "nativetoken_kit.h"
2158ec469eSopenharmony_ci#include "token_setproc.h"
2258ec469eSopenharmony_ci#include "light_agent.h"
2358ec469eSopenharmony_ci#include "sensors_errors.h"
2458ec469eSopenharmony_ci
2558ec469eSopenharmony_ci#undef LOG_TAG
2658ec469eSopenharmony_ci#define LOG_TAG "LightAgentTest"
2758ec469eSopenharmony_ci
2858ec469eSopenharmony_cinamespace OHOS {
2958ec469eSopenharmony_cinamespace Sensors {
3058ec469eSopenharmony_ciusing namespace testing::ext;
3158ec469eSopenharmony_ciusing namespace Security::AccessToken;
3258ec469eSopenharmony_ciusing Security::AccessToken::AccessTokenID;
3358ec469eSopenharmony_ci
3458ec469eSopenharmony_cinamespace {
3558ec469eSopenharmony_ciconstexpr int32_t TIME_WAIT_FOR_OP = 2;
3658ec469eSopenharmony_ci
3758ec469eSopenharmony_ciPermissionStateFull g_infoManagerTestState = {
3858ec469eSopenharmony_ci    .grantFlags = {1},
3958ec469eSopenharmony_ci    .grantStatus = {PermissionState::PERMISSION_GRANTED},
4058ec469eSopenharmony_ci    .isGeneral = true,
4158ec469eSopenharmony_ci    .permissionName = "ohos.permission.SYSTEM_LIGHT_CONTROL",
4258ec469eSopenharmony_ci    .resDeviceID = {"local"}
4358ec469eSopenharmony_ci};
4458ec469eSopenharmony_ci
4558ec469eSopenharmony_ciHapPolicyParams g_infoManagerTestPolicyPrams = {
4658ec469eSopenharmony_ci    .apl = APL_NORMAL,
4758ec469eSopenharmony_ci    .domain = "test.domain",
4858ec469eSopenharmony_ci    .permList = {},
4958ec469eSopenharmony_ci    .permStateList = {g_infoManagerTestState}
5058ec469eSopenharmony_ci};
5158ec469eSopenharmony_ci
5258ec469eSopenharmony_ciHapInfoParams g_infoManagerTestInfoParms = {
5358ec469eSopenharmony_ci    .bundleName = "lightagent_test",
5458ec469eSopenharmony_ci    .userID = 1,
5558ec469eSopenharmony_ci    .instIndex = 0,
5658ec469eSopenharmony_ci    .appIDDesc = "LightAgentTest"
5758ec469eSopenharmony_ci};
5858ec469eSopenharmony_ci} // namespace
5958ec469eSopenharmony_ci
6058ec469eSopenharmony_ciclass LightAgentTest : public testing::Test {
6158ec469eSopenharmony_cipublic:
6258ec469eSopenharmony_ci    static void SetUpTestCase();
6358ec469eSopenharmony_ci    static void TearDownTestCase();
6458ec469eSopenharmony_ci    void SetUp() {}
6558ec469eSopenharmony_ci    void TearDown() {}
6658ec469eSopenharmony_ciprivate:
6758ec469eSopenharmony_ci    static AccessTokenID tokenID_;
6858ec469eSopenharmony_ci};
6958ec469eSopenharmony_ci
7058ec469eSopenharmony_ciAccessTokenID LightAgentTest::tokenID_ = 0;
7158ec469eSopenharmony_ci
7258ec469eSopenharmony_ciLightInfo *g_lightInfo = nullptr;
7358ec469eSopenharmony_ciint32_t g_lightId = -1;
7458ec469eSopenharmony_ciint32_t g_invalidLightId = -1;
7558ec469eSopenharmony_ciint32_t g_lightType = -1;
7658ec469eSopenharmony_ci
7758ec469eSopenharmony_civoid LightAgentTest::SetUpTestCase()
7858ec469eSopenharmony_ci{
7958ec469eSopenharmony_ci    AccessTokenIDEx tokenIdEx = {0};
8058ec469eSopenharmony_ci    tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams);
8158ec469eSopenharmony_ci    tokenID_ = tokenIdEx.tokenIdExStruct.tokenID;
8258ec469eSopenharmony_ci    ASSERT_NE(0, tokenID_);
8358ec469eSopenharmony_ci    ASSERT_EQ(0, SetSelfTokenID(tokenID_));
8458ec469eSopenharmony_ci}
8558ec469eSopenharmony_ci
8658ec469eSopenharmony_civoid LightAgentTest::TearDownTestCase()
8758ec469eSopenharmony_ci{
8858ec469eSopenharmony_ci    int32_t ret = AccessTokenKit::DeleteToken(tokenID_);
8958ec469eSopenharmony_ci    if (tokenID_ != 0) {
9058ec469eSopenharmony_ci        ASSERT_EQ(RET_SUCCESS, ret);
9158ec469eSopenharmony_ci    }
9258ec469eSopenharmony_ci}
9358ec469eSopenharmony_ci
9458ec469eSopenharmony_ci/**
9558ec469eSopenharmony_ci * @tc.name: StartLightTest_001
9658ec469eSopenharmony_ci * @tc.desc: Verify GetLightList
9758ec469eSopenharmony_ci * @tc.type: FUNC
9858ec469eSopenharmony_ci * @tc.require: I63TFA
9958ec469eSopenharmony_ci */
10058ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_001, TestSize.Level1)
10158ec469eSopenharmony_ci{
10258ec469eSopenharmony_ci    CALL_LOG_ENTER;
10358ec469eSopenharmony_ci    int32_t count = -1;
10458ec469eSopenharmony_ci    int32_t ret = GetLightList(&g_lightInfo, count);
10558ec469eSopenharmony_ci    for (int32_t i = 0; i < count; ++i) {
10658ec469eSopenharmony_ci        MISC_HILOGI("lightId:%{public}d, lightName:%{public}s, lightNumber:%{public}d, lightType:%{public}d",
10758ec469eSopenharmony_ci            g_lightInfo[i].lightId, g_lightInfo[i].lightName, g_lightInfo[i].lightNumber, g_lightInfo[i].lightType);
10858ec469eSopenharmony_ci        g_lightId = g_lightInfo[i].lightId;
10958ec469eSopenharmony_ci        g_lightType = g_lightInfo[i].lightType;
11058ec469eSopenharmony_ci    }
11158ec469eSopenharmony_ci    ASSERT_EQ(ret, 0);
11258ec469eSopenharmony_ci}
11358ec469eSopenharmony_ci
11458ec469eSopenharmony_ci/**
11558ec469eSopenharmony_ci * @tc.name: StartLightTest_002
11658ec469eSopenharmony_ci * @tc.desc: Verify GetLightList
11758ec469eSopenharmony_ci * @tc.type: FUNC
11858ec469eSopenharmony_ci * @tc.require: I63TFA
11958ec469eSopenharmony_ci */
12058ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_002, TestSize.Level1)
12158ec469eSopenharmony_ci{
12258ec469eSopenharmony_ci    CALL_LOG_ENTER;
12358ec469eSopenharmony_ci    int32_t count = -1;
12458ec469eSopenharmony_ci    int32_t ret = GetLightList(nullptr, count);
12558ec469eSopenharmony_ci    ASSERT_EQ(ret, -1);
12658ec469eSopenharmony_ci}
12758ec469eSopenharmony_ci
12858ec469eSopenharmony_cibool GetLightColor(LightColor &color, int32_t lightType)
12958ec469eSopenharmony_ci{
13058ec469eSopenharmony_ci    switch (lightType) {
13158ec469eSopenharmony_ci        case LIGHT_TYPE_SINGLE_COLOR: {
13258ec469eSopenharmony_ci            color.singleColor = 0Xff;
13358ec469eSopenharmony_ci            return true;
13458ec469eSopenharmony_ci        }
13558ec469eSopenharmony_ci        case LIGHT_TYPE_RGB_COLOR: {
13658ec469eSopenharmony_ci            color.rgbColor = {
13758ec469eSopenharmony_ci                .r = 0Xff,
13858ec469eSopenharmony_ci                .g = 0Xff,
13958ec469eSopenharmony_ci                .b = 0Xff
14058ec469eSopenharmony_ci            };
14158ec469eSopenharmony_ci            return true;
14258ec469eSopenharmony_ci        }
14358ec469eSopenharmony_ci        case LIGHT_TYPE_WRGB_COLOR: {
14458ec469eSopenharmony_ci            color.wrgbColor = {
14558ec469eSopenharmony_ci                .w = 0Xff,
14658ec469eSopenharmony_ci                .r = 0Xff,
14758ec469eSopenharmony_ci                .g = 0Xff,
14858ec469eSopenharmony_ci                .b = 0Xff
14958ec469eSopenharmony_ci            };
15058ec469eSopenharmony_ci            return true;
15158ec469eSopenharmony_ci        }
15258ec469eSopenharmony_ci        default: {
15358ec469eSopenharmony_ci            MISC_HILOGE("lightType:%{public}d invalid", lightType);
15458ec469eSopenharmony_ci            return false;
15558ec469eSopenharmony_ci        }
15658ec469eSopenharmony_ci    }
15758ec469eSopenharmony_ci}
15858ec469eSopenharmony_ci
15958ec469eSopenharmony_ci/**
16058ec469eSopenharmony_ci * @tc.name: StartLightTest_003
16158ec469eSopenharmony_ci * @tc.desc: Verify TurnOn
16258ec469eSopenharmony_ci * @tc.type: FUNC
16358ec469eSopenharmony_ci * @tc.require: I63TFA
16458ec469eSopenharmony_ci */
16558ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_003, TestSize.Level1)
16658ec469eSopenharmony_ci{
16758ec469eSopenharmony_ci    CALL_LOG_ENTER;
16858ec469eSopenharmony_ci    int32_t powerLightId = 1;
16958ec469eSopenharmony_ci    TurnOff(powerLightId);
17058ec469eSopenharmony_ci    LightColor color;
17158ec469eSopenharmony_ci    bool flag = GetLightColor(color, g_lightType);
17258ec469eSopenharmony_ci    if (!flag) {
17358ec469eSopenharmony_ci        ASSERT_FALSE(flag);
17458ec469eSopenharmony_ci    } else {
17558ec469eSopenharmony_ci        LightAnimation animation;
17658ec469eSopenharmony_ci        animation.mode = LIGHT_MODE_DEFAULT;
17758ec469eSopenharmony_ci        animation.onTime = 50;
17858ec469eSopenharmony_ci        animation.offTime = 50;
17958ec469eSopenharmony_ci        int32_t ret = TurnOn(g_lightId, color, animation);
18058ec469eSopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(TIME_WAIT_FOR_OP));
18158ec469eSopenharmony_ci        ASSERT_EQ(ret, 0);
18258ec469eSopenharmony_ci    }
18358ec469eSopenharmony_ci}
18458ec469eSopenharmony_ci
18558ec469eSopenharmony_ci/**
18658ec469eSopenharmony_ci * @tc.name: StartLightTest_004
18758ec469eSopenharmony_ci * @tc.desc: Verify TurnOn
18858ec469eSopenharmony_ci * @tc.type: FUNC
18958ec469eSopenharmony_ci * @tc.require: I63TFA
19058ec469eSopenharmony_ci */
19158ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_004, TestSize.Level1)
19258ec469eSopenharmony_ci{
19358ec469eSopenharmony_ci    CALL_LOG_ENTER;
19458ec469eSopenharmony_ci    LightColor color;
19558ec469eSopenharmony_ci    bool flag = GetLightColor(color, g_lightType);
19658ec469eSopenharmony_ci    if (!flag) {
19758ec469eSopenharmony_ci        ASSERT_FALSE(flag);
19858ec469eSopenharmony_ci    } else {
19958ec469eSopenharmony_ci        LightAnimation animation;
20058ec469eSopenharmony_ci        animation.mode = LIGHT_MODE_BUTT;
20158ec469eSopenharmony_ci        animation.onTime = 50;
20258ec469eSopenharmony_ci        animation.offTime = 50;
20358ec469eSopenharmony_ci        int32_t ret = TurnOn(g_lightId, color, animation);
20458ec469eSopenharmony_ci        ASSERT_EQ(ret, -1);
20558ec469eSopenharmony_ci    }
20658ec469eSopenharmony_ci}
20758ec469eSopenharmony_ci
20858ec469eSopenharmony_ci/**
20958ec469eSopenharmony_ci * @tc.name: StartLightTest_005
21058ec469eSopenharmony_ci * @tc.desc: Verify TurnOn
21158ec469eSopenharmony_ci * @tc.type: FUNC
21258ec469eSopenharmony_ci * @tc.require: I63TFA
21358ec469eSopenharmony_ci */
21458ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_005, TestSize.Level1)
21558ec469eSopenharmony_ci{
21658ec469eSopenharmony_ci    CALL_LOG_ENTER;
21758ec469eSopenharmony_ci    LightColor color;
21858ec469eSopenharmony_ci    bool flag = GetLightColor(color, g_lightType);
21958ec469eSopenharmony_ci    if (!flag) {
22058ec469eSopenharmony_ci        ASSERT_FALSE(flag);
22158ec469eSopenharmony_ci    } else {
22258ec469eSopenharmony_ci        LightAnimation animation;
22358ec469eSopenharmony_ci        animation.mode = -1;
22458ec469eSopenharmony_ci        animation.onTime = 50;
22558ec469eSopenharmony_ci        animation.offTime = 50;
22658ec469eSopenharmony_ci        int32_t ret = TurnOn(g_lightId, color, animation);
22758ec469eSopenharmony_ci        ASSERT_EQ(ret, -1);
22858ec469eSopenharmony_ci    }
22958ec469eSopenharmony_ci}
23058ec469eSopenharmony_ci
23158ec469eSopenharmony_ci/**
23258ec469eSopenharmony_ci * @tc.name: StartLightTest_006
23358ec469eSopenharmony_ci * @tc.desc: Verify TurnOn
23458ec469eSopenharmony_ci * @tc.type: FUNC
23558ec469eSopenharmony_ci * @tc.require: I63TFA
23658ec469eSopenharmony_ci */
23758ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_006, TestSize.Level1)
23858ec469eSopenharmony_ci{
23958ec469eSopenharmony_ci    CALL_LOG_ENTER;
24058ec469eSopenharmony_ci    LightColor color;
24158ec469eSopenharmony_ci    bool flag = GetLightColor(color, g_lightType);
24258ec469eSopenharmony_ci    if (!flag) {
24358ec469eSopenharmony_ci        ASSERT_FALSE(flag);
24458ec469eSopenharmony_ci    } else {
24558ec469eSopenharmony_ci        LightAnimation animation;
24658ec469eSopenharmony_ci        animation.mode = LIGHT_MODE_DEFAULT;
24758ec469eSopenharmony_ci        animation.onTime = -1;
24858ec469eSopenharmony_ci        animation.offTime = 50;
24958ec469eSopenharmony_ci        int32_t ret = TurnOn(g_lightId, color, animation);
25058ec469eSopenharmony_ci        ASSERT_EQ(ret, -1);
25158ec469eSopenharmony_ci    }
25258ec469eSopenharmony_ci}
25358ec469eSopenharmony_ci
25458ec469eSopenharmony_ci/**
25558ec469eSopenharmony_ci * @tc.name: StartLightTest_007
25658ec469eSopenharmony_ci * @tc.desc: Verify TurnOn
25758ec469eSopenharmony_ci * @tc.type: FUNC
25858ec469eSopenharmony_ci * @tc.require: I63TFA
25958ec469eSopenharmony_ci */
26058ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_007, TestSize.Level1)
26158ec469eSopenharmony_ci{
26258ec469eSopenharmony_ci    CALL_LOG_ENTER;
26358ec469eSopenharmony_ci    LightColor color;
26458ec469eSopenharmony_ci    bool flag = GetLightColor(color, g_lightType);
26558ec469eSopenharmony_ci    if (!flag) {
26658ec469eSopenharmony_ci        ASSERT_FALSE(flag);
26758ec469eSopenharmony_ci    } else {
26858ec469eSopenharmony_ci        LightAnimation animation;
26958ec469eSopenharmony_ci        animation.mode = LIGHT_MODE_DEFAULT;
27058ec469eSopenharmony_ci        animation.onTime = 50;
27158ec469eSopenharmony_ci        animation.offTime = -1;
27258ec469eSopenharmony_ci        int32_t ret = TurnOn(g_lightId, color, animation);
27358ec469eSopenharmony_ci        ASSERT_EQ(ret, -1);
27458ec469eSopenharmony_ci    }
27558ec469eSopenharmony_ci}
27658ec469eSopenharmony_ci
27758ec469eSopenharmony_ci/**
27858ec469eSopenharmony_ci * @tc.name: StartLightTest_008
27958ec469eSopenharmony_ci * @tc.desc: Verify TurnOn
28058ec469eSopenharmony_ci * @tc.type: FUNC
28158ec469eSopenharmony_ci * @tc.require: I63TFA
28258ec469eSopenharmony_ci */
28358ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_008, TestSize.Level1)
28458ec469eSopenharmony_ci{
28558ec469eSopenharmony_ci    CALL_LOG_ENTER;
28658ec469eSopenharmony_ci    LightColor color;
28758ec469eSopenharmony_ci    bool flag = GetLightColor(color, g_lightType);
28858ec469eSopenharmony_ci    if (!flag) {
28958ec469eSopenharmony_ci        ASSERT_FALSE(flag);
29058ec469eSopenharmony_ci    } else {
29158ec469eSopenharmony_ci        LightAnimation animation;
29258ec469eSopenharmony_ci        animation.mode = LIGHT_MODE_DEFAULT;
29358ec469eSopenharmony_ci        animation.onTime = 2;
29458ec469eSopenharmony_ci        animation.offTime = 2;
29558ec469eSopenharmony_ci        int32_t ret = TurnOn(g_lightId, color, animation);
29658ec469eSopenharmony_ci        std::this_thread::sleep_for(std::chrono::milliseconds(TIME_WAIT_FOR_OP));
29758ec469eSopenharmony_ci        ASSERT_EQ(ret, 0);
29858ec469eSopenharmony_ci    }
29958ec469eSopenharmony_ci}
30058ec469eSopenharmony_ci
30158ec469eSopenharmony_ci/**
30258ec469eSopenharmony_ci * @tc.name: StartLightTest_009
30358ec469eSopenharmony_ci * @tc.desc: Verify TurnOn
30458ec469eSopenharmony_ci * @tc.type: FUNC
30558ec469eSopenharmony_ci * @tc.require: I63TFA
30658ec469eSopenharmony_ci */
30758ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_009, TestSize.Level1)
30858ec469eSopenharmony_ci{
30958ec469eSopenharmony_ci    CALL_LOG_ENTER;
31058ec469eSopenharmony_ci    LightColor color;
31158ec469eSopenharmony_ci    bool flag = GetLightColor(color, g_lightType);
31258ec469eSopenharmony_ci    if (!flag) {
31358ec469eSopenharmony_ci        ASSERT_FALSE(flag);
31458ec469eSopenharmony_ci    } else {
31558ec469eSopenharmony_ci        LightAnimation animation;
31658ec469eSopenharmony_ci        animation.mode = LIGHT_MODE_DEFAULT;
31758ec469eSopenharmony_ci        animation.onTime = 2;
31858ec469eSopenharmony_ci        animation.offTime = 2;
31958ec469eSopenharmony_ci        int32_t ret = TurnOn(g_invalidLightId, color, animation);
32058ec469eSopenharmony_ci        ASSERT_EQ(ret, -1);
32158ec469eSopenharmony_ci    }
32258ec469eSopenharmony_ci}
32358ec469eSopenharmony_ci
32458ec469eSopenharmony_ci/**
32558ec469eSopenharmony_ci * @tc.name: StartLightTest_010
32658ec469eSopenharmony_ci * @tc.desc: Verify TurnOff
32758ec469eSopenharmony_ci * @tc.type: FUNC
32858ec469eSopenharmony_ci * @tc.require: I63TFA
32958ec469eSopenharmony_ci */
33058ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_010, TestSize.Level1)
33158ec469eSopenharmony_ci{
33258ec469eSopenharmony_ci    CALL_LOG_ENTER;
33358ec469eSopenharmony_ci    int32_t ret = TurnOff(g_lightId);
33458ec469eSopenharmony_ci    ASSERT_EQ(ret, 0);
33558ec469eSopenharmony_ci}
33658ec469eSopenharmony_ci
33758ec469eSopenharmony_ci/**
33858ec469eSopenharmony_ci * @tc.name: StartLightTest_011
33958ec469eSopenharmony_ci * @tc.desc: Verify TurnOff
34058ec469eSopenharmony_ci * @tc.type: FUNC
34158ec469eSopenharmony_ci * @tc.require: I63TFA
34258ec469eSopenharmony_ci */
34358ec469eSopenharmony_ciHWTEST_F(LightAgentTest, StartLightTest_011, TestSize.Level1)
34458ec469eSopenharmony_ci{
34558ec469eSopenharmony_ci    CALL_LOG_ENTER;
34658ec469eSopenharmony_ci    int32_t ret = TurnOff(g_invalidLightId);
34758ec469eSopenharmony_ci    ASSERT_EQ(ret, -1);
34858ec469eSopenharmony_ci}
34958ec469eSopenharmony_ci} // namespace Sensors
35058ec469eSopenharmony_ci} // namespace OHOS
351