1 /*
2 * Copyright (c) 2021 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 "xcollie_interface_test.h"
17
18 #include <gtest/gtest.h>
19 #include <string>
20
21 #include "xcollie.h"
22 #include "watchdog.h"
23
24 using namespace testing::ext;
25
26 namespace OHOS {
27 namespace HiviewDFX {
SetUpTestCase(void)28 void XCollieInterfaceTest::SetUpTestCase(void)
29 {
30 }
31
TearDownTestCase(void)32 void XCollieInterfaceTest::TearDownTestCase(void)
33 {
34 }
35
SetUp(void)36 void XCollieInterfaceTest::SetUp(void)
37 {
38 }
39
TearDown(void)40 void XCollieInterfaceTest::TearDown(void)
41 {
42 }
43
44 /**
45 * @tc.name: XCollieTimerParamTest
46 * @tc.desc: Verify xcollie timer interface param
47 * @tc.type: FUNC
48 * @tc.require: SR000CPN2F AR000CTAMB
49 * @tc.author: yangjing
50 */
51 HWTEST_F(XCollieInterfaceTest, XCollieTimerParam_001, TestSize.Level1)
52 {
53 /**
54 * @tc.steps: step1. input param name include special string
55 * @tc.expected: step1. set timer successfully;
56 */
57 int id = XCollie::GetInstance().SetTimer("TimeoutTimerxce!@#$%^&*()", 1, nullptr, nullptr, XCOLLIE_FLAG_NOOP);
58 ASSERT_GT(id, 0);
59
60 /**
61 * @tc.steps: step2. input param name include special string,cancel timer
62 * @tc.expected: step2. update timer successfully;
63 */
64 XCollie::GetInstance().CancelTimer(id);
65
66 /**
67 * @tc.steps: step3. input param timeout is invalid
68 * @tc.expected: step3. set timer failed;
69 */
70 id = XCollie::GetInstance().SetTimer("XCollieTimerParam_001", 0, nullptr, nullptr, XCOLLIE_FLAG_NOOP);
71 ASSERT_EQ(id, INVALID_ID);
72
73 /**
74 * @tc.steps: step4. cancelTimer, input param id is invalid
75 * @tc.expected: step4. cancel timer failed;
76 */
77 XCollie::GetInstance().CancelTimer(-1);
78 }
79
80 /**
81 * @tc.name: XCollieTimerParamTest
82 * @tc.desc: Verify xcollie timer interface param
83 * @tc.type: FUNC
84 * @tc.require: SR000CPN2F AR000CTAMB
85 * @tc.author: yangjing
86 */
87 HWTEST_F(XCollieInterfaceTest, XCollieTimerParam_002, TestSize.Level0)
88 {
89 Watchdog::GetInstance().SetSpecifiedProcessName("foundation");
90 /**
91 * @tc.steps: step5. multiple timer
92 * @tc.expected: step5. cancel timer successfully;
93 */
94 bool flag = false;
__anon574be3160102(void *) 95 XCollieCallback callbackFunc = [&flag](void *) {
96 flag = true;
97 };
98 bool flag1 = false;
__anon574be3160202(void *) 99 XCollieCallback callbackFunc1 = [&flag1](void *) {
100 flag1 = true;
101 };
102 int id = XCollie::GetInstance().SetTimer("XCollieTimerParam_002", 2, callbackFunc, nullptr, XCOLLIE_FLAG_NOOP);
103 ASSERT_GT(id, 0);
104 int id1 = XCollie::GetInstance().SetTimer("XCollieTimerParam_002", 3, callbackFunc1, nullptr, XCOLLIE_FLAG_NOOP);
105 ASSERT_GT(id1, 0);
106 sleep(1);
107 XCollie::GetInstance().CancelTimer(id);
108 sleep(3);
109 ASSERT_EQ(flag, false);
110 ASSERT_EQ(flag1, true);
111
112 flag = false;
113 flag1 = false;
114 id = XCollie::GetInstance().SetTimer("XCollieTimerParam_002", 2, callbackFunc, nullptr, XCOLLIE_FLAG_NOOP);
115 ASSERT_GT(id, 0);
116 id1 = XCollie::GetInstance().SetTimer("XCollieTimerParam_002", 3, callbackFunc1, nullptr, XCOLLIE_FLAG_NOOP);
117 ASSERT_GT(id1, 0);
118 sleep(1);
119 XCollie::GetInstance().CancelTimer(id1);
120 sleep(3);
121 ASSERT_EQ(flag, true);
122 ASSERT_EQ(flag1, false);
123 }
124
125 /**
126 * @tc.name: XCollieTimerParamTest
127 * @tc.desc: Verify xcollie timer interface param
128 * @tc.type: FUNC
129 * @tc.require: SR000CPN2F AR000CTAMB
130 * @tc.author: yangjing
131 */
132 HWTEST_F(XCollieInterfaceTest, XCollieTimerParam_003, TestSize.Level1)
133 {
134 /**
135 * @tc.steps: step6. log event
136 * @tc.expected: step6. log event successfully
137 */
138 int id = XCollie::GetInstance().SetTimer("XCollieTimerParam_003", 1, nullptr, nullptr, XCOLLIE_FLAG_LOG);
139 ASSERT_GT(id, 0);
140 sleep(2);
141 XCollie::GetInstance().CancelTimer(id);
142
143 /**
144 * @tc.steps: step7. callback test
145 * @tc.expected: step7. callback can be executed successfully
146 */
147 bool flag = false;
__anon574be3160302(void *) 148 XCollieCallback callbackFunc = [&flag](void *) {
149 flag = true;
150 };
151 id = XCollie::GetInstance().SetTimer("XCollieTimerParam_003", 1, callbackFunc, nullptr, XCOLLIE_FLAG_LOG);
152 ASSERT_GT(id, 0);
153
154 int id1 = XCollie::GetInstance().SetTimer("XCollieTimerParam_003", 2, callbackFunc, nullptr, XCOLLIE_FLAG_LOG);
155 ASSERT_GT(id1, 0);
156 sleep(2);
157 XCollie::GetInstance().CancelTimer(id1);
158 ASSERT_EQ(flag, true);
159
160 /**
161 * @tc.steps: step8. recover test
162 * @tc.expected: step8. recover can be executed successfully
163 */
164 id = XCollie::GetInstance().SetTimer("XCollieTimerParam_003", 2, nullptr, nullptr, XCOLLIE_FLAG_RECOVERY);
165 ASSERT_GT(id, 0);
166 sleep(1);
167 }
168
169 /**
170 * @tc.name: XCollieTimerParamTest
171 * @tc.desc: Verify xcollie timer interface param
172 * @tc.type: FUNC
173 */
174 HWTEST_F(XCollieInterfaceTest, XCollieTimerParam_004, TestSize.Level1)
175 {
176 bool flag = false;
__anon574be3160402(void *) 177 XCollieCallback callbackFunc = [&flag](void *) {
178 flag = true;
179 };
180 int id = XCollie::GetInstance().SetTimer("XCollieTimerParam_004", 3, callbackFunc, nullptr, XCOLLIE_FLAG_LOG);
181 ASSERT_GT(id, 0);
182 sleep(2);
183 sleep(3);
184 XCollie::GetInstance().CancelTimer(id);
185 ASSERT_EQ(flag, true);
186 flag = false;
187 id = XCollie::GetInstance().SetTimer("XCollieTimerParam_005", 3, callbackFunc, nullptr, XCOLLIE_FLAG_LOG);
188 ASSERT_GT(id, 0);
189 id = XCollie::GetInstance().SetTimer("XCollieTimerParam_006", 3, callbackFunc, nullptr, XCOLLIE_FLAG_LOG);
190 ASSERT_GT(id, 0);
191 XCollie::GetInstance().CancelTimer(0);
192 ASSERT_EQ(flag, false);
193 }
194
195 /**
196 * @tc.name: XCollieTimerParamTest
197 * @tc.desc: Verify xcollie timer interface param
198 * @tc.type: FUNC
199 */
200 HWTEST_F(XCollieInterfaceTest, XCollieTimerParam_005, TestSize.Level1)
201 {
202 int id = XCollie::GetInstance().SetTimerCount("HIT_EMPTY_WARNING", 2, 3);
203 ASSERT_GT(id, 0);
204 int i = 0;
205 while (i < 3) {
206 XCollie::GetInstance().TriggerTimerCount("HIT_EMPTY_WARNING", true, std::to_string(i));
207 usleep(600 * 1000);
208 i++;
209 }
210 sleep(1);
211 }
212 } // namespace HiviewDFX
213 } // namespace OHOS
214