1 /*
2  * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "battery_light_test.h"
17 #include "battery_config.h"
18 #include "battery_config_test.h"
19 #include "battery_light.h"
20 #include "power_common.h"
21 #include <memory>
22 
23 namespace OHOS {
24 namespace PowerMgr {
25 using namespace testing::ext;
26 using namespace Security::AccessToken;
27 using Security::AccessToken::AccessTokenID;
28 
29 namespace {
30 BatteryLight g_light;
31 uint64_t g_token;
32 PermissionDef g_infoManagerTestPermDef = {
33     .permissionName = "ohos.permission.SYSTEM_LIGHT_CONTROL",
34     .bundleName = "accesstoken_test",
35     .grantMode = 1,
36     .label = "label",
37     .labelId = 1,
38     .description = "test battery light",
39     .descriptionId = 1,
40     .availableLevel = APL_NORMAL
41 };
42 
43 PermissionStateFull g_infoManagerTestState = {
44     .grantFlags = {1},
45     .grantStatus = {PermissionState::PERMISSION_GRANTED},
46     .isGeneral = true,
47     .permissionName = "ohos.permission.SYSTEM_LIGHT_CONTROL",
48     .resDeviceID = {"local"}
49 };
50 
51 HapPolicyParams g_infoManagerTestPolicyPrams = {
52     .apl = APL_NORMAL,
53     .domain = "test.domain",
54     .permList = {g_infoManagerTestPermDef},
55     .permStateList = {g_infoManagerTestState}
56 };
57 
58 HapInfoParams g_infoManagerTestInfoParms = {
59     .bundleName = "batterylight_test",
60     .userID = 1,
61     .instIndex = 0,
62     .appIDDesc = "BatteryLightTest"
63 };
64 } // namespace
65 
66 AccessTokenID BatteryLightTest::tokenID_ = 0;
67 
SetUpTestCase()68 void BatteryLightTest::SetUpTestCase()
69 {
70     AccessTokenIDEx tokenIdEx = {0};
71     tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams);
72     tokenID_ = tokenIdEx.tokenIdExStruct.tokenID;
73     ASSERT_NE(0, tokenID_);
74     g_token = GetSelfTokenID();
75     ASSERT_EQ(0, SetSelfTokenID(tokenID_));
76     BatteryConfig::GetInstance().ParseConfig();
77     g_light.InitLight();
78     g_light.TurnOff();
79     GTEST_LOG_(INFO) << "The current device supports Light: " << g_light.isAvailable();
80 }
81 
TearDownTestCase()82 void BatteryLightTest::TearDownTestCase()
83 {
84     AccessTokenKit::DeleteToken(tokenID_);
85     SetSelfTokenID(g_token);
86 }
87 
TearDown()88 void BatteryLightTest::TearDown()
89 {
90     g_light.TurnOff();
91 }
92 
93 /**
94  * @tc.name: BatteryLight001
95  * @tc.desc: Turn off light
96  * @tc.type: FUNC
97  * @tc.require: issueI5YZR1
98  */
99 HWTEST_F(BatteryLightTest, BatteryLight001, TestSize.Level1)
100 {
101     RETURN_IF(!g_light.isAvailable());
102     g_light.TurnOff();
103     EXPECT_TRUE(g_light.GetLightColor() == 0U);
104 }
105 
106 /**
107  * @tc.name: BatteryLight002
108  * @tc.desc: Turn on light
109  * @tc.type: FUNC
110  * @tc.require: issueI5YZR1
111  */
112 HWTEST_F(BatteryLightTest, BatteryLight002, TestSize.Level1)
113 {
114     RETURN_IF(!g_light.isAvailable());
115     uint32_t color = 0U;
116     g_light.TurnOn(color);
117     EXPECT_TRUE(g_light.GetLightColor() == color);
118 }
119 
120 /**
121  * @tc.name: BatteryLight003
122  * @tc.desc: Update light color according to the capacity value 1
123  * @tc.type: FUNC
124  * @tc.require: issueI5YZR1
125  */
126 HWTEST_F(BatteryLightTest, BatteryLight003, TestSize.Level1)
127 {
128     RETURN_IF(!g_light.isAvailable());
129     int32_t capacity = 1;
130     g_light.UpdateColor(BatteryChargeState::CHARGE_STATE_ENABLE, capacity);
131     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::RED_LIGHT);
132     EXPECT_TRUE(g_light.UpdateColor(BatteryChargeState::CHARGE_STATE_ENABLE, capacity));
133 }
134 
135 /**
136  * @tc.name: BatteryLight004
137  * @tc.desc: Turn on light set light color
138  * @tc.type: FUNC
139  * @tc.require: issueI5YZR1
140  */
141 HWTEST_F(BatteryLightTest, BatteryLight004, TestSize.Level1)
142 {
143     RETURN_IF(!g_light.isAvailable());
144     uint32_t color = 0x7fffffff;
145     g_light.TurnOn(color);
146     EXPECT_TRUE(g_light.GetLightColor() == color);
147 }
148 
149 /**
150  * @tc.name: BatteryLight005
151  * @tc.desc: ChargingStatus is Discharging, Not bright lights
152  * @tc.type: FUNC
153  */
154 HWTEST_F(BatteryLightTest, BatteryLight005, TestSize.Level1)
155 {
156     RETURN_IF(!g_light.isAvailable());
157     GTEST_LOG_(INFO) << "initial:" << g_light.GetLightColor();
158     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::LIGHT_OFF);
159     // First turn on the light
160     EXPECT_TRUE(g_light.UpdateColor(BatteryChargeState::CHARGE_STATE_ENABLE, 11));
161     GTEST_LOG_(INFO) << "actual:" << g_light.GetLightColor() << "=expect:" << BatteryConfigTest::YELLOW_LIGHT;
162     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::YELLOW_LIGHT);
163 
164     EXPECT_FALSE(g_light.UpdateColor(BatteryChargeState::CHARGE_STATE_NONE, 0));
165     GTEST_LOG_(INFO) << "actual:" << g_light.GetLightColor() << "=expect:" << BatteryConfigTest::LIGHT_OFF;
166     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::LIGHT_OFF);
167 }
168 
169 /**
170  * @tc.name: BatteryLight006
171  * @tc.desc: ChargingStatus is Charging, capacity is 9, the red light on
172  * @tc.type: FUNC
173  */
174 HWTEST_F(BatteryLightTest, BatteryLight006, TestSize.Level1)
175 {
176     RETURN_IF(!g_light.isAvailable());
177     GTEST_LOG_(INFO) << "initial:" << g_light.GetLightColor();
178     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::LIGHT_OFF);
179     EXPECT_TRUE(g_light.UpdateColor(BatteryChargeState::CHARGE_STATE_ENABLE, 9));
180     GTEST_LOG_(INFO) << "actual:" << g_light.GetLightColor() << "=expect:" << BatteryConfigTest::RED_LIGHT;
181     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::RED_LIGHT);
182 }
183 
184 /**
185  * @tc.name: BatteryLight007
186  * @tc.desc: ChargingStatus is Charging, capacity is 89, the yellow light on
187  * @tc.type: FUNC
188  */
189 HWTEST_F(BatteryLightTest, BatteryLight007, TestSize.Level1)
190 {
191     RETURN_IF(!g_light.isAvailable());
192     GTEST_LOG_(INFO) << "initial:" << g_light.GetLightColor();
193     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::LIGHT_OFF);
194     EXPECT_TRUE(g_light.UpdateColor(BatteryChargeState::CHARGE_STATE_ENABLE, 89));
195     GTEST_LOG_(INFO) << "actual:" << g_light.GetLightColor() << "=expect:" << BatteryConfigTest::YELLOW_LIGHT;
196     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::YELLOW_LIGHT);
197 }
198 
199 /**
200  * @tc.name: BatteryLight008
201  * @tc.desc: ChargingStatus is Charging, capacity is 100, the green light on
202  * @tc.type: FUNC
203  */
204 HWTEST_F(BatteryLightTest, BatteryLight008, TestSize.Level1)
205 {
206     RETURN_IF(!g_light.isAvailable());
207     GTEST_LOG_(INFO) << "initial:" << g_light.GetLightColor();
208     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::LIGHT_OFF);
209     EXPECT_TRUE(g_light.UpdateColor(BatteryChargeState::CHARGE_STATE_ENABLE, 100));
210     GTEST_LOG_(INFO) << "actual:" << g_light.GetLightColor() << "=expect:" << BatteryConfigTest::GREEN_LIGHT;
211     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::GREEN_LIGHT);
212 }
213 
214 /**
215  * @tc.name: BatteryLight009
216  * @tc.desc: ChargingStatus is Charging, capacity is -1, Light does not change
217  * @tc.type: FUNC
218  */
219 HWTEST_F(BatteryLightTest, BatteryLight009, TestSize.Level1)
220 {
221     RETURN_IF(!g_light.isAvailable());
222     GTEST_LOG_(INFO) << "initial:" << g_light.GetLightColor();
223     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::LIGHT_OFF);
224     // First turn on the light
225     EXPECT_TRUE(g_light.UpdateColor(BatteryChargeState::CHARGE_STATE_ENABLE, 91));
226     GTEST_LOG_(INFO) << "actual:" << g_light.GetLightColor() << "=expect:" << BatteryConfigTest::GREEN_LIGHT;
227     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::GREEN_LIGHT);
228 
229     // Capacity invalid value, Not bright lights
230     EXPECT_FALSE(g_light.UpdateColor(BatteryChargeState::CHARGE_STATE_ENABLE, -1));
231     GTEST_LOG_(INFO) << "actual:" << g_light.GetLightColor() << "=expect:" << BatteryConfigTest::GREEN_LIGHT;
232     EXPECT_EQ(g_light.GetLightColor(), BatteryConfigTest::GREEN_LIGHT);
233 }
234 
235 /**
236  * @tc.name: BatteryLight010
237  * @tc.desc: The call interface was not initialized
238  * @tc.type: FUNC
239  */
240 HWTEST_F(BatteryLightTest, BatteryLight010, TestSize.Level1)
241 {
242     BatteryLight light;
243     GTEST_LOG_(INFO) << "initial:" << light.GetLightColor();
244     light.TurnOn(123);
245     EXPECT_EQ(light.GetLightColor(), BatteryConfigTest::LIGHT_OFF);
246     light.TurnOff();
247     EXPECT_EQ(light.GetLightColor(), BatteryConfigTest::LIGHT_OFF);
248 }
249 } // namespace PowerMgr
250 } // namespace OHOS
251