1 /* 2 * Copyright (C) 2025 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 "trace.h" 19 20 using namespace testing::ext; 21 22 namespace OHOS { 23 namespace HiviewDFX { 24 namespace HitraceTest { 25 class HitraceChainNDKTest : public testing::Test { 26 public: SetUpTestCase(void)27 static void SetUpTestCase(void) {} TearDownTestCase(void)28 static void TearDownTestCase(void) {} 29 SetUp()30 void SetUp() 31 { 32 OH_HiTrace_ClearId(); 33 } TearDown()34 void TearDown() {} 35 }; 36 37 /** 38 * @tc.name: HitraceChainNDKTest001 39 * @tc.desc: test normal chain begin and end 40 * @tc.type: FUNC 41 */ 42 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest001, TestSize.Level1) 43 { 44 GTEST_LOG_(INFO) << "HitraceChainNDKTest001: start."; 45 46 HiTraceId hiTraceId = OH_HiTrace_BeginChain("HitraceChainNDKTest001", HITRACE_FLAG_DEFAULT); 47 ASSERT_TRUE(OH_HiTrace_IsIdValid(&hiTraceId)); 48 OH_HiTrace_EndChain(); 49 hiTraceId = OH_HiTrace_GetId(); 50 ASSERT_FALSE(OH_HiTrace_IsIdValid(&hiTraceId)); 51 52 GTEST_LOG_(INFO) << "HitraceChainNDKTest001: end."; 53 } 54 55 /** 56 * @tc.name: HitraceChainNDKTest002 57 * @tc.desc: test the hitrace flag enabled 58 * @tc.type: FUNC 59 */ 60 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest002, TestSize.Level1) 61 { 62 GTEST_LOG_(INFO) << "HitraceChainNDKTest002: start."; 63 64 int flag = HITRACE_FLAG_INCLUDE_ASYNC | HITRACE_FLAG_NO_BE_INFO; 65 HiTraceId hiTraceId = OH_HiTrace_BeginChain("HitraceChainNDKTest002", flag); 66 ASSERT_TRUE(OH_HiTrace_IsFlagEnabled(&hiTraceId, HITRACE_FLAG_INCLUDE_ASYNC)); 67 ASSERT_TRUE(OH_HiTrace_IsFlagEnabled(&hiTraceId, HITRACE_FLAG_NO_BE_INFO)); 68 ASSERT_FALSE(OH_HiTrace_IsFlagEnabled(&hiTraceId, HITRACE_FLAG_DONOT_CREATE_SPAN)); 69 70 OH_HiTrace_EnableFlag(&hiTraceId, HITRACE_FLAG_DONOT_CREATE_SPAN); 71 ASSERT_TRUE(OH_HiTrace_IsFlagEnabled(&hiTraceId, HITRACE_FLAG_INCLUDE_ASYNC)); 72 ASSERT_TRUE(OH_HiTrace_IsFlagEnabled(&hiTraceId, HITRACE_FLAG_NO_BE_INFO)); 73 ASSERT_TRUE(OH_HiTrace_IsFlagEnabled(&hiTraceId, HITRACE_FLAG_DONOT_CREATE_SPAN)); 74 OH_HiTrace_EndChain(); 75 76 GTEST_LOG_(INFO) << "HitraceChainNDKTest002: end."; 77 } 78 79 /** 80 * @tc.name: HitraceChainNDKTest003 81 * @tc.desc: Test the HiTraceId initialization 82 * @tc.type: FUNC 83 */ 84 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest003, TestSize.Level1) 85 { 86 GTEST_LOG_(INFO) << "HitraceChainNDKTest003: start."; 87 88 HiTraceId hiTraceId = OH_HiTrace_BeginChain("HitraceChainNDKTest001", HITRACE_FLAG_DEFAULT); 89 ASSERT_TRUE(OH_HiTrace_IsIdValid(&hiTraceId)); 90 OH_HiTrace_InitId(&hiTraceId); 91 ASSERT_FALSE(OH_HiTrace_IsIdValid(&hiTraceId)); 92 OH_HiTrace_EndChain(); 93 94 GTEST_LOG_(INFO) << "HitraceChainNDKTest003: end."; 95 } 96 97 /** 98 * @tc.name: HitraceChainNDKTest004 99 * @tc.desc: test the creation of the span ID 100 * @tc.type: FUNC 101 */ 102 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest004, TestSize.Level1) 103 { 104 GTEST_LOG_(INFO) << "HitraceChainNDKTest004: start."; 105 106 HiTraceId hiTraceId1 = OH_HiTrace_BeginChain("HitraceChainNDKTest004", HITRACE_FLAG_DEFAULT); 107 ASSERT_EQ(OH_HiTrace_GetSpanId(&hiTraceId1), 0); 108 ASSERT_EQ(OH_HiTrace_GetParentSpanId(&hiTraceId1), 0); 109 110 HiTraceId hiTraceId2 = OH_HiTrace_CreateSpan(); 111 OH_HiTrace_SetId(&hiTraceId2); 112 ASSERT_NE(OH_HiTrace_GetSpanId(&hiTraceId2), 0); 113 ASSERT_EQ(OH_HiTrace_GetParentSpanId(&hiTraceId2), 0); 114 115 HiTraceId hiTraceId3 = OH_HiTrace_CreateSpan(); 116 OH_HiTrace_SetId(&hiTraceId3); 117 ASSERT_NE(OH_HiTrace_GetSpanId(&hiTraceId3), OH_HiTrace_GetSpanId(&hiTraceId2)); 118 ASSERT_EQ(OH_HiTrace_GetParentSpanId(&hiTraceId3), OH_HiTrace_GetSpanId(&hiTraceId2)); 119 OH_HiTrace_EndChain(); 120 121 GTEST_LOG_(INFO) << "HitraceChainNDKTest004: end."; 122 } 123 124 /** 125 * @tc.name: HitraceChainNDKTest005 126 * @tc.desc: test setting the trace flag 127 * @tc.type: FUNC 128 */ 129 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest005, TestSize.Level1) 130 { 131 GTEST_LOG_(INFO) << "HitraceChainNDKTest005: start."; 132 133 int flag = HITRACE_FLAG_TP_INFO | HITRACE_FLAG_DONOT_ENABLE_LOG; 134 HiTraceId hiTraceId = OH_HiTrace_BeginChain("HitraceChainNDKTest005", flag); 135 ASSERT_EQ(OH_HiTrace_GetFlags(&hiTraceId), flag); 136 137 flag = HITRACE_FLAG_FAULT_TRIGGER | HITRACE_FLAG_D2D_TP_INFO; 138 OH_HiTrace_SetFlags(&hiTraceId, flag); 139 ASSERT_EQ(OH_HiTrace_GetFlags(&hiTraceId), flag); 140 OH_HiTrace_EndChain(); 141 142 GTEST_LOG_(INFO) << "HitraceChainNDKTest005: end."; 143 } 144 145 /** 146 * @tc.name: HitraceChainNDKTest006 147 * @tc.desc: test the custom chain ID 148 * @tc.type: FUNC 149 */ 150 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest006, TestSize.Level1) 151 { 152 GTEST_LOG_(INFO) << "HitraceChainNDKTest006: start."; 153 154 HiTraceId hiTraceId = OH_HiTrace_BeginChain("HitraceChainNDKTest006", HITRACE_FLAG_DEFAULT); 155 OH_HiTrace_SetChainId(&hiTraceId, 6); 156 ASSERT_EQ(OH_HiTrace_GetChainId(&hiTraceId), 6); 157 OH_HiTrace_EndChain(); 158 159 GTEST_LOG_(INFO) << "HitraceChainNDKTest006: end."; 160 } 161 162 /** 163 * @tc.name: HitraceChainNDKTest007 164 * @tc.desc: test the custom span ID 165 * @tc.type: FUNC 166 */ 167 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest007, TestSize.Level1) 168 { 169 GTEST_LOG_(INFO) << "HitraceChainNDKTest007: start."; 170 171 HiTraceId hiTraceId = OH_HiTrace_BeginChain("HitraceChainNDKTest007", HITRACE_FLAG_DEFAULT); 172 OH_HiTrace_SetSpanId(&hiTraceId, 7); 173 ASSERT_EQ(OH_HiTrace_GetSpanId(&hiTraceId), 7); 174 OH_HiTrace_EndChain(); 175 176 GTEST_LOG_(INFO) << "HitraceChainNDKTest007: end."; 177 } 178 179 /** 180 * @tc.name: HitraceChainNDKTest008 181 * @tc.desc: test the custom parent span ID 182 * @tc.type: FUNC 183 */ 184 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest008, TestSize.Level1) 185 { 186 GTEST_LOG_(INFO) << "HitraceChainNDKTest008: start."; 187 188 HiTraceId hiTraceId = OH_HiTrace_BeginChain("HitraceChainNDKTest008", HITRACE_FLAG_DEFAULT); 189 OH_HiTrace_SetParentSpanId(&hiTraceId, 8); 190 ASSERT_EQ(OH_HiTrace_GetParentSpanId(&hiTraceId), 8); 191 OH_HiTrace_EndChain(); 192 193 GTEST_LOG_(INFO) << "HitraceChainNDKTest008: end."; 194 } 195 196 /** 197 * @tc.name: HitraceChainNDKTest009 198 * @tc.desc: test the conversion between HiTraceId and bytes 199 * @tc.type: FUNC 200 */ 201 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest009, TestSize.Level1) 202 { 203 GTEST_LOG_(INFO) << "HitraceChainNDKTest009: start."; 204 205 HiTraceId hiTraceId = OH_HiTrace_BeginChain("HitraceChainNDKTest009", HITRACE_FLAG_DEFAULT); 206 ASSERT_TRUE(OH_HiTrace_IsIdValid(&hiTraceId)); 207 uint8_t byteArray[sizeof(HiTraceId)]; 208 int len = OH_HiTrace_IdToBytes(&hiTraceId, byteArray, sizeof(byteArray)); 209 210 HiTraceId hiTraceIdFromBytes; 211 OH_HiTrace_InitId(&hiTraceIdFromBytes); 212 ASSERT_FALSE(OH_HiTrace_IsIdValid(&hiTraceIdFromBytes)); 213 OH_HiTrace_IdFromBytes(&hiTraceIdFromBytes, byteArray, len); 214 ASSERT_TRUE(OH_HiTrace_IsIdValid(&hiTraceIdFromBytes)); 215 ASSERT_EQ(OH_HiTrace_GetChainId(&hiTraceIdFromBytes), OH_HiTrace_GetChainId(&hiTraceId)); 216 OH_HiTrace_EndChain(); 217 218 GTEST_LOG_(INFO) << "HitraceChainNDKTest009: end."; 219 } 220 221 /** 222 * @tc.name: HitraceChainNDKTest010 223 * @tc.desc: test the OH_HiTrace_Tracepoint interface in different tracepoint types 224 * @tc.type: FUNC 225 */ 226 HWTEST_F(HitraceChainNDKTest, HitraceChainNDKTest010, TestSize.Level1) 227 { 228 GTEST_LOG_(INFO) << "HitraceChainNDKTest010: start."; 229 230 HiTraceId hiTraceId = OH_HiTrace_BeginChain("HitraceChainNDKTest010", HITRACE_FLAG_DEFAULT); 231 ASSERT_TRUE(OH_HiTrace_IsIdValid(&hiTraceId)); 232 OH_HiTrace_Tracepoint(HITRACE_CM_DEFAULT, HITRACE_TP_CS, &hiTraceId, "HitraceChainNDKTest010-%d", 10); 233 OH_HiTrace_Tracepoint(HITRACE_CM_DEFAULT, HITRACE_TP_SR, &hiTraceId, "HitraceChainNDKTest010-%d", 10); 234 OH_HiTrace_Tracepoint(HITRACE_CM_DEFAULT, HITRACE_TP_SS, &hiTraceId, "HitraceChainNDKTest010-%d", 10); 235 OH_HiTrace_Tracepoint(HITRACE_CM_DEFAULT, HITRACE_TP_CR, &hiTraceId, "HitraceChainNDKTest010-%d", 10); 236 OH_HiTrace_EndChain(); 237 238 GTEST_LOG_(INFO) << "HitraceChainNDKTest010: end."; 239 } 240 } 241 } 242 }