1 /*
2  * Copyright (c) 2023-2024 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 "hisysevent_delay_test.h"
17 
18 #include <gtest/gtest.h>
19 
20 #include <iosfwd>
21 #include <string>
22 #include <thread>
23 #include <unistd.h>
24 #include <vector>
25 
26 #include "gtest/gtest-message.h"
27 #include "gtest/gtest-test-part.h"
28 #include "gtest/hwext/gtest-ext.h"
29 #include "gtest/hwext/gtest-tag.h"
30 
31 #include "hisysevent.h"
32 #include "string_ex.h"
33 #include "string_util.h"
34 
35 using namespace testing::ext;
36 using namespace OHOS;
37 using namespace OHOS::HiviewDFX;
38 
39 namespace {
40 constexpr int WROTE_TOTAL_CNT = 30;
41 
WriteStringWithLength(const std::string testCaseName,const std::string testCaseDescription,int cnt)42 void WriteStringWithLength(const std::string testCaseName, const std::string testCaseDescription, int cnt)
43 {
44     string param;
45     param.append(cnt, 'a');
46     std::vector<int> wroteRet;
47     int ret = SUCCESS;
48     for (int i = 0; i < WROTE_TOTAL_CNT; ++i) {
49         ret = HiSysEventWrite(HiSysEvent::Domain::AAFWK, "LIFECYCLE_TIMEOUT", HiSysEvent::EventType::FAULT, "key",
50             param);
51         wroteRet.emplace_back(ret);
52     }
53     ASSERT_EQ(wroteRet.size(), WROTE_TOTAL_CNT);
54     ASSERT_EQ(std::count(wroteRet.begin(), wroteRet.end(), SUCCESS), WROTE_TOTAL_CNT);
55 }
56 
57 template<typename T>
WriteSingleValue(const std::string testCaseName,const std::string testCaseDescription,T val)58 void WriteSingleValue(const std::string testCaseName, const std::string testCaseDescription, T val)
59 {
60     std::vector<int> wroteRet;
61     int ret = SUCCESS;
62     for (int i = 0; i < WROTE_TOTAL_CNT; ++i) {
63         ret = HiSysEventWrite(HiSysEvent::Domain::AAFWK, "LIFECYCLE_TIMEOUT", HiSysEvent::EventType::FAULT, "key",
64             val);
65         wroteRet.emplace_back(ret);
66     }
67     ASSERT_EQ(wroteRet.size(), WROTE_TOTAL_CNT);
68     ASSERT_EQ(std::count(wroteRet.begin(), wroteRet.end(), SUCCESS), WROTE_TOTAL_CNT);
69 }
70 }
71 
SetUpTestCase(void)72 void HiSysEventDelayTest::SetUpTestCase(void)
73 {
74 }
75 
TearDownTestCase(void)76 void HiSysEventDelayTest::TearDownTestCase(void)
77 {
78 }
79 
SetUp(void)80 void HiSysEventDelayTest::SetUp(void)
81 {
82 }
83 
TearDown(void)84 void HiSysEventDelayTest::TearDown(void)
85 {
86 }
87 
88 /**
89  * @tc.name: HiSysEventDelayTest001
90  * @tc.desc: Write a sysevent without any parameter
91  * @tc.type: FUNC
92  * @tc.require: issueI76V6J
93  */
94 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest001, TestSize.Level1)
95 {
96     std::vector<int> wroteRet;
97     int ret = SUCCESS;
98     for (int i = 0; i < WROTE_TOTAL_CNT; ++i) {
99         ret = HiSysEventWrite(HiSysEvent::Domain::AAFWK, "LIFECYCLE_TIMEOUT", HiSysEvent::EventType::FAULT);
100         wroteRet.emplace_back(ret);
101     }
102     ASSERT_EQ(wroteRet.size(), WROTE_TOTAL_CNT);
103     ASSERT_EQ(std::count(wroteRet.begin(), wroteRet.end(), SUCCESS), WROTE_TOTAL_CNT);
104 }
105 
106 /**
107  * @tc.name: HiSysEventDelayTest002
108  * @tc.desc: Write sysevent with a bool parameter
109  * @tc.type: FUNC
110  * @tc.require: issueI76V6J
111  */
112 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest002, TestSize.Level1)
113 {
114     bool value = true;
115     WriteSingleValue("HiSysEventDelayTest002", "Write sysevent with a bool parameter", value);
116 }
117 
118 /**
119  * @tc.name: HiSysEventDelayTest003
120  * @tc.desc: Write sysevent with a char parameter
121  * @tc.type: FUNC
122  * @tc.require: issueI76V6J
123  */
124 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest003, TestSize.Level1)
125 {
126     char value = 'a';
127     WriteSingleValue("HiSysEventDelayTest003", "Write sysevent with a char parameter", value);
128 }
129 
130 /**
131  * @tc.name: HiSysEventDelayTest004
132  * @tc.desc: Write sysevent with a double parameter
133  * @tc.type: FUNC
134  * @tc.require: issueI76V6J
135  */
136 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest004, TestSize.Level1)
137 {
138     double value = 30949.374;
139     WriteSingleValue("HiSysEventDelayTest004", "Write sysevent with a double parameter", value);
140 }
141 
142 /**
143  * @tc.name: HiSysEventDelayTest005
144  * @tc.desc: Write sysevent with a float parameter
145  * @tc.type: FUNC
146  * @tc.require: issueI76V6J
147  */
148 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest005, TestSize.Level1)
149 {
150     float value = 230.47;
151     WriteSingleValue("HiSysEventDelayTest005", "Write sysevent with a float parameter", value);
152 }
153 
154 /**
155  * @tc.name: HiSysEventDelayTest006
156  * @tc.desc: Write sysevent with a integer parameter
157  * @tc.type: FUNC
158  * @tc.require: issueI76V6J
159  */
160 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest006, TestSize.Level1)
161 {
162     int value = 100;
163     WriteSingleValue("HiSysEventDelayTest006", "Write sysevent with a integer parameter", value);
164 }
165 
166 /**
167  * @tc.name: HiSysEventDelayTest007
168  * @tc.desc: Write sysevent with a long parameter
169  * @tc.type: FUNC
170  * @tc.require: issueI76V6J
171  */
172 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest007, TestSize.Level1)
173 {
174     long value = 1000000;
175     WriteSingleValue("HiSysEventDelayTest007", "Write sysevent with a long parameter", value);
176 }
177 
178 /**
179  * @tc.name: HiSysEventDelayTest008
180  * @tc.desc: Write sysevent with a short parameter
181  * @tc.type: FUNC
182  * @tc.require: issueI76V6J
183  */
184 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest008, TestSize.Level1)
185 {
186     short value = 10;
187     WriteSingleValue("HiSysEventDelayTest008", "Write sysevent with a short parameter", value);
188 }
189 
190 /**
191  * @tc.name: HiSysEventDelayTest009
192  * @tc.desc: Write a sysevent with a string param whose length is 32
193  * @tc.type: FUNC
194  * @tc.require: issueI76V6J
195  */
196 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest009, TestSize.Level1)
197 {
198     WriteStringWithLength("HiSysEventDelayTest009", "Write a sysevent with a string param whose length is 32",
199         32);
200 }
201 
202 /**
203  * @tc.name: HiSysEventDelayTest010
204  * @tc.desc: Write a sysevent with a string param whose length is 64
205  * @tc.type: FUNC
206  * @tc.require: issueI76V6J
207  */
208 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest010, TestSize.Level1)
209 {
210     WriteStringWithLength("HiSysEventDelayTest010", "Write a sysevent with a string param whose length is 64",
211         64);
212 }
213 
214 /**
215  * @tc.name: HiSysEventDelayTest011
216  * @tc.desc: Write a sysevent with a string param whose length is 128
217  * @tc.type: FUNC
218  * @tc.require: issueI76V6J
219  */
220 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest011, TestSize.Level1)
221 {
222     WriteStringWithLength("HiSysEventDelayTest011", "Write a sysevent with a string param whose length is 128",
223         128);
224 }
225 
226 /**
227  * @tc.name: HiSysEventDelayTest012
228  * @tc.desc: Write a sysevent with a string param whose length is 256
229  * @tc.type: FUNC
230  * @tc.require: issueI76V6J
231  */
232 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest012, TestSize.Level1)
233 {
234     WriteStringWithLength("HiSysEventDelayTest012", "Write a sysevent with a string param whose length is 256",
235         256);
236 }
237 
238 
239 /**
240  * @tc.name: HiSysEventDelayTest013
241  * @tc.desc: Write a sysevent with a string param whose length is 512
242  * @tc.type: FUNC
243  * @tc.require: issueI76V6J
244  */
245 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest013, TestSize.Level1)
246 {
247     WriteStringWithLength("HiSysEventDelayTest013", "Write a sysevent with a string param whose length is 512",
248         512);
249 }
250 
251 /**
252  * @tc.name: HiSysEventDelayTest014
253  * @tc.desc: Write a sysevent with a string param whose length is 1024
254  * @tc.type: FUNC
255  * @tc.require: issueI76V6J
256  */
257 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest014, TestSize.Level1)
258 {
259     WriteStringWithLength("HiSysEventDelayTest014", "Write a sysevent with a string param whose length is 1024",
260         1024);
261 }
262 
263 /**
264  * @tc.name: HiSysEventDelayTest015
265  * @tc.desc: Write a sysevent with a string param whose length is 2048
266  * @tc.type: FUNC
267  * @tc.require: issueI76V6J
268  */
269 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest015, TestSize.Level1)
270 {
271     WriteStringWithLength("HiSysEventDelayTest015", "Write a sysevent with a string param whose length is 2048",
272         2048);
273 }
274 
275 /**
276  * @tc.name: HiSysEventDelayTest016
277  * @tc.desc: Write a sysevent with a string param whose length is 3072
278  * @tc.type: FUNC
279  * @tc.require: issueI76V6J
280  */
281 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest016, TestSize.Level1)
282 {
283     WriteStringWithLength("HiSysEventDelayTest016", "Write a sysevent with a string param whose length is 3072",
284         3072);
285 }
286 
287 /**
288  * @tc.name: HiSysEventDelayTest017
289  * @tc.desc: Write a sysevent with a string param whose length is 4096
290  * @tc.type: FUNC
291  * @tc.require: issueI76V6J
292  */
293 HWTEST_F(HiSysEventDelayTest, HiSysEventDelayTest017, TestSize.Level1)
294 {
295     WriteStringWithLength("HiSysEventDelayTest017", "Write a sysevent with a string param whose length is 4096",
296         4096);
297 }