// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/trace_event/trace_logging_minimal_win.h" #include #include "base/functional/callback_helpers.h" // Test fixture for TlmProvider class TlmProviderTest : public ::testing::Test { protected: TlmProviderTest() = default; void MockOSEventRegister() { TlmProvider::StaticEnableCallback(nullptr, 1, 1, 0, 0, nullptr, &provider_); } TlmProvider provider_; }; // Test default constructor TEST_F(TlmProviderTest, DefaultConstructor) { TlmProvider default_provider; EXPECT_FALSE(default_provider.IsEnabled()); } // Test parameterized constructor TEST_F(TlmProviderTest, ParameterizedConstructor) { EXPECT_FALSE(provider_.IsEnabled()); } // Test Register method TEST_F(TlmProviderTest, Register) { ULONG result = provider_.Register("TestProvider", GUID(), base::DoNothing()); EXPECT_EQ(result, 0UL); } // Test Unregister method TEST_F(TlmProviderTest, Unregister) { provider_.Register("TestProvider", GUID(), base::DoNothing()); provider_.Unregister(); EXPECT_FALSE(provider_.IsEnabled()); } // Test IsEnabled method TEST_F(TlmProviderTest, IsEnabled) { provider_.Register("TestProvider", GUID(), base::DoNothing()); EXPECT_FALSE(provider_.IsEnabled()); MockOSEventRegister(); EXPECT_TRUE(provider_.IsEnabled()); } // Test WriteEvent method TEST_F(TlmProviderTest, WriteEvent) { provider_.Register("TestProvider", GUID(), base::DoNothing()); MockOSEventRegister(); EXPECT_TRUE(provider_.IsEnabled()); EVENT_DESCRIPTOR event_descriptor = {}; ULONG result = provider_.WriteEvent("TestEvent", event_descriptor); EXPECT_EQ(result, 0UL); } // Test WriteEvent with TlmMbcsStringField TEST_F(TlmProviderTest, WriteEventWithMbcsStringField) { provider_.Register("TestProvider", GUID(), base::DoNothing()); MockOSEventRegister(); EXPECT_TRUE(provider_.IsEnabled()); EVENT_DESCRIPTOR event_descriptor = {}; TlmMbcsStringField field("TestField", "TestValue"); ULONG result = provider_.WriteEvent("TestEvent", event_descriptor, field); EXPECT_EQ(result, 0UL); } // Test WriteEvent with TlmUtf8StringField TEST_F(TlmProviderTest, WriteEventWithUtf8StringField) { provider_.Register("TestProvider", GUID(), base::DoNothing()); MockOSEventRegister(); EXPECT_TRUE(provider_.IsEnabled()); EVENT_DESCRIPTOR event_descriptor = {}; TlmUtf8StringField field("TestField", "TestValue"); ULONG result = provider_.WriteEvent("TestEvent", event_descriptor, field); EXPECT_EQ(result, 0UL); } // Test WriteEvent with TlmInt64Field TEST_F(TlmProviderTest, WriteEventWithInt64Field) { provider_.Register("TestProvider", GUID(), base::DoNothing()); MockOSEventRegister(); EXPECT_TRUE(provider_.IsEnabled()); EVENT_DESCRIPTOR event_descriptor = {}; TlmInt64Field field("TestField", 1234567890); ULONG result = provider_.WriteEvent("TestEvent", event_descriptor, field); EXPECT_EQ(result, 0UL); } // Test WriteEvent with TlmUInt64Field TEST_F(TlmProviderTest, WriteEventWithUInt64Field) { provider_.Register("TestProvider", GUID(), base::DoNothing()); MockOSEventRegister(); EXPECT_TRUE(provider_.IsEnabled()); EVENT_DESCRIPTOR event_descriptor = {}; TlmUInt64Field field("TestField", 1234567890); ULONG result = provider_.WriteEvent("TestEvent", event_descriptor, field); EXPECT_EQ(result, 0UL); } // Test fixture for TlmInt64Field class TlmStringView final : public TlmFieldBase { public: TlmStringView(std::string_view name) : TlmFieldBase(name) {} }; class TlmChar final : public TlmFieldBase { public: TlmChar(const char* name) : TlmFieldBase(name) {} }; class TlmFieldBaseTest : public ::testing::Test {}; // Test the constructor and Value() method TEST_F(TlmFieldBaseTest, CharConstructorAndValue) { char name[] = {'T', 'e', 's', 't', 'F', 'i', 'e', 'l', 'd', 0}; unsigned long len = strlen(name); TlmChar field(name); // Mock doing stuff in the mem around the null terminated string name[9] = 0xAB; // We should be able to use the string view to initialize // Name().data(), this shouldn't cause an error. TlmStringView field2(field.Name()); EXPECT_EQ(field.Name().data(), name); EXPECT_EQ(field.Name().size(), len); EXPECT_EQ(field2.Name().data(), name); EXPECT_EQ(field2.Name().size(), len); }