1 /*
2 * Copyright (c) 2022 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 "thermal_listener_test.h"
17
18 #include "securec.h"
19
20 #include "file_operation.h"
21 #include "mock_thermal_mgr_client.h"
22 #include "thermal_log.h"
23 #include "thermal_mgr_client.h"
24
25 using namespace testing::ext;
26 using namespace OHOS::PowerMgr;
27 using namespace OHOS;
28 using namespace std;
29
30 namespace {
31 static ThermalLevel g_thermalLevel = ThermalLevel::COOL;
32 }
33
WriteFile(std::string path,std::string buf,size_t size)34 int32_t ThermalListenerTest::WriteFile(std::string path, std::string buf, size_t size)
35 {
36 FILE* stream = fopen(path.c_str(), "w+");
37 if (stream == nullptr) {
38 return ERR_INVALID_VALUE;
39 }
40 size_t ret = fwrite(buf.c_str(), strlen(buf.c_str()), 1, stream);
41 if (ret == ERR_OK) {
42 THERMAL_HILOGE(LABEL_TEST, "ret=%{public}zu", ret);
43 }
44 int32_t state = fseek(stream, 0, SEEK_SET);
45 if (state != ERR_OK) {
46 fclose(stream);
47 return state;
48 }
49 state = fclose(stream);
50 if (state != ERR_OK) {
51 return state;
52 }
53 return ERR_OK;
54 }
55
SetSensorTemp(int32_t temperature,const std::string & path)56 void ThermalListenerTest::SetSensorTemp(int32_t temperature, const std::string& path)
57 {
58 char tempBuf[MAX_PATH] = {0};
59 int32_t ret = snprintf_s(tempBuf, MAX_PATH, sizeof(tempBuf) - 1, path.c_str());
60 EXPECT_EQ(true, ret >= EOK);
61
62 std::string sTemp = to_string(temperature) + "\n";
63 ret = ThermalListenerTest::WriteFile(tempBuf, sTemp, sTemp.length());
64 EXPECT_EQ(true, ret == ERR_OK);
65 }
66
OnThermalLevelResult(const ThermalLevel & level)67 void ThermalListenerTest::ThermalLevelTestEvent::OnThermalLevelResult(const ThermalLevel& level)
68 {
69 THERMAL_HILOGD(LABEL_TEST, "OnThermalLevelResult Enter");
70 g_thermalLevel = level;
71 }
72
TearDown()73 void ThermalListenerTest::TearDown()
74 {
75 SetSensorTemp(0, BATTERY_PATH);
76 MockThermalMgrClient::GetInstance().GetThermalInfo();
77 g_thermalLevel = ThermalLevel::COOL;
78 }
79
80 namespace {
81 /**
82 * @tc.name: ThermalListenerTest001
83 * @tc.desc: test class ThermalMgrListener function(thermal level event is not nullptr)
84 * @tc.type: FUNC
85 * @tc.require: issueI63SZ4
86 */
87 HWTEST_F(ThermalListenerTest, ThermalListenerTest001, TestSize.Level0)
88 {
89 THERMAL_HILOGD(LABEL_TEST, "ThermalListenerTest001 start.");
90 std::shared_ptr<ThermalMgrListener> thermalListener = std::make_shared<ThermalMgrListener>();
91 ASSERT_NE(thermalListener, nullptr);
92 const std::shared_ptr<ThermalMgrListener::ThermalLevelEvent> thermalEvent =
93 std::make_shared<ThermalListenerTest::ThermalLevelTestEvent>();
94 ASSERT_NE(thermalEvent, nullptr);
95
96 int32_t ret = thermalListener->SubscribeLevelEvent(thermalEvent);
97 EXPECT_EQ(true, ret == ERR_OK);
98
99 g_thermalLevel = ThermalLevel::COOL;
100 SetSensorTemp(46100, BATTERY_PATH);
101 MockThermalMgrClient::GetInstance().GetThermalInfo();
102 EXPECT_EQ(true, g_thermalLevel == ThermalLevel::HOT);
103 thermalListener->UnSubscribeLevelEvent();
104
105 ThermalLevel levelListener = thermalListener->GetThermalLevel();
106 ThermalLevel levelClient = ThermalMgrClient::GetInstance().GetThermalLevel();
107 EXPECT_EQ(levelListener, levelClient);
108 THERMAL_HILOGD(LABEL_TEST, "ThermalListenerTest001 end.");
109 }
110
111 /**
112 * @tc.name: ThermalListenerTest002
113 * @tc.desc: test class ThermalMgrListener function(thermal level event is nullptr)
114 * @tc.type: FUNC
115 * @tc.require: issueI63SZ4
116 */
117 HWTEST_F(ThermalListenerTest, ThermalListenerTest002, TestSize.Level0)
118 {
119 THERMAL_HILOGD(LABEL_TEST, "ThermalListenerTest002 start.");
120 std::shared_ptr<ThermalMgrListener> thermalListener = std::make_shared<ThermalMgrListener>();
121 ASSERT_NE(thermalListener, nullptr);
122
123 int32_t ret = thermalListener->SubscribeLevelEvent(nullptr);
124 EXPECT_EQ(true, ret == ERR_INVALID_VALUE);
125 THERMAL_HILOGD(LABEL_TEST, "ThermalListenerTest002 end.");
126 }
127 } // namespace
128