• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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