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 }