• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2024 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/trace_event/trace_logging_minimal_win.h"
6 
7 #include <gtest/gtest.h>
8 
9 #include "base/functional/callback_helpers.h"
10 
11 // Test fixture for TlmProvider
12 class TlmProviderTest : public ::testing::Test {
13  protected:
14   TlmProviderTest() = default;
15 
MockOSEventRegister()16   void MockOSEventRegister() {
17     TlmProvider::StaticEnableCallback(nullptr, 1, 1, 0, 0, nullptr, &provider_);
18   }
19 
20   TlmProvider provider_;
21 };
22 
23 // Test default constructor
TEST_F(TlmProviderTest,DefaultConstructor)24 TEST_F(TlmProviderTest, DefaultConstructor) {
25   TlmProvider default_provider;
26   EXPECT_FALSE(default_provider.IsEnabled());
27 }
28 
29 // Test parameterized constructor
TEST_F(TlmProviderTest,ParameterizedConstructor)30 TEST_F(TlmProviderTest, ParameterizedConstructor) {
31   EXPECT_FALSE(provider_.IsEnabled());
32 }
33 
34 // Test Register method
TEST_F(TlmProviderTest,Register)35 TEST_F(TlmProviderTest, Register) {
36   ULONG result = provider_.Register("TestProvider", GUID(), base::DoNothing());
37   EXPECT_EQ(result, 0UL);
38 }
39 
40 // Test Unregister method
TEST_F(TlmProviderTest,Unregister)41 TEST_F(TlmProviderTest, Unregister) {
42   provider_.Register("TestProvider", GUID(), base::DoNothing());
43   provider_.Unregister();
44   EXPECT_FALSE(provider_.IsEnabled());
45 }
46 
47 // Test IsEnabled method
TEST_F(TlmProviderTest,IsEnabled)48 TEST_F(TlmProviderTest, IsEnabled) {
49   provider_.Register("TestProvider", GUID(), base::DoNothing());
50   EXPECT_FALSE(provider_.IsEnabled());
51   MockOSEventRegister();
52   EXPECT_TRUE(provider_.IsEnabled());
53 }
54 
55 // Test WriteEvent method
TEST_F(TlmProviderTest,WriteEvent)56 TEST_F(TlmProviderTest, WriteEvent) {
57   provider_.Register("TestProvider", GUID(), base::DoNothing());
58   MockOSEventRegister();
59 
60   EXPECT_TRUE(provider_.IsEnabled());
61   EVENT_DESCRIPTOR event_descriptor = {};
62   ULONG result = provider_.WriteEvent("TestEvent", event_descriptor);
63   EXPECT_EQ(result, 0UL);
64 }
65 
66 // Test WriteEvent with TlmMbcsStringField
TEST_F(TlmProviderTest,WriteEventWithMbcsStringField)67 TEST_F(TlmProviderTest, WriteEventWithMbcsStringField) {
68   provider_.Register("TestProvider", GUID(), base::DoNothing());
69   MockOSEventRegister();
70 
71   EXPECT_TRUE(provider_.IsEnabled());
72   EVENT_DESCRIPTOR event_descriptor = {};
73   TlmMbcsStringField field("TestField", "TestValue");
74   ULONG result = provider_.WriteEvent("TestEvent", event_descriptor, field);
75   EXPECT_EQ(result, 0UL);
76 }
77 
78 // Test WriteEvent with TlmUtf8StringField
TEST_F(TlmProviderTest,WriteEventWithUtf8StringField)79 TEST_F(TlmProviderTest, WriteEventWithUtf8StringField) {
80   provider_.Register("TestProvider", GUID(), base::DoNothing());
81   MockOSEventRegister();
82 
83   EXPECT_TRUE(provider_.IsEnabled());
84   EVENT_DESCRIPTOR event_descriptor = {};
85   TlmUtf8StringField field("TestField", "TestValue");
86   ULONG result = provider_.WriteEvent("TestEvent", event_descriptor, field);
87   EXPECT_EQ(result, 0UL);
88 }
89 
90 // Test WriteEvent with TlmInt64Field
TEST_F(TlmProviderTest,WriteEventWithInt64Field)91 TEST_F(TlmProviderTest, WriteEventWithInt64Field) {
92   provider_.Register("TestProvider", GUID(), base::DoNothing());
93   MockOSEventRegister();
94 
95   EXPECT_TRUE(provider_.IsEnabled());
96   EVENT_DESCRIPTOR event_descriptor = {};
97   TlmInt64Field field("TestField", 1234567890);
98   ULONG result = provider_.WriteEvent("TestEvent", event_descriptor, field);
99   EXPECT_EQ(result, 0UL);
100 }
101 
102 // Test WriteEvent with TlmUInt64Field
TEST_F(TlmProviderTest,WriteEventWithUInt64Field)103 TEST_F(TlmProviderTest, WriteEventWithUInt64Field) {
104   provider_.Register("TestProvider", GUID(), base::DoNothing());
105   MockOSEventRegister();
106 
107   EXPECT_TRUE(provider_.IsEnabled());
108   EVENT_DESCRIPTOR event_descriptor = {};
109   TlmUInt64Field field("TestField", 1234567890);
110   ULONG result = provider_.WriteEvent("TestEvent", event_descriptor, field);
111   EXPECT_EQ(result, 0UL);
112 }
113 
114 // Test fixture for TlmInt64Field
115 class TlmStringView final : public TlmFieldBase {
116  public:
TlmStringView(std::string_view name)117   TlmStringView(std::string_view name) : TlmFieldBase(name) {}
118 };
119 
120 class TlmChar final : public TlmFieldBase {
121  public:
TlmChar(const char * name)122   TlmChar(const char* name) : TlmFieldBase(name) {}
123 };
124 
125 class TlmFieldBaseTest : public ::testing::Test {};
126 
127 // Test the constructor and Value() method
TEST_F(TlmFieldBaseTest,CharConstructorAndValue)128 TEST_F(TlmFieldBaseTest, CharConstructorAndValue) {
129   char name[] = {'T', 'e', 's', 't', 'F', 'i', 'e', 'l', 'd', 0};
130   unsigned long len = strlen(name);
131   TlmChar field(name);
132 
133   // Mock doing stuff in the mem around the null terminated string
134   name[9] = 0xAB;
135 
136   // We should be able to use the string view to initialize
137   // Name().data(), this shouldn't cause an error.
138   TlmStringView field2(field.Name());
139 
140   EXPECT_EQ(field.Name().data(), name);
141   EXPECT_EQ(field.Name().size(), len);
142 
143   EXPECT_EQ(field2.Name().data(), name);
144   EXPECT_EQ(field2.Name().size(), len);
145 }
146