1 /*
2 * Copyright (c) 2021-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 <cerrno>
17 #include <fstream>
18 #include <gtest/gtest.h>
19 #include <map>
20 #include <securec.h>
21 #include <string>
22 #include <sys/mman.h>
23 #include <thread>
24 #include <unistd.h>
25 #include <vector>
26
27 #include "dfx_test_util.h"
28 #include "directory_ex.h"
29 #include "dfx_define.h"
30 #include "dfx_util.h"
31 #include "procinfo.h"
32
33 using namespace testing::ext;
34 using namespace std;
35
36 #define NSPID_PATH "/data/nspid"
37
38 namespace OHOS {
39 namespace HiviewDFX {
40 class FaultLoggerdSystemTest : public testing::Test {
41 public:
42 static void SetUpTestCase(void);
43 };
44
SetUpTestCase(void)45 void FaultLoggerdSystemTest::SetUpTestCase(void)
46 {
47 chmod("/data/crasher_c", 0755); // 0755 : -rwxr-xr-x
48 chmod("/data/crasher_cpp", 0755); // 0755 : -rwxr-xr-x
49 }
50
51 namespace {
52 static const int CPPCRASH_FILENAME_MIN_LENGTH = 36; // 36 : length of /data/log/faultlog/temp/cppcrash-x-x
53 static const int SIGNAL_TEST_NUM = 40;
54 }
55
ForkAndExecuteCrasher(const string & option,const CrasherType type)56 static pid_t ForkAndExecuteCrasher(const string& option, const CrasherType type)
57 {
58 pid_t pid = fork();
59 if (pid < 0) {
60 GTEST_LOG_(ERROR) << "Fork failed";
61 return pid;
62 } else if (pid == 0) {
63 if (type == CRASHER_C) {
64 execl("/data/crasher_c", "crasher_c", option.c_str(), nullptr);
65 } else {
66 execl("/data/crasher_cpp", "crasher_cpp", option.c_str(), nullptr);
67 }
68 }
69
70 int status = 0;
71 waitpid(pid, &status, WNOHANG);
72 GTEST_LOG_(INFO) << "forked pid:" << pid;
73 return pid;
74 }
75
TriggerCrasherAndGetFileName(const string & option,const CrasherType type,string & crashFileName,int waitSec=1,const std::string & tempPath=TEMP_DIR)76 static pid_t TriggerCrasherAndGetFileName(const string& option, const CrasherType type, string& crashFileName,
77 int waitSec = 1, const std::string& tempPath = TEMP_DIR)
78 {
79 auto pid = ForkAndExecuteCrasher(option, type);
80 int recheckCount = 0;
81
82 crashFileName = WaitCreateCrashFile("cppcrash", pid);
83 if (!crashFileName.empty()) {
84 return pid;
85 }
86 // 6: means recheck times
87 while (recheckCount < 6) {
88 crashFileName = GetCppCrashFileName(pid, tempPath);
89 if (crashFileName.size() > 0) {
90 GTEST_LOG_(INFO) << "get crash file:" << crashFileName;
91 break;
92 }
93 GTEST_LOG_(INFO) << "recheck crash file, pid" << pid;
94 recheckCount++;
95 sleep(waitSec);
96 }
97 return pid;
98 }
99
CheckCountNum(const string & filePath,const pid_t & pid,const string & option)100 static bool CheckCountNum(const string& filePath, const pid_t& pid, const string& option)
101 {
102 map<string, string> optionReasonMap = {
103 #if defined(__LP64__)
104 { string("triSIGTRAP"), string("SIGILL") },
105 #else
106 { string("triSIGTRAP"), string("SIGTRAP") },
107 #endif
108 { string("triSIGILL"), string("SIGILL") },
109 { string("triSIGSEGV"), string("SIGSEGV") },
110 { string("MaxStack"), string("SIGSEGV") },
111 { string("MaxMethod"), string("SIGSEGV") },
112 { string("STACKOF"), string("SIGSEGV") },
113 { string("OOM"), string("SIGABRT") },
114 };
115 string reason = option;
116 auto iter = optionReasonMap.find(option);
117 if (iter != optionReasonMap.end()) {
118 GTEST_LOG_(INFO) << "optionReasonMap matched";
119 reason = iter->second;
120 }
121 string log[] = {
122 "Pid:" + to_string(pid), "Uid", ":crasher", reason, "Tid:", "#00", "Registers:", REGISTERS, "FaultStack:",
123 "Maps:", "/crasher"
124 };
125 int minRegIdx = 6; // 6 : index of first REGISTERS - 1
126 int expectNum = sizeof(log) / sizeof(log[0]);
127 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
128 }
129
CheckCountNumAbort(const string & filePath,const pid_t & pid)130 static bool CheckCountNumAbort(const string& filePath, const pid_t& pid)
131 {
132 string log[] = {
133 "Pid:" + to_string(pid), "Uid", ":crasher", "SIGABRT", "LastFatalMessage:", "ABORT!", "Tid:", "#00",
134 "Registers:", REGISTERS, "FaultStack:", "Maps:", "/crasher"
135 };
136 int minRegIdx = 8; // 8 : index of first REGISTERS - 1
137 int expectNum = sizeof(log) / sizeof(log[0]);
138 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
139 }
140
141
CheckCountNumNullpointer(const string & filePath,const pid_t & pid)142 static bool CheckCountNumNullpointer(const string& filePath, const pid_t& pid)
143 {
144 string log[] = {
145 "Pid:" + to_string(pid), "Uid", ":crasher", "SIGSEGV", "NULL", "pointer", "dereference", "Tid:", "#00",
146 "Registers:", REGISTERS, "FaultStack:", "Maps:", "/crasher"
147 };
148 int minRegIdx = 9; // 7 : index of first REGISTERS - 1
149 int expectNum = sizeof(log) / sizeof(log[0]);
150 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
151 }
152
CheckCountNumStackOverFlow(const string & filePath,const pid_t & pid)153 static bool CheckCountNumStackOverFlow(const string& filePath, const pid_t& pid)
154 {
155 string log[] = {
156 "Pid:" + to_string(pid), "Uid", ":crasher", "SIGSEGV", "stack-buffer-overflow", "Tid:", "#00",
157 "Registers:", REGISTERS, "FaultStack:", "Maps:", "/crasher"
158 };
159 int minRegIdx = 7; // 7 : index of first REGISTERS - 1
160 int expectNum = sizeof(log) / sizeof(log[0]);
161 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
162 }
163
CheckCountNumPCZero(const string & filePath,const pid_t & pid)164 static bool CheckCountNumPCZero(const string& filePath, const pid_t& pid)
165 {
166 string log[] = {
167 "Pid:" + to_string(pid), "Uid", ":crasher", "SIGSEGV", "Tid:", "#00", "Registers:", REGISTERS, "FaultStack:",
168 "Maps:", "/crasher"
169 };
170 int minRegIdx = 6; // 6 : index of first REGISTERS - 1
171 int expectNum = sizeof(log) / sizeof(log[0]);
172 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
173 }
174
CheckCountNumOverStack(const string & filePath,const pid_t & pid)175 static bool CheckCountNumOverStack(const string& filePath, const pid_t& pid)
176 {
177 string log[] = {
178 "Pid:" + to_string(pid), "Uid", ":crasher", "SIGSEGV", "Tid:", "#56", "Registers:", REGISTERS, "FaultStack:",
179 "Maps:", "/crasher"
180 };
181 int minRegIdx = 6; // 6 : index of first REGISTERS - 1
182 int expectNum = sizeof(log) / sizeof(log[0]);
183 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
184 }
185
CheckCountNumMultiThread(const string & filePath,const pid_t & pid)186 static bool CheckCountNumMultiThread(const string& filePath, const pid_t& pid)
187 {
188 string log[] = {
189 "Pid:" + to_string(pid), "Uid", ":crasher", "SIGSEGV", "Tid:", "#00",
190 "Registers:", REGISTERS, "FaultStack:", "Maps:",
191 "/crasher"
192 };
193 int minRegIdx = 6; // 6 : index of first REGISTERS - 1
194 int expectNum = sizeof(log) / sizeof(log[0]);
195 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
196 }
197
GetStackTop(void)198 static string GetStackTop(void)
199 {
200 ifstream spFile;
201 spFile.open("/data/sp");
202 string sp;
203 spFile >> sp;
204 spFile.close();
205 int ret = remove("/data/sp");
206 if (ret != 0) {
207 printf("remove failed!");
208 }
209 int leftZero = REGISTER_FORMAT_LENGTH - sp.length();
210 while (leftZero > 0) {
211 sp = "0" + sp;
212 leftZero--;
213 }
214 GTEST_LOG_(INFO) << "sp:" << sp;
215 return sp;
216 }
217
WriteRealPid(int realPid)218 static void WriteRealPid(int realPid)
219 {
220 ofstream file;
221 file.open(NSPID_PATH);
222 file << std::to_string(realPid);
223 file.close();
224 }
225
ReadRealPid(void)226 static int ReadRealPid(void)
227 {
228 ifstream file;
229 file.open(NSPID_PATH);
230 string pid;
231 file >> pid;
232 file.close();
233 int ret = remove(NSPID_PATH);
234 if (ret != 0) {
235 printf("remove failed!");
236 }
237 int realPid = atoi(pid.c_str());
238 GTEST_LOG_(INFO) << "real pid:" << realPid;
239 return realPid;
240 }
241
CheckCountNumStackTop(const string & filePath,const pid_t & pid)242 static bool CheckCountNumStackTop(const string& filePath, const pid_t& pid)
243 {
244 string log[] = {
245 "Pid:" + to_string(pid), "Uid", ":crasher", "SIGSEGV", "Tid:", "#00", "Registers:", REGISTERS, "FaultStack:",
246 "Maps:", "/crasher"
247 };
248 string sp = GetStackTop();
249 for (auto& keyword : log) {
250 if (keyword == "sp:") {
251 keyword += sp;
252 }
253 }
254 int minRegIdx = 6; // 6 : index of first REGISTERS - 1
255 int expectNum = sizeof(log) / sizeof(log[0]);
256 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
257 }
258
CheckCppCrashAllLabelKeywords(const string & filePath,const pid_t & pid)259 static bool CheckCppCrashAllLabelKeywords(const string& filePath, const pid_t& pid)
260 {
261 string log[] = {
262 "Timestamp:", "Pid:" + to_string(pid), "Uid:", "Process", "Reason:", "LastFatalMessage:", "Fault", "thread",
263 "info:", "Tid:", "#00", "Registers:", REGISTERS, "Memory", "near", "registers:", "FaultStack:", "Maps:",
264 "/crasher"
265 };
266 int minRegIdx = 11; // 11 : index of first REGISTERS - 1
267 int expectNum = sizeof(log) / sizeof(log[0]);
268 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
269 }
270
271 #if defined(__aarch64__)
CheckCppCrashAsyncStackEnableKeywords(const string & filePath,const pid_t & pid)272 static bool CheckCppCrashAsyncStackEnableKeywords(const string& filePath, const pid_t& pid)
273 {
274 string log[] = {
275 "Timestamp:", "Pid:" + to_string(pid), "Uid:", "Process", "Reason:", "Fault", "thread", "info:",
276 "Tid:", "#00", "SubmitterStacktrace", "Registers:", REGISTERS, "Memory", "near", "registers:",
277 "FaultStack:", "Maps:", "/crasher"
278 };
279 int minRegIdx = 11; // 11 : index of first REGISTERS - 1
280 int expectNum = sizeof(log) / sizeof(log[0]);
281 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
282 }
283
CheckCppCrashAsyncStackDisableKeywords(const string & filePath,const pid_t & pid)284 static bool CheckCppCrashAsyncStackDisableKeywords(const string& filePath, const pid_t& pid)
285 {
286 string log[] = {
287 "Timestamp:", "Pid:" + to_string(pid), "Uid:", "Process", "Reason:", "Fault", "thread", "info:",
288 "Tid:", "#00", "Registers:", REGISTERS, "Memory", "near", "registers:",
289 "FaultStack:", "Maps:", "/crasher"
290 };
291 int minRegIdx = 10; // 10 : index of first REGISTERS - 1
292 int expectNum = sizeof(log) / sizeof(log[0]);
293 if (CheckKeyWords(filePath, log, expectNum, minRegIdx) != expectNum) {
294 return false;
295 }
296 string key[] = {
297 "SubmitterStacktrace"
298 };
299 return CheckKeyWords(filePath, key, 1, -1) == 0;
300 }
301
CheckTestGetCrashObj(const string & filePath,const pid_t & pid)302 static bool CheckTestGetCrashObj(const string& filePath, const pid_t& pid)
303 {
304 string log[] = {
305 "Pid:" + to_string(pid), "Uid", ":crasher", "SIGSEGV", "LastFatalMessage:", "crashObject.",
306 "Tid:", "#00", "Registers:", REGISTERS, "FaultStack:", "Maps:", "/crasher"
307 };
308 int minRegIdx = 8; // 8 : index of first REGISTERS - 1
309 int expectNum = sizeof(log) / sizeof(log[0]);
310 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
311 }
312
CheckTestGetCrashObjMemory(const string & filePath,const pid_t & pid)313 static bool CheckTestGetCrashObjMemory(const string& filePath, const pid_t& pid)
314 {
315 string log[] = {
316 "Pid:" + to_string(pid), "Uid", ":crasher", "SIGSEGV", "Tid:", "#00", "Registers:",
317 REGISTERS, "ExtraCrashInfo(Memory", "FaultStack:", "Maps:", "/crasher"
318 };
319 int minRegIdx = 6; // 6 : index of first REGISTERS - 1
320 int expectNum = sizeof(log) / sizeof(log[0]);
321 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
322 }
323 #endif
324
RequestMemory(char * msg)325 static void RequestMemory(char* msg)
326 {
327 const size_t count = 5;
328 for (size_t i = 0; i < count; i++) {
329 usleep(2000); // 2000 : sleep 2ms
330 const int32_t initAllocSz = 11;
331 void* p = malloc(initAllocSz);
332 int ret = memcpy_s(p, initAllocSz, msg, initAllocSz - 1);
333 if (ret < 0) {
334 ASSERT_GT(ret, 0);
335 }
336 free(p);
337 }
338 }
339
340 /**
341 * @tc.name: FaultLoggerdSystemTest001
342 * @tc.desc: test C crasher application: SIGFPE
343 * @tc.type: FUNC
344 */
345 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest001, TestSize.Level2)
346 {
347 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest001: start.";
348 string cmd = "SIGFPE";
349 string fileName;
350 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
351 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
352 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
353 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
354 FAIL();
355 }
356 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "ProcessDfxRequestTest001 Failed";
357 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest001: end.";
358 }
359
360 /**
361 * @tc.name: FaultLoggerdSystemTest002
362 * @tc.desc: test CPP crasher application: SIGFPE
363 * @tc.type: FUNC
364 */
365 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest002, TestSize.Level2)
366 {
367 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest002: start.";
368 string cmd = "SIGFPE";
369 string fileName;
370 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
371 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
372 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
373 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
374 FAIL();
375 }
376 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest002 Failed";
377 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest002: end.";
378 }
379
380 /**
381 * @tc.name: FaultLoggerdSystemTest003
382 * @tc.desc: test C crasher application: SIGILL
383 * @tc.type: FUNC
384 */
385 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest003, TestSize.Level2)
386 {
387 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest003: start.";
388 string cmd = "SIGILL";
389 string fileName;
390 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
391 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
392 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
393 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
394 FAIL();
395 }
396 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest003 Failed";
397 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest003: end.";
398 }
399
400 /**
401 * @tc.name: FaultLoggerdSystemTest004
402 * @tc.desc: test CPP crasher application: SIGILL
403 * @tc.type: FUNC
404 */
405 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest004, TestSize.Level2)
406 {
407 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest004: start.";
408 string cmd = "SIGILL";
409 string fileName;
410 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
411 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
412 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
413 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
414 FAIL();
415 }
416 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest004 Failed";
417 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest004: end.";
418 }
419
420 /**
421 * @tc.name: FaultLoggerdSystemTest005
422 * @tc.desc: test C crasher application: triSIGILL
423 * @tc.type: FUNC
424 */
425 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest005, TestSize.Level2)
426 {
427 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest005: start.";
428 string cmd = "triSIGILL";
429 string fileName;
430 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
431 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
432 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
433 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
434 FAIL();
435 }
436 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest005 Failed";
437 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest005: end.";
438 }
439
440 /**
441 * @tc.name: FaultLoggerdSystemTest006
442 * @tc.desc: test CPP crasher application: triSIGILL
443 * @tc.type: FUNC
444 */
445 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest006, TestSize.Level2)
446 {
447 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest006: start.";
448 string cmd = "triSIGILL";
449 string fileName;
450 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
451 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
452 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
453 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
454 FAIL();
455 }
456 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest006 Failed";
457 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest006: end.";
458 }
459
460 /**
461 * @tc.name: FaultLoggerdSystemTest007
462 * @tc.desc: test C crasher application: SIGSEGV
463 * @tc.type: FUNC
464 */
465 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest007, TestSize.Level2)
466 {
467 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest007: start.";
468 string cmd = "SIGSEGV";
469 string fileName;
470 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
471 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
472 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
473 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
474 FAIL();
475 }
476 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest007 Failed";
477 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest007: end.";
478 }
479
480 /**
481 * @tc.name: FaultLoggerdSystemTest008
482 * @tc.desc: test CPP crasher application: SIGSEGV
483 * @tc.type: FUNC
484 */
485 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest008, TestSize.Level2)
486 {
487 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest008: start.";
488 string cmd = "SIGSEGV";
489 string fileName;
490 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
491 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
492 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
493 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
494 FAIL();
495 }
496 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest008 Failed";
497 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest008: end.";
498 }
499
500 /**
501 * @tc.name: FaultLoggerdSystemTest009
502 * @tc.desc: test C crasher application: triSIGSEGV
503 * @tc.type: FUNC
504 */
505 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest009, TestSize.Level2)
506 {
507 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest009: start.";
508 string cmd = "triSIGSEGV";
509 string fileName;
510 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
511 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
512 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
513 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
514 FAIL();
515 }
516 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest009 Failed";
517 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest009: end.";
518 }
519
520 /**
521 * @tc.name: FaultLoggerdSystemTest010
522 * @tc.desc: test CPP crasher application: triSIGSEGV
523 * @tc.type: FUNC
524 */
525 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest010, TestSize.Level2)
526 {
527 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest010: start.";
528 string cmd = "triSIGSEGV";
529 string fileName;
530 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
531 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
532 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
533 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
534 FAIL();
535 }
536 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest010 Failed";
537 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest010: end.";
538 }
539
540 /**
541 * @tc.name: FaultLoggerdSystemTest011
542 * @tc.desc: test C crasher application: SIGTRAP
543 * @tc.type: FUNC
544 */
545 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest011, TestSize.Level2)
546 {
547 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest011: start.";
548 string cmd = "SIGTRAP";
549 string fileName;
550 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
551 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
552 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
553 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
554 FAIL();
555 }
556 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest011 Failed";
557 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest011: end.";
558 }
559
560 /**
561 * @tc.name: FaultLoggerdSystemTest012
562 * @tc.desc: test CPP crasher application: SIGTRAP
563 * @tc.type: FUNC
564 */
565 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest012, TestSize.Level2)
566 {
567 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest012: start.";
568 string cmd = "SIGTRAP";
569 string fileName;
570 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
571 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
572 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
573 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
574 FAIL();
575 }
576 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest012 Failed";
577 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest012: end.";
578 }
579
580 /**
581 * @tc.name: FaultLoggerdSystemTest013
582 * @tc.desc: test C crasher application: triSIGTRAP
583 * @tc.type: FUNC
584 */
585 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest013, TestSize.Level2)
586 {
587 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest013: start.";
588 string cmd = "triSIGTRAP";
589 string fileName;
590 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
591 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
592 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
593 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
594 FAIL();
595 }
596 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest013 Failed";
597 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest013: end.";
598 }
599
600 /**
601 * @tc.name: FaultLoggerdSystemTest014
602 * @tc.desc: test CPP crasher application: triSIGTRAP
603 * @tc.type: FUNC
604 */
605 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest014, TestSize.Level2)
606 {
607 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest014: start.";
608 string cmd = "triSIGTRAP";
609 string fileName;
610 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
611 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
612 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
613 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
614 FAIL();
615 }
616 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest014 Failed";
617 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest014: end.";
618 }
619
620 /**
621 * @tc.name: FaultLoggerdSystemTest015
622 * @tc.desc: test C crasher application: SIGABRT
623 * @tc.type: FUNC
624 */
625 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest015, TestSize.Level2)
626 {
627 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest015: start.";
628 string cmd = "SIGABRT";
629 string fileName;
630 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
631 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
632 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
633 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
634 FAIL();
635 }
636 EXPECT_TRUE(CheckCountNumAbort(fileName, pid)) << "FaultLoggerdSystemTest015 Failed";
637 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest015: end.";
638 }
639
640 /**
641 * @tc.name: FaultLoggerdSystemTest016
642 * @tc.desc: test CPP crasher application: SIGABRT
643 * @tc.type: FUNC
644 */
645 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest016, TestSize.Level2)
646 {
647 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest016: start.";
648 string cmd = "SIGABRT";
649 string fileName;
650 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
651 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
652 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
653 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
654 FAIL();
655 }
656 EXPECT_TRUE(CheckCountNumAbort(fileName, pid)) << "FaultLoggerdSystemTest016 Failed";
657 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest016: end.";
658 }
659
660 /**
661 * @tc.name: FaultLoggerdSystemTest017
662 * @tc.desc: test C crasher application: triSIGABRT
663 * @tc.type: FUNC
664 */
665 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest017, TestSize.Level2)
666 {
667 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest017: start.";
668 string cmd = "triSIGABRT";
669 string fileName;
670 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
671 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
672 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
673 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
674 FAIL();
675 }
676 EXPECT_TRUE(CheckCountNumAbort(fileName, pid)) << "FaultLoggerdSystemTest017 Failed";
677 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest017: end.";
678 }
679
680 /**
681 * @tc.name: FaultLoggerdSystemTest018
682 * @tc.desc: test CPP crasher application: triSIGABRT
683 * @tc.type: FUNC
684 */
685 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest018, TestSize.Level2)
686 {
687 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest018: start.";
688 string cmd = "triSIGABRT";
689 string fileName;
690 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
691 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
692 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
693 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
694 FAIL();
695 }
696 EXPECT_TRUE(CheckCountNumAbort(fileName, pid)) << "FaultLoggerdSystemTest018 Failed";
697 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest018: end.";
698 }
699
700 /**
701 * @tc.name: FaultLoggerdSystemTest019
702 * @tc.desc: test C crasher application: SIGBUS
703 * @tc.type: FUNC
704 */
705 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest019, TestSize.Level2)
706 {
707 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest019: start.";
708 string cmd = "SIGBUS";
709 string fileName;
710 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
711 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
712 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
713 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
714 FAIL();
715 }
716 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest019 Failed";
717 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest019: end.";
718 }
719
720 /**
721 * @tc.name: FaultLoggerdSystemTest020
722 * @tc.desc: test CPP crasher application: SIGBUS
723 * @tc.type: FUNC
724 */
725 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest020, TestSize.Level2)
726 {
727 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest020: start.";
728 string cmd = "SIGBUS";
729 string fileName;
730 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
731 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
732 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
733 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
734 FAIL();
735 }
736 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest020 Failed";
737 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest020: end.";
738 }
739
740 /**
741 * @tc.name: FaultLoggerdSystemTest021
742 * @tc.desc: test C crasher application: MaxStack
743 * @tc.type: FUNC
744 */
745 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest021, TestSize.Level2)
746 {
747 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest021: start.";
748 string cmd = "MaxStack";
749 string fileName;
750 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
751 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
752 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
753 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
754 FAIL();
755 }
756 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest021 Failed";
757 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest021: end.";
758 }
759
760 /**
761 * @tc.name: FaultLoggerdSystemTest022
762 * @tc.desc: test CPPcrasher application: MaxStack
763 * @tc.type: FUNC
764 */
765 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest022, TestSize.Level2)
766 {
767 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest022: start.";
768 string cmd = "MaxStack";
769 string fileName;
770 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
771 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
772 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
773 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
774 FAIL();
775 }
776 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest022 Failed";
777 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest022: end.";
778 }
779
780 /**
781 * @tc.name: FaultLoggerdSystemTest023
782 * @tc.desc: test C crasher application: MaxMethod
783 * @tc.type: FUNC
784 */
785 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest023, TestSize.Level2)
786 {
787 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest023: start.";
788 string cmd = "MaxMethod";
789 string fileName;
790 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
791 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
792 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
793 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
794 FAIL();
795 }
796 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest023 Failed";
797 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest023: end.";
798 }
799
800 /**
801 * @tc.name: FaultLoggerdSystemTest024
802 * @tc.desc: test CPP crasher application: MaxMethod
803 * @tc.type: FUNC
804 */
805 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest024, TestSize.Level2)
806 {
807 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest024: start.";
808 string cmd = "MaxMethod";
809 string fileName;
810 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
811 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
812 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
813 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
814 FAIL();
815 }
816 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest024 Failed";
817 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest024: end.";
818 }
819
820 /**
821 * @tc.name: FaultLoggerdSystemTest025
822 * @tc.desc: test C crasher application: STACKOF
823 * @tc.type: FUNC
824 */
825 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest025, TestSize.Level2)
826 {
827 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest025: start.";
828 string cmd = "STACKOF";
829 string fileName;
830 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
831 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
832 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
833 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
834 FAIL();
835 }
836 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest025 Failed";
837 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest025: end.";
838 }
839
840 /**
841 * @tc.name: FaultLoggerdSystemTest026
842 * @tc.desc: test CPP crasher application: STACKOF
843 * @tc.type: FUNC
844 */
845 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest026, TestSize.Level2)
846 {
847 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest026: start.";
848 string cmd = "STACKOF";
849 string fileName;
850 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
851 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
852 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
853 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
854 FAIL();
855 }
856 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest026 Failed";
857 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest026: end.";
858 }
859
860 /**
861 * @tc.name: FaultLoggerdSystemTest027
862 * @tc.desc: test CPP crasher application: OOM
863 * @tc.type: FUNC
864 */
865 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest027, TestSize.Level2)
866 {
867 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest027: start.";
868 string cmd = "OOM";
869 string fileName;
870 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
871 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
872 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
873 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
874 FAIL();
875 }
876 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest027 Failed";
877 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest027: end.";
878 }
879
880 /**
881 * @tc.name: FaultLoggerdSystemTest028
882 * @tc.desc: test C crasher application: OOM
883 * @tc.type: FUNC
884 */
885 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest028, TestSize.Level2)
886 {
887 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest028: start.";
888 string cmd = "OOM";
889 string fileName;
890 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
891 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
892 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
893 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
894 FAIL();
895 }
896 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest028 Failed";
897 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest028: end.";
898 }
899 /**
900 * @tc.name: FaultLoggerdSystemTest029
901 * @tc.desc: test CPP crasher application: PCZero
902 * @tc.type: FUNC
903 */
904 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest029, TestSize.Level2)
905 {
906 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest029: start.";
907 string cmd = "PCZero";
908 string fileName;
909 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
910 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
911 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
912 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
913 FAIL();
914 }
915 EXPECT_TRUE(CheckCountNumPCZero(fileName, pid)) << "FaultLoggerdSystemTest029 Failed";
916 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest029: end.";
917 }
918
919 /**
920 * @tc.name: FaultLoggerdSystemTest030
921 * @tc.desc: test C crasher application: PCZero
922 * @tc.type: FUNC
923 */
924 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest030, TestSize.Level2)
925 {
926 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest030: start.";
927 string cmd = "PCZero";
928 string fileName;
929 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
930 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
931 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
932 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
933 FAIL();
934 }
935 EXPECT_TRUE(CheckCountNumPCZero(fileName, pid)) << "FaultLoggerdSystemTest030 Failed";
936 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest030: end.";
937 }
938
939 /**
940 * @tc.name: FaultLoggerdSystemTest031
941 * @tc.desc: test C crasher application: MTCrash
942 * @tc.type: FUNC
943 */
944 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest031, TestSize.Level2)
945 {
946 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest031: start.";
947 string cmd = "MTCrash";
948 string fileName;
949 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName, 2); // 2 : sleep 2s for waiting cppcrash file
950 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
951 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
952 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
953 FAIL();
954 }
955 EXPECT_TRUE(CheckCountNumMultiThread(fileName, pid)) << "FaultLoggerdSystemTest031 Failed";
956 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest031: end.";
957 }
958
959 /**
960 * @tc.name: FaultLoggerdSystemTest032
961 * @tc.desc: test CPP crasher application: MTCrash
962 * @tc.type: FUNC
963 */
964 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest032, TestSize.Level2)
965 {
966 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest032: start.";
967 string cmd = "MTCrash";
968 string fileName;
969 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName, 2); // 2 : sleep 2s for waiting cppcrash file
970 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
971 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
972 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
973 FAIL();
974 }
975 EXPECT_TRUE(CheckCountNumMultiThread(fileName, pid)) << "FaultLoggerdSystemTest032 Failed";
976 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest032: end.";
977 }
978
979 /**
980 * @tc.name: FaultLoggerdSystemTest033
981 * @tc.desc: test CPP crasher application: StackOver64
982 * @tc.type: FUNC
983 */
984 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest033, TestSize.Level2)
985 {
986 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest033: start.";
987 string cmd = "StackOver64";
988 string fileName;
989 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
990 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
991 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
992 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
993 FAIL();
994 }
995 EXPECT_TRUE(CheckCountNumOverStack(fileName, pid)) << "FaultLoggerdSystemTest033 Failed";
996 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest033: end.";
997 }
998
999 /**
1000 * @tc.name: FaultLoggerdSystemTest034
1001 * @tc.desc: test C crasher application: StackOver64
1002 * @tc.type: FUNC
1003 */
1004 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest034, TestSize.Level2)
1005 {
1006 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest034: start.";
1007 string cmd = "StackOver64";
1008 string fileName;
1009 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
1010 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1011 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1012 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1013 FAIL();
1014 }
1015 EXPECT_TRUE(CheckCountNumOverStack(fileName, pid)) << "FaultLoggerdSystemTest034 Failed";
1016 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest034: end.";
1017 }
1018
1019 /**
1020 * @tc.name: FaultLoggerdSystemTest035
1021 * @tc.desc: test C crasher application: StackTop
1022 * @tc.type: FUNC
1023 */
1024 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest035, TestSize.Level2)
1025 {
1026 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest035: start.";
1027 string cmd = "StackTop";
1028 string fileName;
1029 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
1030 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1031 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1032 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1033 FAIL();
1034 }
1035 EXPECT_TRUE(CheckCountNumStackTop(fileName, pid)) << "FaultLoggerdSystemTest035 Failed";
1036 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest035: end.";
1037 }
1038
1039 /**
1040 * @tc.name: FaultLoggerdSystemTest036
1041 * @tc.desc: test CPP crasher application: StackTop
1042 * @tc.type: FUNC
1043 */
1044 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest036, TestSize.Level2)
1045 {
1046 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest036: start.";
1047 string cmd = "StackTop";
1048 string fileName;
1049 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1050 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1051 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1052 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1053 FAIL();
1054 }
1055 EXPECT_TRUE(CheckCountNumStackTop(fileName, pid)) << "FaultLoggerdSystemTest036 Failed";
1056 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest036: end.";
1057 }
1058
GenerateCrashLogFiles()1059 void GenerateCrashLogFiles()
1060 {
1061 for (int i = 0; i < SIGNAL_TEST_NUM; i++) {
1062 system("/data/crasher_c CrashTest &");
1063 }
1064 sleep(10); // 10 : sleep for 10 seconds
1065 }
1066
1067 /**
1068 * @tc.name: FaultLoggerdSystemTest101
1069 * @tc.desc: test C crasher application: 40 Abnormal signal
1070 * @tc.type: FUNC
1071 */
1072 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest101, TestSize.Level2)
1073 {
1074 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest0009: start.";
1075 string clearTempFilesCmd = "rm -rf /data/log/faultlog/temp/*";
1076 system(clearTempFilesCmd.c_str());
1077 GenerateCrashLogFiles();
1078 vector<string> files;
1079 OHOS::GetDirFiles("/data/log/faultlog/temp/", files);
1080 GTEST_LOG_(INFO) << files.size();
1081 EXPECT_EQ(files.size(), SIGNAL_TEST_NUM) << "FaultLoggerdSystemTest101 Failed";
1082 }
1083
CrashInChildThread()1084 static void CrashInChildThread()
1085 {
1086 GTEST_LOG_(INFO) << "CrashInChildThread(): TID = " << gettid();
1087 raise(SIGSEGV);
1088 }
1089
RunInNewPidNs(void * arg)1090 static int RunInNewPidNs(void* arg)
1091 {
1092 (void)arg;
1093 int pid = fork();
1094 if (pid == 0) {
1095 struct ProcInfo g_nsProcInfo;
1096 GetProcStatus(g_nsProcInfo);
1097 WriteRealPid(g_nsProcInfo.pid);
1098 GTEST_LOG_(INFO) << "RunInNewPidNs(): real pid = " << g_nsProcInfo.pid;
1099 GTEST_LOG_(INFO) << "RunInNewPidNs(): PID = " << getpid();
1100 GTEST_LOG_(INFO) << "RunInNewPidNs(): TID = " << gettid();
1101 thread childThread(CrashInChildThread);
1102 childThread.join();
1103 } else if (pid < 0) {
1104 GTEST_LOG_(ERROR) << "RunInNewPidNs(): fork fail";
1105 } else {
1106 waitpid(pid, nullptr, 0);
1107 sleep(3); // 3 : 3 second wait for crash dump finish
1108 }
1109 _exit(0);
1110 }
1111
1112 /**
1113 * @tc.name: FaultLoggerdSystemTest102
1114 * @tc.desc: test crash in process with pid namespace
1115 * @tc.type: FUNC
1116 */
1117 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest102, TestSize.Level2)
1118 {
1119 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest102: start.";
1120 const int stackSz = 1024 * 1024 * 1024; // 1M
1121 void* cloneStack = mmap(nullptr, stackSz,
1122 PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, 1, 0);
1123 if (cloneStack == nullptr) {
1124 FAIL();
1125 }
1126 cloneStack = static_cast<void *>(static_cast<uint8_t *>(cloneStack) + stackSz - 1);
1127 int childPid = clone(RunInNewPidNs, cloneStack, CLONE_NEWPID | SIGCHLD, nullptr);
1128 bool isSuccess = childPid > 0;
1129 if (!isSuccess) {
1130 ASSERT_FALSE(isSuccess);
1131 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest102: Failed to clone new process. errno:" << errno;
1132 return;
1133 }
1134 // wait for get realpid, too long will not monitor create crash file
1135 sleep(1);
1136 int readPid = ReadRealPid();
1137 string fileName = WaitCreateCrashFile("cppcrash", readPid);
1138 EXPECT_NE(0, fileName.size());
1139 printf("PidNs Crash File:%s\n", fileName.c_str());
1140 string log[] = {
1141 "Pid:", "Uid", "SIGSEGV", "Tid:", "#00",
1142 "Registers:", REGISTERS, "FaultStack:", "Maps:"
1143 };
1144 int minRegIdx = 5; // 5 : index of first REGISTERS - 1
1145 int expectNum = sizeof(log) / sizeof(log[0]);
1146 int count = CheckKeyWords(fileName, log, expectNum, minRegIdx);
1147 EXPECT_EQ(count, expectNum);
1148 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest102: end.";
1149 }
1150
1151 /**
1152 * @tc.name: FaultLoggerdSystemTest103
1153 * @tc.desc: test the aging mechanism of the temp directory
1154 * @tc.type: FUNC
1155 */
1156 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest103, TestSize.Level2)
1157 {
1158 string clearTempFilesCmd = "rm -rf /data/log/faultlog/temp/*";
1159 system(clearTempFilesCmd.c_str());
1160 system("/data/crasher_c SIGSEGV"); // trigger aging mechanism
1161 sleep(1); // 1 : sleep for 1 seconds
1162 vector<string> files;
1163 OHOS::GetDirFiles("/data/log/faultlog/temp/", files);
1164 string oldcrash = "";
1165 if (!files.empty()) {
1166 oldcrash = files[0];
1167 }
1168 GTEST_LOG_(INFO) << oldcrash;
1169 files.clear();
1170 for (int i = 0; i < SIGNAL_TEST_NUM; i++) { // 25 : the count of crash file
1171 system("/data/crasher_c SIGSEGV");
1172 }
1173 OHOS::GetDirFiles("/data/log/faultlog/temp/", files);
1174 for (size_t i = 0; i < files.size(); i++) {
1175 if (files[i] == oldcrash) {
1176 FAIL();
1177 }
1178 }
1179 EXPECT_EQ(files.size(), 20) << "FaultLoggerdSystemTest103 Failed";
1180 }
1181
1182 /**
1183 * @tc.name: FaultLoggerdSystemTest0104
1184 * @tc.desc: test crash log build-id
1185 * @tc.type: FUNC
1186 */
1187 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest104, TestSize.Level2)
1188 {
1189 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest104: start.";
1190 string cmd = "SIGSEGV";
1191 string fileName;
1192 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
1193 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1194 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1195 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1196 FAIL();
1197 }
1198 std::ifstream file;
1199 file.open(fileName.c_str(), std::ios::in);
1200 while (!file.eof()) {
1201 string s;
1202 file >> s;
1203 if (s.find("/data/crasher_c") != string::npos) {
1204 string buildId;
1205 size_t leftBraceIdx = s.find('(');
1206 size_t rightBraceIdx = s.find(')');
1207 if (leftBraceIdx != string::npos && rightBraceIdx != string::npos) {
1208 buildId = s.substr(leftBraceIdx + 1, rightBraceIdx - leftBraceIdx - 1);
1209 GTEST_LOG_(INFO) << "build-id = " << buildId;
1210 }
1211 EXPECT_FALSE(buildId.empty()) << "FaultLoggerdSystemTest104 Failed";
1212 break;
1213 }
1214 }
1215 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest104: end.";
1216 }
1217
1218 /**
1219 * @tc.name: FaultLoggerdSystemTest105
1220 * @tc.desc: test C crasher application: SIGABRT, and check all label keywords
1221 * @tc.type: FUNC
1222 */
1223 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest105, TestSize.Level2)
1224 {
1225 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest105: start.";
1226 string cmd = "SIGABRT";
1227 string fileName;
1228 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
1229 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1230 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1231 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1232 FAIL();
1233 }
1234 EXPECT_TRUE(CheckCppCrashAllLabelKeywords(fileName, pid)) << "FaultLoggerdSystemTest105 Failed";
1235 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest105: end.";
1236 }
1237
1238 /**
1239 * @tc.name: FaultLoggerdSystemTest106
1240 * @tc.desc: test CPP crasher application: NullPointerDeref0
1241 * @tc.type: FUNC
1242 */
1243 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest106, TestSize.Level2)
1244 {
1245 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest106: start.";
1246 string cmd = "NullPointerDeref0";
1247 string fileName;
1248 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1249 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1250 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1251 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1252 FAIL();
1253 }
1254 EXPECT_TRUE(CheckCountNumNullpointer(fileName, pid)) << "FaultLoggerdSystemTest106 Failed";
1255 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest106: end.";
1256 }
1257
1258 /**
1259 * @tc.name: FaultLoggerdSystemTest107
1260 * @tc.desc: test CPP crasher application: STACKOF
1261 * @tc.type: FUNC
1262 */
1263 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest107, TestSize.Level2)
1264 {
1265 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest107: start.";
1266 string cmd = "STACKOF";
1267 string fileName;
1268 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1269 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1270 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1271 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1272 FAIL();
1273 }
1274 EXPECT_TRUE(CheckCountNumStackOverFlow(fileName, pid)) << "FaultLoggerdSystemTest107 Failed";
1275 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest107: end.";
1276 }
1277
1278 /**
1279 * @tc.name: FaultLoggerdSystemTest108
1280 * @tc.desc: test Cpp crasher application: StackCorruption, and check all label keywords
1281 * @tc.type: FUNC
1282 */
1283 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest108, TestSize.Level2)
1284 {
1285 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest108: start.";
1286 string cmd = "StackCorruption";
1287 string fileName;
1288 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1289 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1290 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1291 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1292 FAIL();
1293 }
1294 EXPECT_TRUE(CheckCppCrashAllLabelKeywords(fileName, pid)) << "FaultLoggerdSystemTest108 Failed";
1295 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest108: end.";
1296 }
1297
1298 #if defined(PROCESSDUMP_MINIDEBUGINFO)
CheckMinidebugSymbols(const string & filePath,const pid_t & pid,const string & option)1299 static bool CheckMinidebugSymbols(const string& filePath, const pid_t& pid, const string& option)
1300 {
1301 map<string, string> optionSymbolMap = {
1302 { string("triSIGSEGV"), string("SegmentFaultException") },
1303 { string("triSIGARBT"), string("Abort") }
1304 };
1305 string symbol;
1306 auto iter = optionSymbolMap.find(option);
1307 if (iter != optionSymbolMap.end()) {
1308 GTEST_LOG_(INFO) << "optionSymbolMap matched";
1309 symbol = iter->second;
1310 }
1311 string log[] = {
1312 "Pid:" + to_string(pid), "Uid", ":crasher", "Tid:", "#00",
1313 symbol, "ParseAndDoCrash", "main", REGISTERS
1314 };
1315 int minRegIdx = 7; // 7 : index of first REGISTERS - 1
1316 int expectNum = sizeof(log) / sizeof(log[0]);
1317 return CheckKeyWords(filePath, log, expectNum, minRegIdx) == expectNum;
1318 }
1319
1320 /**
1321 * @tc.name: FaultLoggerdSystemTest109
1322 * @tc.desc: trigger crasher_c SIGSEGV and check minidebug synbols
1323 * @tc.type: FUNC
1324 */
1325 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest109, TestSize.Level2)
1326 {
1327 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest109: start.";
1328 string cmd = "triSIGSEGV";
1329 string fileName;
1330 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
1331 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1332 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1333 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1334 FAIL();
1335 }
1336 EXPECT_TRUE(CheckMinidebugSymbols(fileName, pid, cmd)) << "FaultLoggerdSystemTest109 Failed";
1337 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest109: end.";
1338 }
1339
1340 /**
1341 * @tc.name: FaultLoggerdSystemTest110
1342 * @tc.desc: trigger crasher_cpp SIGSEGV and check minidebug synbols
1343 * @tc.type: FUNC
1344 */
1345 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest110, TestSize.Level2)
1346 {
1347 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest110: start.";
1348 string cmd = "triSIGSEGV";
1349 string fileName;
1350 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1351 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1352 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1353 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1354 FAIL();
1355 }
1356 EXPECT_TRUE(CheckMinidebugSymbols(fileName, pid, cmd)) << "FaultLoggerdSystemTest110 Failed";
1357 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest110: end.";
1358 }
1359
1360 /**
1361 * @tc.name: FaultLoggerdSystemTest111
1362 * @tc.desc: trigger crasher_c SIGABRT and check minidebug synbols
1363 * @tc.type: FUNC
1364 */
1365 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest111, TestSize.Level2)
1366 {
1367 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest111: start.";
1368 string cmd = "triSIGABRT";
1369 string fileName;
1370 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
1371 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1372 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1373 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1374 FAIL();
1375 }
1376 EXPECT_TRUE(CheckMinidebugSymbols(fileName, pid, cmd)) << "FaultLoggerdSystemTest111 Failed";
1377 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest111: end.";
1378 }
1379
1380 /**
1381 * @tc.name: FaultLoggerdSystemTest112
1382 * @tc.desc: trigger crasher_cpp SIGABRT and check minidebug synbols
1383 * @tc.type: FUNC
1384 */
1385 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest112, TestSize.Level2)
1386 {
1387 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest112: start.";
1388 string cmd = "triSIGABRT";
1389 string fileName;
1390 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1391 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1392 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1393 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1394 FAIL();
1395 }
1396 EXPECT_TRUE(CheckMinidebugSymbols(fileName, pid, cmd)) << "FaultLoggerdSystemTest112 Failed";
1397 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest112: end.";
1398 }
1399 #endif
1400
1401 /**
1402 * @tc.name: FaultLoggerdSystemTest113
1403 * @tc.desc: test fetch last fatal message from libc
1404 * @tc.type: FUNC
1405 */
1406 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest113, TestSize.Level2)
1407 {
1408 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest113: start.";
1409 string cmd = "FatalMessage";
1410 string fileName;
1411 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1412 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1413 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1414 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1415 FAIL();
1416 }
1417 EXPECT_TRUE(CheckCppCrashAllLabelKeywords(fileName, pid)) << "FaultLoggerdSystemTest113 Failed";
1418 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest113: end.";
1419 }
1420
1421 #if defined(__aarch64__)
1422 /**
1423 * @tc.name: FaultLoggerdSystemTest114
1424 * @tc.desc: Test async stacktrace enable in nomal thread crash case
1425 * @tc.type: FUNC
1426 */
1427 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest114, TestSize.Level2)
1428 {
1429 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest114: start.";
1430 string cmd = "AsyncStack";
1431 string fileName;
1432 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1433 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1434 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1435 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1436 FAIL();
1437 }
1438 EXPECT_TRUE(CheckCppCrashAsyncStackEnableKeywords(fileName, pid)) << "FaultLoggerdSystemTest114 Failed";
1439 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest114: end.";
1440 }
1441
1442 /**
1443 * @tc.name: FaultLoggerdSystemTest115
1444 * @tc.desc: Test async-stacktrace api enable in ffrt crash case
1445 * @tc.type: FUNC
1446 */
1447 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest115, TestSize.Level2)
1448 {
1449 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest115: start.";
1450 string cmd = "CrashInFFRT true";
1451 string fileName;
1452 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1453 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1454 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1455 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1456 FAIL();
1457 }
1458 EXPECT_TRUE(CheckCppCrashAsyncStackEnableKeywords(fileName, pid)) << "FaultLoggerdSystemTest115 Failed";
1459 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest115: end.";
1460 }
1461
1462 /**
1463 * @tc.name: FaultLoggerdSystemTest116
1464 * @tc.desc: Test async-stacktrace api enable in work callback crash case
1465 * @tc.type: FUNC
1466 */
1467 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest116, TestSize.Level2)
1468 {
1469 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest116: start.";
1470 string cmd = "CrashInLibuvWork true";
1471 string fileName;
1472 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1473 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1474 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1475 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1476 FAIL();
1477 }
1478 EXPECT_TRUE(CheckCppCrashAsyncStackEnableKeywords(fileName, pid)) << "FaultLoggerdSystemTest116 Failed";
1479 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest116: end.";
1480 }
1481
1482 /**
1483 * @tc.name: FaultLoggerdSystemTest117
1484 * @tc.desc: Test async-stacktrace api enable in timer callback crash case
1485 * @tc.type: FUNC
1486 */
1487 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest117, TestSize.Level2)
1488 {
1489 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest117: start.";
1490 string cmd = "CrashInLibuvTimer true";
1491 string fileName;
1492 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1493 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1494 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1495 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1496 FAIL();
1497 }
1498 EXPECT_TRUE(CheckCppCrashAsyncStackEnableKeywords(fileName, pid)) << "FaultLoggerdSystemTest117 Failed";
1499 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest117: end.";
1500 }
1501
1502 /**
1503 * @tc.name: FaultLoggerdSystemTest118
1504 * @tc.desc: Test async-stacktrace api enalbe in work callback done crash case
1505 * @tc.type: FUNC
1506 */
1507 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest118, TestSize.Level2)
1508 {
1509 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest118: start.";
1510 string cmd = "CrashInLibuvWorkDone true";
1511 string fileName;
1512 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1513 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1514 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1515 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1516 FAIL();
1517 }
1518 EXPECT_TRUE(CheckCppCrashAsyncStackEnableKeywords(fileName, pid)) << "FaultLoggerdSystemTest118 Failed";
1519 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest118: end.";
1520 }
1521
1522 /**
1523 * @tc.name: FaultLoggerdSystemTest119
1524 * @tc.desc: Test async-stacktrace api disable in ffrt crash case
1525 * @tc.type: FUNC
1526 */
1527 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest119, TestSize.Level2)
1528 {
1529 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest119: start.";
1530 string cmd = "CrashInFFRT false";
1531 string fileName;
1532 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1533 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1534 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1535 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1536 FAIL();
1537 }
1538 EXPECT_TRUE(CheckCppCrashAsyncStackDisableKeywords(fileName, pid)) << "FaultLoggerdSystemTest119 Failed";
1539 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest119: end.";
1540 }
1541
1542 /**
1543 * @tc.name: FaultLoggerdSystemTest120
1544 * @tc.desc: Test async-stacktrace api disable in work callback crash case
1545 * @tc.type: FUNC
1546 */
1547 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest120, TestSize.Level2)
1548 {
1549 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest120: start.";
1550 string cmd = "CrashInLibuvWork false";
1551 string fileName;
1552 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1553 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1554 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1555 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1556 FAIL();
1557 }
1558 EXPECT_TRUE(CheckCppCrashAsyncStackDisableKeywords(fileName, pid)) << "FaultLoggerdSystemTest120 Failed";
1559 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest120: end.";
1560 }
1561
1562 /**
1563 * @tc.name: FaultLoggerdSystemTest121
1564 * @tc.desc: Test async-stacktrace api disable in timer callback crash case
1565 * @tc.type: FUNC
1566 */
1567 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest121, TestSize.Level2)
1568 {
1569 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest121: start.";
1570 string cmd = "CrashInLibuvTimer false";
1571 string fileName;
1572 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1573 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1574 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1575 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1576 FAIL();
1577 }
1578 EXPECT_TRUE(CheckCppCrashAsyncStackDisableKeywords(fileName, pid)) << "FaultLoggerdSystemTest121 Failed";
1579 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest121: end.";
1580 }
1581
1582 /**
1583 * @tc.name: FaultLoggerdSystemTest122
1584 * @tc.desc: Test async-stacktrace api disable in work callback done crash case
1585 * @tc.type: FUNC
1586 */
1587 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest122, TestSize.Level2)
1588 {
1589 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest122: start.";
1590 string cmd = "CrashInLibuvWorkDone false";
1591 string fileName;
1592 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1593 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1594 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1595 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1596 FAIL();
1597 }
1598 EXPECT_TRUE(CheckCppCrashAsyncStackDisableKeywords(fileName, pid)) << "FaultLoggerdSystemTest122 Failed";
1599 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest122: end.";
1600 }
1601
1602 /**
1603 * @tc.name: FaultLoggerdSystemTest123
1604 * @tc.desc: Test crash log to /log/crash when faultloggerd unstart case
1605 * @tc.type: FUNC
1606 */
1607 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest123, TestSize.Level2)
1608 {
1609 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest123: start.";
1610 string crashDir = "/log/crash/";
1611 bool dirExists = std::filesystem::exists(crashDir);
1612 if (dirExists) {
1613 string clearCrashFilesCmd = "rm -rf /log/crash/*";
1614 system(clearCrashFilesCmd.c_str());
1615 string stopFaultLoggerd = "service_control stop faultloggerd";
1616 (void)ExecuteCommands(stopFaultLoggerd);
1617 string cmd = "SIGABRT";
1618 string fileName;
1619 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName, 1, crashDir);
1620
1621 string startFaultLoggerd = "service_control start faultloggerd";
1622 (void)ExecuteCommands(startFaultLoggerd);
1623 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1624 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1625 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1626 FAIL();
1627 }
1628 EXPECT_TRUE(CheckCountNum(fileName, pid, cmd)) << "FaultLoggerdSystemTest123 Failed";
1629 } else {
1630 EXPECT_FALSE(dirExists);
1631 }
1632 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest123: end.";
1633 }
1634
1635 /**
1636 * @tc.name: FaultLoggerdSystemTest124
1637 * @tc.desc: Test get crash object
1638 * @tc.type: FUNC
1639 */
1640 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest124, TestSize.Level2)
1641 {
1642 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest124: start.";
1643 string cmd = "TestGetCrashObj";
1644 string fileName;
1645 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1646 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1647 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1648 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1649 FAIL();
1650 }
1651 EXPECT_TRUE(CheckTestGetCrashObj(fileName, pid)) << "FaultLoggerdSystemTest124 Failed";
1652
1653 cmd = "TestGetCrashObjMemory";
1654 pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1655 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1656 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1657 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1658 FAIL();
1659 }
1660 EXPECT_TRUE(CheckTestGetCrashObjMemory(fileName, pid)) << "FaultLoggerdSystemTest124 Failed";
1661 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest124: end.";
1662 }
1663 #endif
1664
1665 /**
1666 * @tc.name: FaultLoggerdSystemTest125
1667 * @tc.desc: Test process exit after being killed
1668 * @tc.type: FUNC
1669 */
1670 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest125, TestSize.Level2)
1671 {
1672 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest125: start.";
1673 InstallTestHap("/data/FaultloggerdJsTest.hap");
1674 string testBundleName = TEST_BUNDLE_NAME;
1675 string testAbiltyName = testBundleName + ".MainAbility";
1676 for (int i = 0; i < 2; i++) { // 2 : check again
1677 int pid = LaunchTestHap(testAbiltyName, testBundleName);
1678 if (pid == 0) {
1679 GTEST_LOG_(ERROR) << "Failed to launch target hap.";
1680 continue;
1681 }
1682 kill(pid, SIGABRT);
1683 sleep(2); // 2 : sleep 2s
1684 int newPid = GetProcessPid(TEST_BUNDLE_NAME);
1685 EXPECT_NE(pid, newPid) << "FaultLoggerdSystemTest125 Failed";
1686 }
1687 StopTestHap(TEST_BUNDLE_NAME);
1688 UninstallTestHap(TEST_BUNDLE_NAME);
1689 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest125: end.";
1690 }
1691
1692 #if defined(__aarch64__)
1693 /**
1694 * @tc.name: FaultLoggerdSystemTest126
1695 * @tc.desc: Test /log/crash files max num when faultloggerd unstart case
1696 * @tc.type: FUNC
1697 */
1698 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest126, TestSize.Level2)
1699 {
1700 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest126: start.";
1701 string crashDir = "/log/crash/";
1702 bool dirExists = std::filesystem::exists(crashDir);
1703 if (dirExists) {
1704 string clearCrashFilesCmd = "rm -rf /log/crash/*";
1705 system(clearCrashFilesCmd.c_str());
1706 string stopFaultLoggerd = "service_control stop faultloggerd";
1707 (void)ExecuteCommands(stopFaultLoggerd);
1708
1709 string cmd = "SIGABRT";
1710 string fileName;
1711 pid_t pid = -1;
1712 int maxFilesNum = 5;
1713 string startFaultLoggerd = "service_control start faultloggerd";
1714 for (int i = 0; i < (maxFilesNum + 1); ++i) {
1715 pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName, 1, crashDir);
1716 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1717 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1718 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1719 (void)ExecuteCommands(startFaultLoggerd);
1720 FAIL();
1721 }
1722 }
1723 (void)ExecuteCommands(startFaultLoggerd);
1724 std::vector<std::string> files;
1725 ReadDirFiles(crashDir, files);
1726 EXPECT_TRUE(files.size() <= maxFilesNum) << "FaultLoggerdSystemTest126 Failed";
1727 } else {
1728 EXPECT_FALSE(dirExists);
1729 }
1730 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest126: end.";
1731 }
1732 #endif
1733 /**
1734 * @tc.name: FaultLoggerdSystemTest127
1735 * @tc.desc: Test lock exit after being killed
1736 * @tc.type: FUNC
1737 */
1738 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest127, TestSize.Level2)
1739 {
1740 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest127: start.";
1741 const size_t count = 50;
1742 const size_t threadSize = 10;
1743 const size_t msgSize = 10;
1744 char msg[msgSize] = {'a', 'b', 'c', 'd'};
1745 size_t sleepTime = 5000; // 5000 : sleep 5ms
1746 const size_t deviation = 50;
1747 for (size_t i = 0; i < count; i++) {
1748 GTEST_LOG_(INFO) << i;
1749 pid_t pid = fork();
1750 ASSERT_NE(pid, -1);
1751 if (pid == 0) {
1752 for (size_t j = 0; j < threadSize; j++) {
1753 std::thread shmThread(RequestMemory, msg);
1754 shmThread.detach();
1755 RequestMemory(msg);
1756 }
1757 } else {
1758 usleep(sleepTime);
1759 kill(pid, SIGKILL);
1760 int status = 0;
1761 waitpid(pid, &status, 0);
1762 ASSERT_TRUE(WIFSIGNALED(status));
1763 int signal = WTERMSIG(status);
1764 ASSERT_EQ(signal, SIGKILL);
1765 sleepTime = sleepTime + deviation;
1766 }
1767 }
1768 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest127: end.";
1769 }
1770
1771 /**
1772 * @tc.name: FaultLoggerdSystemTest128
1773 * @tc.desc: Test block process exit debug function
1774 * @tc.type: FUNC
1775 */
1776 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest128, TestSize.Level2)
1777 {
1778 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest128: start.";
1779 InstallTestHap("/data/FaultloggerdJsTest.hap");
1780 string testBundleName = TEST_BUNDLE_NAME;
1781 string testAbiltyName = testBundleName + ".MainAbility";
1782
1783 int pid = LaunchTestHap(testAbiltyName, testBundleName);
1784 if (pid > 0) {
1785 system("param set faultloggerd.priv.block_crash_process.enabled true");
1786 kill(pid, SIGABRT);
1787 int newPid = GetProcessPid(TEST_BUNDLE_NAME);
1788 system("param set faultloggerd.priv.block_crash_process.enabled false");
1789 kill(pid, SIGKILL);
1790 EXPECT_TRUE(pid == newPid) << "FaultLoggerdSystemTest128 Failed";
1791 } else {
1792 EXPECT_TRUE(pid <= 0) << "FaultLoggerdSystemTest128 Failed";
1793 }
1794 StopTestHap(TEST_BUNDLE_NAME);
1795 UninstallTestHap(TEST_BUNDLE_NAME);
1796 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest128: end.";
1797 }
1798
1799 #if defined(__aarch64__)
1800 /**
1801 * @tc.name: FaultLoggerdSystemTest129
1802 * @tc.desc: Test process fd leak unwind
1803 * @tc.type: FUNC
1804 */
1805 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest129, TestSize.Level2)
1806 {
1807 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest129: start.";
1808 pid_t pid = fork();
1809 if (pid < 0) {
1810 EXPECT_GT(pid, -1);
1811 } else if (pid == 0) {
1812 int fd = 0;
1813 while (true) {
1814 fd = open("/dev/null", O_RDONLY);
1815 if (fd == -1) {
1816 raise(SIGABRT);
1817 break;
1818 }
1819 }
1820 } else {
1821 auto fileName = WaitCreateCrashFile("cppcrash", pid);
1822 EXPECT_NE(0, fileName.size());
1823 string log[] = {
1824 "Pid:", "Uid", "SIGABRT", "Tid:", "#00",
1825 "Registers:", REGISTERS, "FaultStack:", "Maps:"
1826 };
1827 int minRegIdx = 5; // 5 : index of first REGISTERS - 1
1828 int expectNum = sizeof(log) / sizeof(log[0]);
1829 int count = CheckKeyWords(fileName, log, expectNum, minRegIdx);
1830 EXPECT_EQ(count, expectNum);
1831 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest129: end.";
1832 }
1833 }
1834 #endif
1835
1836 /**
1837 * @tc.name: FaultLoggerdSystemTest130
1838 * @tc.desc: test crasher application: SetLastFatalMessage
1839 * @tc.type: FUNC
1840 */
1841 HWTEST_F(FaultLoggerdSystemTest, FaultLoggerdSystemTest130, TestSize.Level2)
1842 {
1843 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest130: start.";
1844 string cmd = "SetLastFatalMessage";
1845 string fileName;
1846 pid_t pid = TriggerCrasherAndGetFileName(cmd, CRASHER_C, fileName);
1847 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1848 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1849 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1850 FAIL();
1851 }
1852 EXPECT_TRUE(CheckCountNumAbort(fileName, pid)) << "FaultLoggerdSystemTest130 Failed";
1853
1854 pid = TriggerCrasherAndGetFileName(cmd, CRASHER_CPP, fileName);
1855 GTEST_LOG_(INFO) << "test pid(" << pid << ")" << " cppcrash file name : " << fileName;
1856 if (pid < 0 || fileName.size() < CPPCRASH_FILENAME_MIN_LENGTH) {
1857 GTEST_LOG_(ERROR) << "Trigger Crash Failed.";
1858 FAIL();
1859 }
1860 EXPECT_TRUE(CheckCountNumAbort(fileName, pid)) << "FaultLoggerdSystemTest130 Failed";
1861 GTEST_LOG_(INFO) << "FaultLoggerdSystemTest130: end.";
1862 }
1863 } // namespace HiviewDFX
1864 } // namespace OHOS
1865