99
1010namespace launchdarkly ::server_side::integrations::otel {
1111
12- // Basic smoke test
12+ // Basic construction tests
1313TEST (TracingHookTest, ConstructsWithDefaultOptions) {
1414 TracingHook hook;
1515 EXPECT_EQ (hook.Metadata ().Name (), " LaunchDarkly OpenTelemetry Tracing Hook" );
@@ -26,6 +26,7 @@ TEST(TracingHookTest, ConstructsWithCustomOptions) {
2626 EXPECT_EQ (hook.Metadata ().Name (), " LaunchDarkly OpenTelemetry Tracing Hook" );
2727}
2828
29+ // Options builder tests
2930TEST (TracingHookOptionsBuilderTest, BuildsDefaultOptions) {
3031 auto options = TracingHookOptionsBuilder ().Build ();
3132
@@ -67,10 +68,79 @@ TEST(TracingHookOptionsBuilderTest, ChainsMethods) {
6768 EXPECT_EQ (options.EnvironmentId ().value (), " staging" );
6869}
6970
70- // TODO: Add integration tests with mock OpenTelemetry components
71- // TODO: Add tests for BeforeEvaluation and AfterEvaluation
72- // TODO: Add tests for span event creation
73- // TODO: Add tests for span creation when enabled
74- // TODO: Add tests for HookContext span injection
71+ TEST (TracingHookOptionsBuilderTest, IncludeValueDefaultsFalse) {
72+ auto options = TracingHookOptionsBuilder ()
73+ .CreateSpans (true )
74+ .Build ();
75+
76+ EXPECT_FALSE (options.IncludeValue ());
77+ EXPECT_TRUE (options.CreateSpans ());
78+ }
79+
80+ TEST (TracingHookOptionsBuilderTest, CreateSpansDefaultsFalse) {
81+ auto options = TracingHookOptionsBuilder ()
82+ .IncludeValue (true )
83+ .Build ();
84+
85+ EXPECT_TRUE (options.IncludeValue ());
86+ EXPECT_FALSE (options.CreateSpans ());
87+ }
88+
89+ TEST (TracingHookOptionsBuilderTest, CanSetMultipleOptions) {
90+ auto options = TracingHookOptionsBuilder ()
91+ .IncludeValue (true )
92+ .CreateSpans (true )
93+ .EnvironmentId (" dev" )
94+ .Build ();
95+
96+ EXPECT_TRUE (options.IncludeValue ());
97+ EXPECT_TRUE (options.CreateSpans ());
98+ ASSERT_TRUE (options.EnvironmentId ().has_value ());
99+ EXPECT_EQ (options.EnvironmentId ().value (), " dev" );
100+ }
101+
102+ TEST (TracingHookOptionsBuilderTest, EnvironmentIdIsOptional) {
103+ auto options1 = TracingHookOptionsBuilder ()
104+ .IncludeValue (true )
105+ .Build ();
106+ EXPECT_FALSE (options1.EnvironmentId ().has_value ());
107+
108+ auto options2 = TracingHookOptionsBuilder ()
109+ .CreateSpans (true )
110+ .Build ();
111+ EXPECT_FALSE (options2.EnvironmentId ().has_value ());
112+ }
113+
114+ TEST (TracingHookOptionsBuilderTest, BuilderIsReusable) {
115+ auto builder = TracingHookOptionsBuilder ()
116+ .IncludeValue (true )
117+ .CreateSpans (true );
118+
119+ auto options1 = builder.Build ();
120+ auto options2 = builder.EnvironmentId (" test" ).Build ();
121+
122+ EXPECT_TRUE (options1.IncludeValue ());
123+ EXPECT_TRUE (options2.IncludeValue ());
124+ EXPECT_FALSE (options1.EnvironmentId ().has_value ());
125+ EXPECT_TRUE (options2.EnvironmentId ().has_value ());
126+ }
127+
128+ // Metadata tests
129+ TEST (TracingHookTest, MetadataNameIsCorrect) {
130+ TracingHook hook;
131+ EXPECT_EQ (hook.Metadata ().Name (), " LaunchDarkly OpenTelemetry Tracing Hook" );
132+ }
133+
134+ TEST (TracingHookTest, MetadataIsConsistent) {
135+ auto options = TracingHookOptionsBuilder ()
136+ .IncludeValue (true )
137+ .CreateSpans (true )
138+ .EnvironmentId (" production" )
139+ .Build ();
140+ TracingHook hook (options);
141+
142+ // Metadata should be the same regardless of options
143+ EXPECT_EQ (hook.Metadata ().Name (), " LaunchDarkly OpenTelemetry Tracing Hook" );
144+ }
75145
76146} // namespace launchdarkly::server_side::integrations::otel
0 commit comments