blob: cf82d652f4452e8c444bee406a33d108efae5226 [file] [log] [blame]
Ryan Keaneefab2ed2019-07-22 12:36:53 -07001// Copyright 2019 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -08005#include "util/trace_logging.h"
6
Ryan Keaneefab2ed2019-07-22 12:36:53 -07007#include <chrono>
Ryan Keaneefab2ed2019-07-22 12:36:53 -07008#include <thread>
9
10#include "absl/types/optional.h"
11#include "gmock/gmock.h"
12#include "gtest/gtest.h"
Ryan Keane38e7d512019-08-02 15:37:49 -070013#include "platform/test/trace_logging_helpers.h"
Ryan Keaned5b3c342019-07-25 09:48:45 -070014
Ryan Keaneefab2ed2019-07-22 12:36:53 -070015namespace openscreen {
Ryan Keane38e7d512019-08-02 15:37:49 -070016namespace {
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080017
18#if defined(ENABLE_TRACE_LOGGING)
Ryan Keane38e7d512019-08-02 15:37:49 -070019constexpr TraceHierarchyParts kAllParts = static_cast<TraceHierarchyParts>(
20 TraceHierarchyParts::kRoot | TraceHierarchyParts::kParent |
21 TraceHierarchyParts::kCurrent);
22constexpr TraceHierarchyParts kParentAndRoot = static_cast<TraceHierarchyParts>(
23 TraceHierarchyParts::kRoot | TraceHierarchyParts::kParent);
24constexpr TraceId kEmptyId = TraceId{0};
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080025#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -070026
27using ::testing::_;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080028using ::testing::AtLeast;
Jordan Bayles824067c2019-07-23 12:12:17 -070029using ::testing::DoAll;
Ryan Keaneefab2ed2019-07-22 12:36:53 -070030using ::testing::Invoke;
31
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080032// All the unit tests below should use TestTraceLoggingPlatform for the
33// library's tracing output mock. This is a StrictMock to ensure that, when not
34// compiling with ENABLE_TRACE_LOGGING, the mock receives no method calls.
35using StrictMockLoggingPlatform = ::testing::StrictMock<MockLoggingPlatform>;
36
Jordan Bayles4a33b7b2020-12-16 15:04:54 -080037TEST(TraceLoggingTest, MacroCallScopedDoesNotSegFault) {
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080038 StrictMockLoggingPlatform platform;
39#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -080040 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080041 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -070042 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _)).Times(1);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080043#endif
Jordan Bayles11438672020-02-03 11:21:18 -080044 { TRACE_SCOPED(TraceCategory::Value::kAny, "test"); }
Ryan Keaneefab2ed2019-07-22 12:36:53 -070045}
46
Jordan Bayles4a33b7b2020-12-16 15:04:54 -080047TEST(TraceLoggingTest, MacroCallDefaultScopedDoesNotSegFault) {
Jordan Bayles63f9a3d2020-02-04 13:31:17 -080048 StrictMockLoggingPlatform platform;
49#if defined(ENABLE_TRACE_LOGGING)
50 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
51 .Times(AtLeast(1));
52 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _)).Times(1);
53#endif
54 { TRACE_DEFAULT_SCOPED(TraceCategory::Value::kAny); }
55}
56
Jordan Bayles4a33b7b2020-12-16 15:04:54 -080057TEST(TraceLoggingTest, MacroCallUnscopedDoesNotSegFault) {
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080058 StrictMockLoggingPlatform platform;
59#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -080060 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080061 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -070062 EXPECT_CALL(platform, LogAsyncStart(_, _, _, _, _)).Times(1);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080063#endif
Jordan Bayles11438672020-02-03 11:21:18 -080064 { TRACE_ASYNC_START(TraceCategory::Value::kAny, "test"); }
Ryan Keaneefab2ed2019-07-22 12:36:53 -070065}
66
67TEST(TraceLoggingTest, MacroVariablesUniquelyNames) {
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080068 StrictMockLoggingPlatform platform;
69#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -080070 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080071 .Times(AtLeast(1));
Jordan Bayles63f9a3d2020-02-04 13:31:17 -080072 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _)).Times(3);
Ryan Keane38e7d512019-08-02 15:37:49 -070073 EXPECT_CALL(platform, LogAsyncStart(_, _, _, _, _)).Times(2);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080074#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -070075
76 {
Jordan Bayles11438672020-02-03 11:21:18 -080077 TRACE_SCOPED(TraceCategory::Value::kAny, "test1");
78 TRACE_SCOPED(TraceCategory::Value::kAny, "test2");
79 TRACE_ASYNC_START(TraceCategory::Value::kAny, "test3");
80 TRACE_ASYNC_START(TraceCategory::Value::kAny, "test4");
Jordan Bayles63f9a3d2020-02-04 13:31:17 -080081 TRACE_DEFAULT_SCOPED(TraceCategory::Value::kAny);
Ryan Keaneefab2ed2019-07-22 12:36:53 -070082 }
83}
84
85TEST(TraceLoggingTest, ExpectTimestampsReflectDelay) {
86 constexpr uint32_t delay_in_ms = 50;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080087 StrictMockLoggingPlatform platform;
88#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -080089 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080090 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -070091 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _))
Ryan Keaneefab2ed2019-07-22 12:36:53 -070092 .WillOnce(DoAll(Invoke(ValidateTraceTimestampDiff<delay_in_ms>),
93 Invoke(ValidateTraceErrorCode<Error::Code::kNone>)));
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -080094#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -070095
96 {
Jordan Bayles11438672020-02-03 11:21:18 -080097 TRACE_SCOPED(TraceCategory::Value::kAny, "Name");
Ryan Keaneefab2ed2019-07-22 12:36:53 -070098 std::this_thread::sleep_for(std::chrono::milliseconds(delay_in_ms));
99 }
100}
101
102TEST(TraceLoggingTest, ExpectErrorsPassedToResult) {
103 constexpr Error::Code result_code = Error::Code::kParseError;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800104 StrictMockLoggingPlatform platform;
105#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800106 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800107 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -0700108 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _))
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700109 .WillOnce(Invoke(ValidateTraceErrorCode<result_code>));
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800110#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700111
112 {
Jordan Bayles11438672020-02-03 11:21:18 -0800113 TRACE_SCOPED(TraceCategory::Value::kAny, "Name");
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700114 TRACE_SET_RESULT(result_code);
115 }
116}
117
118TEST(TraceLoggingTest, ExpectUnsetTraceIdNotSet) {
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800119 StrictMockLoggingPlatform platform;
120#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800121 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800122 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -0700123 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _)).Times(1);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800124#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700125
126 TraceIdHierarchy h = {kUnsetTraceId, kUnsetTraceId, kUnsetTraceId};
127 {
Jordan Bayles11438672020-02-03 11:21:18 -0800128 TRACE_SCOPED(TraceCategory::Value::kAny, "Name", h);
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700129
130 auto ids = TRACE_HIERARCHY;
131 EXPECT_NE(ids.current, kUnsetTraceId);
132 EXPECT_NE(ids.parent, kUnsetTraceId);
133 EXPECT_NE(ids.root, kUnsetTraceId);
134 }
135}
136
137TEST(TraceLoggingTest, ExpectCreationWithIdsToWork) {
138 constexpr TraceId current = 0x32;
139 constexpr TraceId parent = 0x47;
140 constexpr TraceId root = 0x84;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800141 StrictMockLoggingPlatform platform;
142#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800143 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800144 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -0700145 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _))
146 .WillOnce(
147 DoAll(Invoke(ValidateTraceErrorCode<Error::Code::kNone>),
148 Invoke(ValidateTraceIdHierarchyOnSyncTrace<current, parent,
149 root, kAllParts>)));
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800150#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700151
152 {
153 TraceIdHierarchy h = {current, parent, root};
Jordan Bayles11438672020-02-03 11:21:18 -0800154 TRACE_SCOPED(TraceCategory::Value::kAny, "Name", h);
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700155
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800156#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700157 auto ids = TRACE_HIERARCHY;
158 EXPECT_EQ(ids.current, current);
159 EXPECT_EQ(ids.parent, parent);
160 EXPECT_EQ(ids.root, root);
161
162 EXPECT_EQ(TRACE_CURRENT_ID, current);
163 EXPECT_EQ(TRACE_ROOT_ID, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800164#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700165 }
166}
167
168TEST(TraceLoggingTest, ExpectHirearchyToBeApplied) {
169 constexpr TraceId current = 0x32;
170 constexpr TraceId parent = 0x47;
171 constexpr TraceId root = 0x84;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800172 StrictMockLoggingPlatform platform;
173#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800174 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800175 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -0700176 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _))
177 .WillOnce(DoAll(
178 Invoke(ValidateTraceErrorCode<Error::Code::kNone>),
179 Invoke(ValidateTraceIdHierarchyOnSyncTrace<kEmptyId, current, root,
180 kParentAndRoot>)))
181 .WillOnce(
182 DoAll(Invoke(ValidateTraceErrorCode<Error::Code::kNone>),
183 Invoke(ValidateTraceIdHierarchyOnSyncTrace<current, parent,
184 root, kAllParts>)));
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800185#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700186
187 {
188 TraceIdHierarchy h = {current, parent, root};
Jordan Bayles11438672020-02-03 11:21:18 -0800189 TRACE_SCOPED(TraceCategory::Value::kAny, "Name", h);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800190#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700191 auto ids = TRACE_HIERARCHY;
192 EXPECT_EQ(ids.current, current);
193 EXPECT_EQ(ids.parent, parent);
194 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800195#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700196
Jordan Bayles11438672020-02-03 11:21:18 -0800197 TRACE_SCOPED(TraceCategory::Value::kAny, "Name");
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800198#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700199 ids = TRACE_HIERARCHY;
200 EXPECT_NE(ids.current, current);
201 EXPECT_EQ(ids.parent, current);
202 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800203#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700204 }
205}
206
207TEST(TraceLoggingTest, ExpectHirearchyToEndAfterScopeWhenSetWithSetter) {
208 constexpr TraceId current = 0x32;
209 constexpr TraceId parent = 0x47;
210 constexpr TraceId root = 0x84;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800211 StrictMockLoggingPlatform platform;
212#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800213 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800214 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -0700215 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _))
216 .WillOnce(DoAll(
217 Invoke(ValidateTraceErrorCode<Error::Code::kNone>),
218 Invoke(ValidateTraceIdHierarchyOnSyncTrace<kEmptyId, current, root,
219 kParentAndRoot>)));
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800220#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700221
222 {
223 TraceIdHierarchy ids = {current, parent, root};
224 TRACE_SET_HIERARCHY(ids);
225 {
Jordan Bayles11438672020-02-03 11:21:18 -0800226 TRACE_SCOPED(TraceCategory::Value::kAny, "Name");
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700227 ids = TRACE_HIERARCHY;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800228#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700229 EXPECT_NE(ids.current, current);
230 EXPECT_EQ(ids.parent, current);
231 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800232#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700233 }
234
235 ids = TRACE_HIERARCHY;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800236#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700237 EXPECT_EQ(ids.current, current);
238 EXPECT_EQ(ids.parent, parent);
239 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800240#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700241 }
242}
243
Jordan Bayles63f9a3d2020-02-04 13:31:17 -0800244TEST(TraceLoggingTest, ExpectHierarchyToEndAfterScope) {
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700245 constexpr TraceId current = 0x32;
246 constexpr TraceId parent = 0x47;
247 constexpr TraceId root = 0x84;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800248 StrictMockLoggingPlatform platform;
249#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800250 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800251 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -0700252 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _))
253 .WillOnce(DoAll(
254 Invoke(ValidateTraceErrorCode<Error::Code::kNone>),
255 Invoke(ValidateTraceIdHierarchyOnSyncTrace<kEmptyId, current, root,
256 kParentAndRoot>)))
257 .WillOnce(
258 DoAll(Invoke(ValidateTraceErrorCode<Error::Code::kNone>),
259 Invoke(ValidateTraceIdHierarchyOnSyncTrace<current, parent,
260 root, kAllParts>)));
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800261#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700262
263 {
264 TraceIdHierarchy ids = {current, parent, root};
Jordan Bayles11438672020-02-03 11:21:18 -0800265 TRACE_SCOPED(TraceCategory::Value::kAny, "Name", ids);
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700266 {
Jordan Bayles11438672020-02-03 11:21:18 -0800267 TRACE_SCOPED(TraceCategory::Value::kAny, "Name");
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700268 ids = TRACE_HIERARCHY;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800269#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700270 EXPECT_NE(ids.current, current);
271 EXPECT_EQ(ids.parent, current);
272 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800273#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700274 }
275
276 ids = TRACE_HIERARCHY;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800277#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700278 EXPECT_EQ(ids.current, current);
279 EXPECT_EQ(ids.parent, parent);
280 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800281#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700282 }
283}
284
285TEST(TraceLoggingTest, ExpectSetHierarchyToApply) {
286 constexpr TraceId current = 0x32;
287 constexpr TraceId parent = 0x47;
288 constexpr TraceId root = 0x84;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800289 StrictMockLoggingPlatform platform;
290#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800291 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800292 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -0700293 EXPECT_CALL(platform, LogTrace(_, _, _, _, _, _, _))
294 .WillOnce(DoAll(
295 Invoke(ValidateTraceErrorCode<Error::Code::kNone>),
296 Invoke(ValidateTraceIdHierarchyOnSyncTrace<kEmptyId, current, root,
297 kParentAndRoot>)));
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800298#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700299
300 {
301 TraceIdHierarchy ids = {current, parent, root};
302 TRACE_SET_HIERARCHY(ids);
303 ids = TRACE_HIERARCHY;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800304#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700305 EXPECT_EQ(ids.current, current);
306 EXPECT_EQ(ids.parent, parent);
307 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800308#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700309
Jordan Bayles11438672020-02-03 11:21:18 -0800310 TRACE_SCOPED(TraceCategory::Value::kAny, "Name");
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700311 ids = TRACE_HIERARCHY;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800312#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700313 EXPECT_NE(ids.current, current);
314 EXPECT_EQ(ids.parent, current);
315 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800316#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700317 }
318}
319
320TEST(TraceLoggingTest, CheckTraceAsyncStartLogsCorrectly) {
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800321 StrictMockLoggingPlatform platform;
322#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800323 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800324 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -0700325 EXPECT_CALL(platform, LogAsyncStart(_, _, _, _, _)).Times(1);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800326#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700327
Jordan Bayles11438672020-02-03 11:21:18 -0800328 { TRACE_ASYNC_START(TraceCategory::Value::kAny, "Name"); }
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700329}
330
331TEST(TraceLoggingTest, CheckTraceAsyncStartSetsHierarchy) {
332 constexpr TraceId current = 32;
333 constexpr TraceId parent = 47;
334 constexpr TraceId root = 84;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800335 StrictMockLoggingPlatform platform;
336#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800337 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800338 .Times(AtLeast(1));
Ryan Keane38e7d512019-08-02 15:37:49 -0700339 EXPECT_CALL(platform, LogAsyncStart(_, _, _, _, _))
340 .WillOnce(
341 Invoke(ValidateTraceIdHierarchyOnAsyncTrace<kEmptyId, current, root,
342 kParentAndRoot>));
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800343#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700344
345 {
346 TraceIdHierarchy ids = {current, parent, root};
347 TRACE_SET_HIERARCHY(ids);
348 {
Jordan Bayles11438672020-02-03 11:21:18 -0800349 TRACE_ASYNC_START(TraceCategory::Value::kAny, "Name");
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700350 ids = TRACE_HIERARCHY;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800351#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700352 EXPECT_NE(ids.current, current);
353 EXPECT_EQ(ids.parent, current);
354 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800355#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700356 }
357
358 ids = TRACE_HIERARCHY;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800359#if defined(ENABLE_TRACE_LOGGING)
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700360 EXPECT_EQ(ids.current, current);
361 EXPECT_EQ(ids.parent, parent);
362 EXPECT_EQ(ids.root, root);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800363#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700364 }
365}
366
367TEST(TraceLoggingTest, CheckTraceAsyncEndLogsCorrectly) {
368 constexpr TraceId id = 12345;
369 constexpr Error::Code result = Error::Code::kAgain;
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800370 StrictMockLoggingPlatform platform;
371#if defined(ENABLE_TRACE_LOGGING)
Jordan Bayles11438672020-02-03 11:21:18 -0800372 EXPECT_CALL(platform, IsTraceLoggingEnabled(TraceCategory::Value::kAny))
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800373 .Times(AtLeast(1));
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700374 EXPECT_CALL(platform, LogAsyncEnd(_, _, _, id, result)).Times(1);
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800375#endif
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700376
Jordan Bayles11438672020-02-03 11:21:18 -0800377 TRACE_ASYNC_END(TraceCategory::Value::kAny, id, result);
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700378}
379
Yuri Wiitala8e6db3b2019-11-20 11:20:54 -0800380} // namespace
Ryan Keaneefab2ed2019-07-22 12:36:53 -0700381} // namespace openscreen