1 /*
2  * Copyright (c) 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 <ctime>
17 #include <gtest/gtest.h>
18 #include <securec.h>
19 #include <string>
20 #include <vector>
21 
22 #include "crash_exception.h"
23 #include "crash_exception_listener.h"
24 #include "dfx_errors.h"
25 #include "dfx_util.h"
26 #include "hisysevent_manager.h"
27 
28 using namespace OHOS::HiviewDFX;
29 using namespace testing::ext;
30 using namespace std;
31 
32 namespace OHOS {
33 namespace HiviewDFX {
34 class CrashExceptionTest : public testing::Test {
35 public:
SetUpTestCase(void)36     static void SetUpTestCase(void) {}
TearDownTestCase(void)37     static void TearDownTestCase(void) {}
SetUp()38     void SetUp() {}
TearDown()39     void TearDown() {}
40 };
41 
42 static constexpr int32_t TEST_PROCESS_ID = 1234;
43 static constexpr int32_t TEST_UID = 5678;
44 
45 /**
46  * @tc.name: CrashExceptionTest001
47  * @tc.desc: test ReportCrashException
48  * @tc.type: FUNC
49  */
50 HWTEST_F(CrashExceptionTest, CrashExceptionTest001, TestSize.Level2)
51 {
52     GTEST_LOG_(INFO) << "CrashExceptionTest001: start.";
53     char testProcessName[] = "process_name_ptr";
54     std::shared_ptr<CrashExceptionListener> crashListener = std::make_shared<CrashExceptionListener>();
55     ListenerRule tagRule("RELIABILITY", "CPP_CRASH_EXCEPTION", RuleType::WHOLE_WORD);
56     std::vector<ListenerRule> sysRules;
57     sysRules.push_back(tagRule);
58     HiSysEventManager::AddListener(crashListener, sysRules);
59     crashListener->SetKeyWord(testProcessName);
60     ReportCrashException(testProcessName, TEST_PROCESS_ID, TEST_UID, CrashExceptionCode::CRASH_UNKNOWN);
61     ASSERT_TRUE(crashListener->CheckKeywordInReasons());
62     HiSysEventManager::RemoveListener(crashListener);
63     GTEST_LOG_(INFO) << "CrashExceptionTest001: end.";
64 }
65 
66 /**
67  * @tc.name: CrashExceptionTest002
68  * @tc.desc: test ReportCrashException, error code is success.
69  * @tc.type: FUNC
70  */
71 HWTEST_F(CrashExceptionTest, CrashExceptionTest002, TestSize.Level2)
72 {
73     GTEST_LOG_(INFO) << "CrashExceptionTest002: start.";
74     char testProcessName[] = "process_name_ptr";
75     std::shared_ptr<CrashExceptionListener> crashListener = std::make_shared<CrashExceptionListener>();
76     ListenerRule tagRule("RELIABILITY", "CPP_CRASH_EXCEPTION", RuleType::WHOLE_WORD);
77     std::vector<ListenerRule> sysRules;
78     sysRules.push_back(tagRule);
79     HiSysEventManager::AddListener(crashListener, sysRules);
80     crashListener->SetKeyWord(testProcessName);
81     ReportCrashException(testProcessName, TEST_PROCESS_ID, TEST_UID, CrashExceptionCode::CRASH_ESUCCESS);
82     ASSERT_FALSE(crashListener->CheckKeywordInReasons());
83     HiSysEventManager::RemoveListener(crashListener);
84     GTEST_LOG_(INFO) << "CrashExceptionTest002: end.";
85 }
86 
87 /**
88  * @tc.name: CrashExceptionTest003
89  * @tc.desc: test ReportCrashException, process name length is more than 128 bytes.
90  * @tc.type: FUNC
91  */
92 HWTEST_F(CrashExceptionTest, CrashExceptionTest003, TestSize.Level2)
93 {
94     GTEST_LOG_(INFO) << "CrashExceptionTest003: start.";
95     char testProcessName[] = "process_name_ptr_1111111111111111111111111111111111111"
96     "11111111111111111111111111111111111111111111111111111111111111111111111111111111"
97     "11111111111111111111111111111111111111111111111111111111111111111111111111111111";
98     std::shared_ptr<CrashExceptionListener> crashListener = std::make_shared<CrashExceptionListener>();
99     ListenerRule tagRule("RELIABILITY", "CPP_CRASH_EXCEPTION", RuleType::WHOLE_WORD);
100     std::vector<ListenerRule> sysRules;
101     sysRules.push_back(tagRule);
102     HiSysEventManager::AddListener(crashListener, sysRules);
103     crashListener->SetKeyWord(testProcessName);
104     ReportCrashException(testProcessName, TEST_PROCESS_ID, TEST_UID, CrashExceptionCode::CRASH_UNKNOWN);
105     ASSERT_FALSE(crashListener->CheckKeywordInReasons());
106     HiSysEventManager::RemoveListener(crashListener);
107     GTEST_LOG_(INFO) << "CrashExceptionTest003: end.";
108 }
109 
110 /**
111  * @tc.name: CrashExceptionTest004
112  * @tc.desc: test ReportCrashException
113  * @tc.type: FUNC
114  */
115 HWTEST_F(CrashExceptionTest, CrashExceptionTest004, TestSize.Level2)
116 {
117     GTEST_LOG_(INFO) << "CrashExceptionTest004: start.";
118     std::string keyWord = "process_name_string";
119     std::shared_ptr<CrashExceptionListener> crashListener = std::make_shared<CrashExceptionListener>();
120     ListenerRule tagRule("RELIABILITY", "CPP_CRASH_EXCEPTION", RuleType::WHOLE_WORD);
121     std::vector<ListenerRule> sysRules;
122     sysRules.push_back(tagRule);
123     HiSysEventManager::AddListener(crashListener, sysRules);
124     crashListener->SetKeyWord(keyWord);
125     ReportCrashException(keyWord, TEST_PROCESS_ID, TEST_UID, CrashExceptionCode::CRASH_UNKNOWN);
126     ASSERT_TRUE(crashListener->CheckKeywordInReasons());
127     HiSysEventManager::RemoveListener(crashListener);
128     GTEST_LOG_(INFO) << "CrashExceptionTest004: end.";
129 }
130 
131 /**
132  * @tc.name: CrashExceptionTest005
133  * @tc.desc: test ReportCrashException, error code is success.
134  * @tc.type: FUNC
135  */
136 HWTEST_F(CrashExceptionTest, CrashExceptionTest005, TestSize.Level2)
137 {
138     GTEST_LOG_(INFO) << "CrashExceptionTest005: start.";
139     std::string keyWord = "process_name_string";
140     std::shared_ptr<CrashExceptionListener> crashListener = std::make_shared<CrashExceptionListener>();
141     ListenerRule tagRule("RELIABILITY", "CPP_CRASH_EXCEPTION", RuleType::WHOLE_WORD);
142     std::vector<ListenerRule> sysRules;
143     sysRules.push_back(tagRule);
144     HiSysEventManager::AddListener(crashListener, sysRules);
145     crashListener->SetKeyWord(keyWord);
146     ReportCrashException(keyWord, TEST_PROCESS_ID, TEST_UID, CrashExceptionCode::CRASH_ESUCCESS);
147     ASSERT_FALSE(crashListener->CheckKeywordInReasons());
148     HiSysEventManager::RemoveListener(crashListener);
149     GTEST_LOG_(INFO) << "CrashExceptionTest005: end.";
150 }
151 
152 /**
153  * @tc.name: CrashExceptionTest006
154  * @tc.desc: test ReportUnwinderException
155  * @tc.type: FUNC
156  */
157 HWTEST_F(CrashExceptionTest, CrashExceptionTest006, TestSize.Level2)
158 {
159     GTEST_LOG_(INFO) << "CrashExceptionTest006: start.";
160     std::string keyWord = "process_name_unwind";
161     std::shared_ptr<CrashExceptionListener> crashListener = std::make_shared<CrashExceptionListener>();
162     ListenerRule tagRule("RELIABILITY", "CPP_CRASH_EXCEPTION", RuleType::WHOLE_WORD);
163     std::vector<ListenerRule> sysRules;
164     sysRules.push_back(tagRule);
165     HiSysEventManager::AddListener(crashListener, sysRules);
166     crashListener->SetKeyWord(keyWord);
167     SetCrashProcInfo(keyWord, TEST_PROCESS_ID, TEST_UID);
168     ReportUnwinderException(UnwindErrorCode::UNW_ERROR_STEP_ARK_FRAME);
169     ASSERT_TRUE(crashListener->CheckKeywordInReasons());
170     HiSysEventManager::RemoveListener(crashListener);
171     GTEST_LOG_(INFO) << "CrashExceptionTest006: end.";
172 }
173 
174 /**
175  * @tc.name: CrashExceptionTest007
176  * @tc.desc: test ReportUnwinderException, invalid unwind error code.
177  * @tc.type: FUNC
178  */
179 HWTEST_F(CrashExceptionTest, CrashExceptionTest007, TestSize.Level2)
180 {
181     GTEST_LOG_(INFO) << "CrashExceptionTest007: start.";
182     std::string keyWord = "process_name_unwind";
183     std::shared_ptr<CrashExceptionListener> crashListener = std::make_shared<CrashExceptionListener>();
184     ListenerRule tagRule("RELIABILITY", "CPP_CRASH_EXCEPTION", RuleType::WHOLE_WORD);
185     std::vector<ListenerRule> sysRules;
186     sysRules.push_back(tagRule);
187     HiSysEventManager::AddListener(crashListener, sysRules);
188     crashListener->SetKeyWord(keyWord);
189     SetCrashProcInfo(keyWord, TEST_PROCESS_ID, TEST_UID);
190     ReportUnwinderException(0);
191     ASSERT_FALSE(crashListener->CheckKeywordInReasons());
192     HiSysEventManager::RemoveListener(crashListener);
193     GTEST_LOG_(INFO) << "CrashExceptionTest007: end.";
194 }
195 
196 /**
197  * @tc.name: CrashExceptionTest008
198  * @tc.desc: test CheckCrashLogValid, valid fault log.
199  * @tc.type: FUNC
200  */
201 HWTEST_F(CrashExceptionTest, CrashExceptionTest008, TestSize.Level2)
202 {
203     GTEST_LOG_(INFO) << "CrashExceptionTest008: start.";
204     std::string file = std::string("Module name:sensors\n") +
205         "Fault thread info:\n" +
206         "Tid:667, Name:sensors\n" +
207         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
208         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::Write\n" +
209         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDr\n" +
210         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop(\n" +
211         "Registers:\n" +
212         "r0:00000006 r1:c0306201 r2:ffe08e08 r3:00000009\n" +
213         "r4:00000100 r5:f755a010 r6:00000000 r7:00000036\n" +
214         "r8:00000006 r9:c0306201 r10:0000000c\n" +
215         "fp:ffe08db8 ip:f6cdf360 sp:ffe08c90 lr:f6ccefe3 pc:f7e5cf0c\n" +
216         "Other thread info:\n" +
217         "Tid:875, Name:OS_IPC_0_875\n" +
218         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
219         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::WriteBinder\n" +
220         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDriver\n" +
221         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop()+34)\n" +
222         "Memory near registers:\n" +
223         "r2([stack]):\n" +
224         "    ffe08e00 80407202\n" +
225         "    ffe08e04 f755a038\n" +
226         "FaultStack:\n" +
227         "    ffe08c50 00000040\n" +
228         "Maps:\n" +
229         "4d0000-4d3000 r--p 00000000 /system/bin/sa_main\n" +
230         "4d3000-4d6000 r-xp 00003000 /system/bin/sa_main\n" +
231         "4d6000-4d7000 r--p 00006000 /system/bin/sa_main\n" +
232         "HiLog:\n" +
233         "08-05 18:30:41.876   667   667 E C03f00/MUSL-SIGCHAIN: signal_chain_handler call\n";
234     int32_t ret = CheckCrashLogValid(file);
235     ASSERT_TRUE(ret == CrashExceptionCode::CRASH_ESUCCESS);
236     GTEST_LOG_(INFO) << "CrashExceptionTest008: end.";
237 }
238 
239 /**
240  * @tc.name: CrashExceptionTest009
241  * @tc.desc: test CheckCrashLogValid, invalid Fault thread info.
242  * @tc.type: FUNC
243  */
244 HWTEST_F(CrashExceptionTest, CrashExceptionTest009, TestSize.Level2)
245 {
246     GTEST_LOG_(INFO) << "CrashExceptionTest009: start.";
247     std::string file = std::string("Module name:sensors\n") +
248         "Fault thread info:\n" +
249         "Tid:667, Name:sensors\n" +
250         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
251         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::Write\n" +
252         "Registers:\n" +
253         "r0:00000006 r1:c0306201 r2:ffe08e08 r3:00000009\n" +
254         "r4:00000100 r5:f755a010 r6:00000000 r7:00000036\n" +
255         "r8:00000006 r9:c0306201 r10:0000000c\n" +
256         "fp:ffe08db8 ip:f6cdf360 sp:ffe08c90 lr:f6ccefe3 pc:f7e5cf0c\n" +
257         "Other thread info:\n" +
258         "Tid:875, Name:OS_IPC_0_875\n" +
259         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
260         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::WriteBinder\n" +
261         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDriver\n" +
262         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop()+34)\n" +
263         "Memory near registers:\n" +
264         "r2([stack]):\n" +
265         "    ffe08e00 80407202\n" +
266         "    ffe08e04 f755a038\n" +
267         "FaultStack:\n" +
268         "    ffe08c50 00000040\n" +
269         "Maps:\n" +
270         "4d0000-4d3000 r--p 00000000 /system/bin/sa_main\n" +
271         "4d3000-4d6000 r-xp 00003000 /system/bin/sa_main\n" +
272         "4d6000-4d7000 r--p 00006000 /system/bin/sa_main\n" +
273         "HiLog:\n" +
274         "08-05 18:30:41.876   667   667 E C03f00/MUSL-SIGCHAIN: signal_chain_handler call\n";
275     int32_t ret = CheckCrashLogValid(file);
276     ASSERT_FALSE(ret == CrashExceptionCode::CRASH_ESUCCESS);
277     GTEST_LOG_(INFO) << "CrashExceptionTest009: end.";
278 }
279 
280 /**
281  * @tc.name: CrashExceptionTest010
282  * @tc.desc: test CheckCrashLogValid, invalid Registers.
283  * @tc.type: FUNC
284  */
285 HWTEST_F(CrashExceptionTest, CrashExceptionTest010, TestSize.Level2)
286 {
287     GTEST_LOG_(INFO) << "CrashExceptionTest010: start.";
288     std::string file = std::string("Module name:sensors\n") +
289         "Fault thread info:\n" +
290         "Tid:667, Name:sensors\n" +
291         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
292         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::Write\n" +
293         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDr\n" +
294         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop(\n" +
295         "Other thread info:\n" +
296         "Tid:875, Name:OS_IPC_0_875\n" +
297         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
298         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::WriteBinder\n" +
299         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDriver\n" +
300         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop()+34)\n" +
301         "Memory near registers:\n" +
302         "r2([stack]):\n" +
303         "    ffe08e00 80407202\n" +
304         "    ffe08e04 f755a038\n" +
305         "FaultStack:\n" +
306         "    ffe08c50 00000040\n" +
307         "Maps:\n" +
308         "4d0000-4d3000 r--p 00000000 /system/bin/sa_main\n" +
309         "4d3000-4d6000 r-xp 00003000 /system/bin/sa_main\n" +
310         "4d6000-4d7000 r--p 00006000 /system/bin/sa_main\n" +
311         "HiLog:\n" +
312         "08-05 18:30:41.876   667   667 E C03f00/MUSL-SIGCHAIN: signal_chain_handler call\n";
313     int32_t ret = CheckCrashLogValid(file);
314     ASSERT_FALSE(ret == CrashExceptionCode::CRASH_ESUCCESS);
315     GTEST_LOG_(INFO) << "CrashExceptionTest010: end.";
316 }
317 
318 /**
319  * @tc.name: CrashExceptionTest011
320  * @tc.desc: test CheckCrashLogValid, invalid Other thread info.
321  * @tc.type: FUNC
322  */
323 HWTEST_F(CrashExceptionTest, CrashExceptionTest011, TestSize.Level2)
324 {
325     GTEST_LOG_(INFO) << "CrashExceptionTest011: start.";
326     std::string file = std::string("Module name:sensors\n") +
327         "Fault thread info:\n" +
328         "Tid:667, Name:sensors\n" +
329         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
330         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::Write\n" +
331         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDr\n" +
332         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop(\n" +
333         "Registers:\n" +
334         "r0:00000006 r1:c0306201 r2:ffe08e08 r3:00000009\n" +
335         "r4:00000100 r5:f755a010 r6:00000000 r7:00000036\n" +
336         "r8:00000006 r9:c0306201 r10:0000000c\n" +
337         "fp:ffe08db8 ip:f6cdf360 sp:ffe08c90 lr:f6ccefe3 pc:f7e5cf0c\n" +
338         "Other thread info:\n" +
339         "Tid:875, Name:OS_IPC_0_875\n" +
340         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
341         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::WriteBinder\n" +
342         "Memory near registers:\n" +
343         "r2([stack]):\n" +
344         "    ffe08e00 80407202\n" +
345         "    ffe08e04 f755a038\n" +
346         "FaultStack:\n" +
347         "    ffe08c50 00000040\n" +
348         "Maps:\n" +
349         "4d0000-4d3000 r--p 00000000 /system/bin/sa_main\n" +
350         "4d3000-4d6000 r-xp 00003000 /system/bin/sa_main\n" +
351         "4d6000-4d7000 r--p 00006000 /system/bin/sa_main\n" +
352         "HiLog:\n" +
353         "08-05 18:30:41.876   667   667 E C03f00/MUSL-SIGCHAIN: signal_chain_handler call\n";
354     int32_t ret = CheckCrashLogValid(file);
355     ASSERT_FALSE(ret == CrashExceptionCode::CRASH_ESUCCESS);
356     GTEST_LOG_(INFO) << "CrashExceptionTest011: end.";
357 }
358 
359 /**
360  * @tc.name: CrashExceptionTest012
361  * @tc.desc: test CheckCrashLogValid, invalid Memory near registers.
362  * @tc.type: FUNC
363  */
364 HWTEST_F(CrashExceptionTest, CrashExceptionTest012, TestSize.Level2)
365 {
366     GTEST_LOG_(INFO) << "CrashExceptionTest012: start.";
367     std::string file = std::string("Module name:sensors\n") +
368         "Fault thread info:\n" +
369         "Tid:667, Name:sensors\n" +
370         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
371         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::Write\n" +
372         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDr\n" +
373         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop(\n" +
374         "Registers:\n" +
375         "r0:00000006 r1:c0306201 r2:ffe08e08 r3:00000009\n" +
376         "r4:00000100 r5:f755a010 r6:00000000 r7:00000036\n" +
377         "r8:00000006 r9:c0306201 r10:0000000c\n" +
378         "fp:ffe08db8 ip:f6cdf360 sp:ffe08c90 lr:f6ccefe3 pc:f7e5cf0c\n" +
379         "Other thread info:\n" +
380         "Tid:875, Name:OS_IPC_0_875\n" +
381         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
382         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::WriteBinder\n" +
383         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDriver\n" +
384         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop()+34)\n" +
385         "FaultStack:\n" +
386         "    ffe08c50 00000040\n" +
387         "Maps:\n" +
388         "4d0000-4d3000 r--p 00000000 /system/bin/sa_main\n" +
389         "4d3000-4d6000 r-xp 00003000 /system/bin/sa_main\n" +
390         "4d6000-4d7000 r--p 00006000 /system/bin/sa_main\n" +
391         "HiLog:\n" +
392         "08-05 18:30:41.876   667   667 E C03f00/MUSL-SIGCHAIN: signal_chain_handler call\n";
393     int32_t ret = CheckCrashLogValid(file);
394     ASSERT_FALSE(ret == CrashExceptionCode::CRASH_ESUCCESS);
395     GTEST_LOG_(INFO) << "CrashExceptionTest012: end.";
396 }
397 
398 /**
399  * @tc.name: CrashExceptionTest013
400  * @tc.desc: test CheckCrashLogValid, invalid FaultStack.
401  * @tc.type: FUNC
402  */
403 HWTEST_F(CrashExceptionTest, CrashExceptionTest013, TestSize.Level2)
404 {
405     GTEST_LOG_(INFO) << "CrashExceptionTest013: start.";
406     std::string file = std::string("Module name:sensors\n") +
407         "Fault thread info:\n" +
408         "Tid:667, Name:sensors\n" +
409         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
410         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::Write\n" +
411         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDr\n" +
412         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop(\n" +
413         "Registers:\n" +
414         "r0:00000006 r1:c0306201 r2:ffe08e08 r3:00000009\n" +
415         "r4:00000100 r5:f755a010 r6:00000000 r7:00000036\n" +
416         "r8:00000006 r9:c0306201 r10:0000000c\n" +
417         "fp:ffe08db8 ip:f6cdf360 sp:ffe08c90 lr:f6ccefe3 pc:f7e5cf0c\n" +
418         "Other thread info:\n" +
419         "Tid:875, Name:OS_IPC_0_875\n" +
420         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
421         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::WriteBinder\n" +
422         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDriver\n" +
423         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop()+34)\n" +
424         "Memory near registers:\n" +
425         "r2([stack]):\n" +
426         "    ffe08e00 80407202\n" +
427         "    ffe08e04 f755a038\n" +
428         "Maps:\n" +
429         "4d0000-4d3000 r--p 00000000 /system/bin/sa_main\n" +
430         "4d3000-4d6000 r-xp 00003000 /system/bin/sa_main\n" +
431         "4d6000-4d7000 r--p 00006000 /system/bin/sa_main\n" +
432         "HiLog:\n" +
433         "08-05 18:30:41.876   667   667 E C03f00/MUSL-SIGCHAIN: signal_chain_handler call\n";
434     int32_t ret = CheckCrashLogValid(file);
435     ASSERT_FALSE(ret == CrashExceptionCode::CRASH_ESUCCESS);
436     GTEST_LOG_(INFO) << "CrashExceptionTest013: end.";
437 }
438 
439 /**
440  * @tc.name: CrashExceptionTest014
441  * @tc.desc: test CheckCrashLogValid, invalid Maps.
442  * @tc.type: FUNC
443  */
444 HWTEST_F(CrashExceptionTest, CrashExceptionTest014, TestSize.Level2)
445 {
446     GTEST_LOG_(INFO) << "CrashExceptionTest014: start.";
447     std::string file = std::string("Module name:sensors\n") +
448         "Fault thread info:\n" +
449         "Tid:667, Name:sensors\n" +
450         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
451         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::Write\n" +
452         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDr\n" +
453         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop(\n" +
454         "Registers:\n" +
455         "r0:00000006 r1:c0306201 r2:ffe08e08 r3:00000009\n" +
456         "r4:00000100 r5:f755a010 r6:00000000 r7:00000036\n" +
457         "r8:00000006 r9:c0306201 r10:0000000c\n" +
458         "fp:ffe08db8 ip:f6cdf360 sp:ffe08c90 lr:f6ccefe3 pc:f7e5cf0c\n" +
459         "Other thread info:\n" +
460         "Tid:875, Name:OS_IPC_0_875\n" +
461         "#00 pc 000c1f0c /system/lib/ld-musl-arm.so.1(ioctl+72)(1b29d22c50bcb2ceee39f8a2bbb936dc)\n" +
462         "#01 pc 0000efdf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::WriteBinder\n" +
463         "#02 pc 00032a49 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDriver\n" +
464         "#03 pc 00032b43 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop()+34)\n" +
465         "Memory near registers:\n" +
466         "r2([stack]):\n" +
467         "    ffe08e00 80407202\n" +
468         "    ffe08e04 f755a038\n" +
469         "FaultStack:\n" +
470         "    ffe08c50 00000040\n" +
471         "HiLog:\n" +
472         "08-05 18:30:41.876   667   667 E C03f00/MUSL-SIGCHAIN: signal_chain_handler call\n";
473     int32_t ret = CheckCrashLogValid(file);
474     ASSERT_FALSE(ret == CrashExceptionCode::CRASH_ESUCCESS);
475     GTEST_LOG_(INFO) << "CrashExceptionTest014: end.";
476 }
477 
478 /**
479  * @tc.name: CrashExceptionTest015
480  * @tc.desc: test CheckFaultSummaryValid, valid Fault Summary.
481  * @tc.type: FUNC
482  */
483 HWTEST_F(CrashExceptionTest, CrashExceptionTest015, TestSize.Level2)
484 {
485     GTEST_LOG_(INFO) << "CrashExceptionTest015: start.";
486     std::string summary = std::string("Thread name:sensors\n") +
487         "#00 pc 000c5738 /system/lib/ld-musl-arm.so.1(ioctl+72)(b985d2b9b22c3e542388f5803bac6a56)\n" +
488         "#01 pc 00007fcf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::WriteBinder(\n" +
489         "#02 pc 00034f35 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDriver(\n" +
490         "#03 pc 000350a5 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop(\n" +
491         "#04 pc 000363df /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::JoinThread(\n" +
492         "#05 pc 00010955 /system/lib/platformsdk/libsystem_ability_fwk.z.so(\n" +
493         "#06 pc 0000391b /system/bin/sa_main(main.cfi+1986)(c626ef160394bf644c17e6769318dc7d)\n" +
494         "#07 pc 00073560 /system/lib/ld-musl-arm.so.1(libc_start_main_stage2+56)(\n" +
495         "#08 pc 00003078 /system/bin/sa_main(_start_c+84)(c626ef160394bf644c17e6769318dc7d)\n" +
496         "#09 pc 0000301c /system/bin/sa_main(c626ef160394bf644c17e6769318dc7d)\n";
497     ASSERT_TRUE(CheckFaultSummaryValid(summary));
498     GTEST_LOG_(INFO) << "CrashExceptionTest015: end.";
499 }
500 
501 /**
502  * @tc.name: CrashExceptionTest016
503  * @tc.desc: test CheckFaultSummaryValid, valid Fault Summary.
504  * @tc.type: FUNC
505  */
506 HWTEST_F(CrashExceptionTest, CrashExceptionTest016, TestSize.Level2)
507 {
508     GTEST_LOG_(INFO) << "CrashExceptionTest016: start.";
509     std::string summary = std::string("Thread name:sensors\n") +
510         "#00 pc 000c5738 /system/lib/ld-musl-arm.so.1(ioctl+72)(b985d2b9b22c3e542388f5803bac6a56)\n" +
511         "#01 pc 00007fcf Not mapped\n" +
512         "#02 pc 00034f35 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::TransactWithDriver(\n" +
513         "#03 pc 000350a5 /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::StartWorkLoop(\n" +
514         "#04 pc 000363df /system/lib/platformsdk/libipc_core.z.so(OHOS::BinderInvoker::JoinThread(\n" +
515         "#05 pc 00010955 /system/lib/platformsdk/libsystem_ability_fwk.z.so(\n" +
516         "#06 pc 0000391b /system/bin/sa_main(main.cfi+1986)(c626ef160394bf644c17e6769318dc7d)\n" +
517         "#07 pc 00073560 /system/lib/ld-musl-arm.so.1(libc_start_main_stage2+56)(\n" +
518         "#08 pc 00003078 /system/bin/sa_main(_start_c+84)(c626ef160394bf644c17e6769318dc7d)\n" +
519         "#09 pc 0000301c /system/bin/sa_main(c626ef160394bf644c17e6769318dc7d)\n";
520     ASSERT_TRUE(CheckFaultSummaryValid(summary));
521     GTEST_LOG_(INFO) << "CrashExceptionTest016: end.";
522 }
523 
524 /**
525  * @tc.name: CrashExceptionTest017
526  * @tc.desc: test CheckFaultSummaryValid, invalid Fault Summary.
527  * @tc.type: FUNC
528  */
529 HWTEST_F(CrashExceptionTest, CrashExceptionTest017, TestSize.Level2)
530 {
531     GTEST_LOG_(INFO) << "CrashExceptionTest017: start.";
532     std::string summary = std::string("Thread name:sensors\n") +
533         "#00 pc 000c5738 /system/lib/ld-musl-arm.so.1(ioctl+72)(b985d2b9b22c3e542388f5803bac6a56)\n" +
534         "#01 pc 00007fcf /system/lib/chipset-pub-sdk/libipc_common.z.so(OHOS::BinderConnector::WriteBinder(\n";
535     ASSERT_FALSE(CheckFaultSummaryValid(summary));
536     GTEST_LOG_(INFO) << "CrashExceptionTest017: end.";
537 }
538 
539 /**
540  * @tc.name: CrashExceptionTest018
541  * @tc.desc: test SetCrashProcInfo functions
542  * @tc.type: FUNC
543  */
544 HWTEST_F(CrashExceptionTest, CrashExceptionTest018, TestSize.Level2)
545 {
546     GTEST_LOG_(INFO) << "CrashExceptionTest018: start.";
547     std::string name = "";
548     const int32_t pid = -1;
549     SetCrashProcInfo(name, pid, 0);
550     ReportUnwinderException(0);
551     ASSERT_EQ(name, "");
552     GTEST_LOG_(INFO) << "CrashExceptionTest018: end.";
553 }
554 } // namespace HiviewDFX
555 } // namespace OHOS