• 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 <gtest/gtest.h>
17 
18 #include <securec.h>
19 #include <unistd.h>
20 #include "dfx_util.h"
21 
22 #define private public
23 #include "fault_logger_daemon.h"
24 #undef private
25 
26 using namespace OHOS::HiviewDFX;
27 using namespace testing::ext;
28 using namespace std;
29 
30 namespace OHOS {
31 namespace HiviewDFX {
32 class FaultLoggerDaemonTest : public testing::Test {
33 public:
SetUpTestCase(void)34     static void SetUpTestCase(void) {}
TearDownTestCase(void)35     static void TearDownTestCase(void) {}
SetUp()36     void SetUp() {}
TearDown()37     void TearDown() {}
38 };
39 } // namespace HiviewDFX
40 } // namespace OHOS
41 
42 namespace {
43 /**
44  * @tc.name: FaultLoggerDaemonTest001
45  * @tc.desc: test HandleDefaultClientRequest/HandleLogFileDesClientRequest func
46  * @tc.type: FUNC
47  */
48 HWTEST_F (FaultLoggerDaemonTest, FaultLoggerDaemonTest001, TestSize.Level2)
49 {
50     GTEST_LOG_(INFO) << "FaultLoggerDaemonTest001: start.";
51     std::shared_ptr<FaultLoggerDaemon> daemon = std::make_shared<FaultLoggerDaemon>();
52     bool ret = daemon->InitEnvironment();
53     ASSERT_TRUE(ret);
54     struct FaultLoggerdRequest faultloggerdRequest;
55     if (memset_s(&faultloggerdRequest, sizeof(faultloggerdRequest), 0, sizeof(struct FaultLoggerdRequest)) != 0) {
56         GTEST_LOG_(ERROR) << "memset_s failed" ;
57         ASSERT_TRUE(false);
58     }
59     faultloggerdRequest.type = 0;
60     faultloggerdRequest.pid = getpid();
61     faultloggerdRequest.tid = gettid();
62     faultloggerdRequest.uid = getuid();
63     daemon->HandleDefaultClientRequest(-1, &faultloggerdRequest);
64     faultloggerdRequest.type = 2; // 2 : CPP_CRASH
65     daemon->HandleDefaultClientRequest(-1, &faultloggerdRequest);
66     daemon->HandleLogFileDesClientRequest(-1, &faultloggerdRequest);
67     faultloggerdRequest.type = 101; // 101 : CPP_STACKTRACE
68     daemon->HandleDefaultClientRequest(-1, &faultloggerdRequest);
69     faultloggerdRequest.type = 102; // 102 : JS_STACKTRACE
70     daemon->HandleDefaultClientRequest(-1, &faultloggerdRequest);
71     faultloggerdRequest.type = 103; // 103 : JS_HEAP_SNAPSHOT
72     daemon->HandleDefaultClientRequest(-1, &faultloggerdRequest);
73     GTEST_LOG_(INFO) << "FaultLoggerDaemonTest001: end.";
74 }
75 
76 /**
77  * @tc.name: FaultLoggerDaemonTest002
78  * @tc.desc: test HandleSdkDumpRequest/HandlePipeFdClientRequest func
79  * @tc.type: FUNC
80  */
81 HWTEST_F (FaultLoggerDaemonTest, FaultLoggerDaemonTest002, TestSize.Level2)
82 {
83     GTEST_LOG_(INFO) << "FaultLoggerDaemonTest002: start.";
84     std::shared_ptr<FaultLoggerDaemon> daemon = std::make_shared<FaultLoggerDaemon>();
85     bool ret = daemon->InitEnvironment();
86     ASSERT_TRUE(ret);
87     struct FaultLoggerdRequest faultloggerdRequest;
88     if (memset_s(&faultloggerdRequest, sizeof(faultloggerdRequest), 0, sizeof(struct FaultLoggerdRequest)) != 0) {
89         GTEST_LOG_(ERROR) << "memset_s failed" ;
90         ASSERT_TRUE(false);
91     }
92     faultloggerdRequest.type = 2; // 2 : CPP_CRASH
93     faultloggerdRequest.pid = getpid();
94     faultloggerdRequest.tid = gettid();
95     faultloggerdRequest.uid = getuid();
96     daemon->HandleSdkDumpRequest(-1, &faultloggerdRequest);
97     faultloggerdRequest.pipeType = FaultLoggerPipeType::PIPE_FD_READ_BUF;
98     daemon->HandlePipeFdClientRequest(-1, &faultloggerdRequest);
99     faultloggerdRequest.pipeType = FaultLoggerPipeType::PIPE_FD_WRITE_BUF;
100     daemon->HandlePipeFdClientRequest(-1, &faultloggerdRequest);
101     faultloggerdRequest.pipeType = FaultLoggerPipeType::PIPE_FD_READ_RES;
102     daemon->HandlePipeFdClientRequest(-1, &faultloggerdRequest);
103     faultloggerdRequest.pipeType = FaultLoggerPipeType::PIPE_FD_WRITE_RES;
104     daemon->HandlePipeFdClientRequest(-1, &faultloggerdRequest);
105     faultloggerdRequest.pipeType = FaultLoggerPipeType::PIPE_FD_DELETE;
106     daemon->HandlePipeFdClientRequest(-1, &faultloggerdRequest);
107     GTEST_LOG_(INFO) << "FaultLoggerDaemonTest002: end.";
108 }
109 
110 /**
111  * @tc.name: FaultLoggerDaemonTest003
112  * @tc.desc: test HandleSdkDumpRequest func
113  * @tc.type: FUNC
114  */
115 HWTEST_F (FaultLoggerDaemonTest, FaultLoggerDaemonTest003, TestSize.Level2)
116 {
117     GTEST_LOG_(INFO) << "FaultLoggerDaemonTest003: start.";
118     std::shared_ptr<FaultLoggerDaemon> daemon = std::make_shared<FaultLoggerDaemon>();
119     bool ret = daemon->InitEnvironment();
120     ASSERT_TRUE(ret);
121     struct FaultLoggerdRequest faultloggerdRequest;
122     if (memset_s(&faultloggerdRequest, sizeof(faultloggerdRequest), 0, sizeof(struct FaultLoggerdRequest)) != 0) {
123         GTEST_LOG_(ERROR) << "memset_s failed" ;
124         ASSERT_TRUE(false);
125     }
126     faultloggerdRequest.type = 2; // 2 : CPP_CRASH
127     faultloggerdRequest.pid = getpid();
128     faultloggerdRequest.tid = gettid();
129     faultloggerdRequest.uid = getuid();
130     daemon->HandleSdkDumpRequest(-1, &faultloggerdRequest);
131     faultloggerdRequest.tid = 0;
132     daemon->HandleSdkDumpRequest(-1, &faultloggerdRequest);
133     GTEST_LOG_(INFO) << "FaultLoggerDaemonTest003: end.";
134 }
135 
136 /**
137  * @tc.name: FaultLoggerDaemonTest004
138  * @tc.desc: test CreateFileForRequest func
139  * @tc.type: FUNC
140  */
141 HWTEST_F (FaultLoggerDaemonTest, FaultLoggerDaemonTest004, TestSize.Level2)
142 {
143     GTEST_LOG_(INFO) << "FaultLoggerDaemonTest004: start.";
144     std::shared_ptr<FaultLoggerDaemon> daemon = std::make_shared<FaultLoggerDaemon>();
145     int32_t type = (int32_t)FaultLoggerType::CPP_CRASH;
146     int32_t pid = getpid();
147     uint64_t time = GetTimeMilliSeconds();
148     int fd = daemon->CreateFileForRequest(type, pid, 0, time, false);
149     ASSERT_NE(fd, -1);
150     close(fd);
151     GTEST_LOG_(INFO) << "FaultLoggerDaemonTest004: end.";
152 }
153 }