From acc30b2b35347aa256530966c1625856745c2ff9 Mon Sep 17 00:00:00 2001 From: Matthew Wear Date: Fri, 2 Oct 2020 16:47:34 -0700 Subject: [PATCH] feat: add OpenTelemetry.tracer convenience method --- api/lib/opentelemetry.rb | 10 +++++----- api/test/opentelemetry_test.rb | 27 ++++++++++++++++++++------ sdk/test/integration/api_trace_test.rb | 6 ------ 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/api/lib/opentelemetry.rb b/api/lib/opentelemetry.rb index 2bf23fc339..f43b984198 100644 --- a/api/lib/opentelemetry.rb +++ b/api/lib/opentelemetry.rb @@ -35,11 +35,11 @@ def tracer_provider @tracer_provider ||= Trace::TracerProvider.new end - # @return [Trace::Tracer] returns a default tracer instance from the - # registered tracer provider. If the tracer provider is operational, this - # will be a named tracer with the name 'default'. - def default_tracer - tracer_provider.tracer('default') + # @return [Trace::Tracer] delegates to the registered tracer provider and + # returns a tracer with the given name and version. If called without without + # arguments, it returns a tracer named 'default'. + def tracer(name = 'default', version = nil) + tracer_provider.tracer(name, version) end # @return [Object, Metrics::MeterProvider] registered meter provider or a diff --git a/api/test/opentelemetry_test.rb b/api/test/opentelemetry_test.rb index 4dbb434178..602b8ac2ec 100644 --- a/api/test/opentelemetry_test.rb +++ b/api/test/opentelemetry_test.rb @@ -30,19 +30,34 @@ end end - describe '.default_tracer' do + describe '.tracer' do + let(:mock_provider) { MiniTest::Mock.new } + + before do + OpenTelemetry.tracer_provider = mock_provider + end + after do # Ensure we don't leak custom tracer factories and tracers to other tests OpenTelemetry.tracer_provider = nil end - it 'returns instance of Trace::Tracer' do - default_tracer = OpenTelemetry.default_tracer - _(default_tracer).must_be_instance_of(OpenTelemetry::Trace::Tracer) + it 'delegates to tracer provider with default name' do + mock_provider.expect(:tracer, Object.new, ['default', nil]) + _ = OpenTelemetry.tracer + mock_provider.verify end - it 'returns the same instance when accessed multiple times' do - _(OpenTelemetry.default_tracer).must_equal(OpenTelemetry.default_tracer) + it 'delegates to tracer provider with provided name' do + mock_provider.expect(:tracer, Object.new, ['foo', nil]) + _ = OpenTelemetry.tracer('foo') + mock_provider.verify + end + + it 'delegates to tracer provider with provided name and version' do + mock_provider.expect(:tracer, Object.new, ['foo', '0.4.0']) + _ = OpenTelemetry.tracer('foo', '0.4.0') + mock_provider.verify end end diff --git a/sdk/test/integration/api_trace_test.rb b/sdk/test/integration/api_trace_test.rb index c2e92016c5..c98d86878d 100644 --- a/sdk/test/integration/api_trace_test.rb +++ b/sdk/test/integration/api_trace_test.rb @@ -106,10 +106,4 @@ _(@child_span_with_links.to_span_data.links.size).must_equal number_of_links end end - - describe 'default tracer' do - it 'returns tracer named default' do - _(OpenTelemetry.default_tracer.name).must_equal('default') - end - end end