@@ -150,7 +150,8 @@ std::shared_ptr<opentelemetry::trace::Tracer> initTracer(
150
150
Sampler *sampler,
151
151
IdGenerator *id_generator = new RandomIdGenerator,
152
152
const ScopeConfigurator<TracerConfig> &tracer_configurator =
153
- TracerConfig::DefaultConfigurator ())
153
+ TracerConfig::DefaultConfigurator (),
154
+ std::unique_ptr<InstrumentationScope> scope = InstrumentationScope::Create(" " ))
154
155
{
155
156
auto processor = std::unique_ptr<SpanProcessor>(new SimpleSpanProcessor (std::move (exporter)));
156
157
std::vector<std::unique_ptr<SpanProcessor>> processors;
@@ -160,7 +161,7 @@ std::shared_ptr<opentelemetry::trace::Tracer> initTracer(
160
161
std::move (processors), resource, std::unique_ptr<Sampler>(sampler),
161
162
std::unique_ptr<IdGenerator>(id_generator),
162
163
std::make_unique<ScopeConfigurator<TracerConfig>>(tracer_configurator));
163
- return std::shared_ptr<opentelemetry::trace::Tracer>(new Tracer (context));
164
+ return std::shared_ptr<opentelemetry::trace::Tracer>(new Tracer (context, std::move (scope) ));
164
165
}
165
166
166
167
} // namespace
@@ -536,6 +537,39 @@ TEST(Tracer, StartSpanWithEnabledConfig)
536
537
#endif
537
538
}
538
539
540
+ TEST (Tracer, StartSpanWithCustomConfig)
541
+ {
542
+ #ifdef OPENTELEMETRY_RTTI_ENABLED
543
+ InMemorySpanExporter *exporter = new InMemorySpanExporter ();
544
+ std::shared_ptr<InMemorySpanData> span_data = exporter->GetData ();
545
+ ScopeConfigurator<TracerConfig> custom_configurator = [](const InstrumentationScope &scope) {
546
+ if (scope.GetName () == " " || scope.GetName () == " foo_library" )
547
+ {
548
+ return TracerConfig::Disabled ();
549
+ }
550
+ return TracerConfig::Enabled ();
551
+ };
552
+ auto tracer_default_scope =
553
+ initTracer (std::unique_ptr<SpanExporter>{exporter}, new AlwaysOnSampler (),
554
+ new RandomIdGenerator (), custom_configurator);
555
+ auto span_default_scope = tracer_default_scope->StartSpan (" span 1" );
556
+ auto &span_default_scope_ref = *span_default_scope.get ();
557
+ EXPECT_NE (typeid (span_default_scope), typeid (trace_api::Span));
558
+ EXPECT_EQ (typeid (span_default_scope), typeid (trace_api::NoopSpan));
559
+
560
+ auto foo_scope = InstrumentationScope::Create (" foo_library" );
561
+ auto tracer_foo_scope =
562
+ initTracer (std::unique_ptr<SpanExporter>{exporter}, new AlwaysOnSampler (),
563
+ new RandomIdGenerator (), custom_configurator, std::move (foo_scope));
564
+ auto span_foo_scope = tracer_foo_scope->StartSpan (" span 1" );
565
+ auto &span_foo_scope_ref = *span_foo_scope.get ();
566
+ EXPECT_NE (typeid (span_foo_scope), typeid (trace_api::Span));
567
+ EXPECT_EQ (typeid (span_foo_scope), typeid (trace_api::NoopSpan));
568
+ #else
569
+ GTEST_SKIP () << " cannot use 'typeid' with '-fno-rtti'" ;
570
+ #endif
571
+ }
572
+
539
573
TEST (Tracer, SpanSetLinks)
540
574
{
541
575
InMemorySpanExporter *exporter = new InMemorySpanExporter ();
0 commit comments