@@ -150,7 +150,8 @@ std::shared_ptr<opentelemetry::trace::Tracer> initTracer(
150150 Sampler *sampler,
151151 IdGenerator *id_generator = new RandomIdGenerator,
152152 const ScopeConfigurator<TracerConfig> &tracer_configurator =
153- TracerConfig::DefaultConfigurator ())
153+ TracerConfig::DefaultConfigurator (),
154+ std::unique_ptr<InstrumentationScope> scope = InstrumentationScope::Create(" " ))
154155{
155156 auto processor = std::unique_ptr<SpanProcessor>(new SimpleSpanProcessor (std::move (exporter)));
156157 std::vector<std::unique_ptr<SpanProcessor>> processors;
@@ -160,7 +161,7 @@ std::shared_ptr<opentelemetry::trace::Tracer> initTracer(
160161 std::move (processors), resource, std::unique_ptr<Sampler>(sampler),
161162 std::unique_ptr<IdGenerator>(id_generator),
162163 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) ));
164165}
165166
166167} // namespace
@@ -536,6 +537,39 @@ TEST(Tracer, StartSpanWithEnabledConfig)
536537#endif
537538}
538539
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+
539573TEST (Tracer, SpanSetLinks)
540574{
541575 InMemorySpanExporter *exporter = new InMemorySpanExporter ();
0 commit comments