Skip to content

Commit abf182f

Browse files
Merge pull request #158 from mikebosland/custom-time-provider
Allow a custom time provider in TracerProviderBase
2 parents f00bb98 + 45551db commit abf182f

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

lib/src/sdk/trace/tracer_provider.dart

+6-2
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,18 @@ class TracerProviderBase implements api.TracerProvider {
2727
@protected
2828
final sdk.SpanLimits spanLimits;
2929

30+
final sdk.TimeProvider _timeProvider;
31+
3032
TracerProviderBase(
3133
{this.processors =
3234
const [], // Default to a TracerProvider which does not emit traces.
3335
resource,
36+
sdk.TimeProvider? timeProvider,
3437
this.sampler = const sdk.ParentBasedSampler(sdk.AlwaysOnSampler()),
3538
this.idGenerator = const sdk.IdGenerator(),
3639
this.spanLimits = const sdk.SpanLimits()})
37-
: resource = resource ?? sdk.Resource([]);
40+
: resource = resource ?? sdk.Resource([]),
41+
_timeProvider = timeProvider ?? sdk.DateTimeTimeProvider();
3842

3943
List<sdk.SpanProcessor> get spanProcessors => processors;
4044

@@ -50,7 +54,7 @@ class TracerProviderBase implements api.TracerProvider {
5054
processors,
5155
resource,
5256
sampler,
53-
sdk.DateTimeTimeProvider(),
57+
_timeProvider,
5458
idGenerator,
5559
sdk.InstrumentationScope(name, version, schemaUrl, attributes),
5660
spanLimits));

test/unit/sdk/trace_provider_test.dart

+18
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
// Licensed under the Apache License, Version 2.0. Please see https://github.com/Workiva/opentelemetry-dart/blob/master/LICENSE for more information
33

44
@TestOn('vm')
5+
import 'package:fixnum/src/int64.dart';
56
import 'package:mockito/mockito.dart';
7+
import 'package:opentelemetry/src/sdk/time_providers/time_provider.dart';
8+
import 'package:opentelemetry/src/sdk/trace/read_only_span.dart';
69
import 'package:opentelemetry/src/sdk/trace/span_processors/span_processor.dart';
710
import 'package:opentelemetry/src/sdk/trace/tracer_provider.dart';
811
import 'package:test/test.dart';
@@ -36,6 +39,13 @@ void main() {
3639
expect(provider.spanProcessors, [mockProcessor1, mockProcessor2]);
3740
});
3841

42+
test('traceProvider custom timeProvider', () {
43+
final mockTimeProvider = FakeTimeProvider(now: Int64(123));
44+
final provider = TracerProviderBase(timeProvider: mockTimeProvider);
45+
final span = provider.getTracer('foo').startSpan('bar') as ReadOnlySpan;
46+
expect(span.startTime, Int64(123));
47+
});
48+
3949
test('tracerProvider force flushes all processors', () {
4050
final mockProcessor1 = MockSpanProcessor();
4151
final mockProcessor2 = MockSpanProcessor();
@@ -55,3 +65,11 @@ void main() {
5565
verify(mockProcessor2.shutdown()).called(1);
5666
});
5767
}
68+
69+
class FakeTimeProvider extends Mock implements TimeProvider {
70+
FakeTimeProvider({required Int64 now}) : _now = now;
71+
final Int64 _now;
72+
73+
@override
74+
Int64 get now => _now;
75+
}

0 commit comments

Comments
 (0)