Skip to content

Commit 30d677e

Browse files
committed
wip: unit test ConsoleLogRecordExporter
1 parent 80aaafa commit 30d677e

File tree

2 files changed

+62
-1
lines changed

2 files changed

+62
-1
lines changed

test/unit/mocks.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright 2021-2022 Workiva.
22
// Licensed under the Apache License, Version 2.0. Please see https://github.com/Workiva/opentelemetry-dart/blob/master/LICENSE for more information
33

4+
import 'dart:async';
5+
46
import 'package:fixnum/fixnum.dart';
57
import 'package:http/http.dart' as http;
68
import 'package:mocktail/mocktail.dart';
@@ -29,4 +31,13 @@ class FakeTimeProvider extends Mock implements TimeProvider {
2931

3032
@override
3133
Int64 get now => _now;
32-
}
34+
}
35+
36+
// reference: https://stackoverflow.com/a/38709440/7676003
37+
void Function() overridePrint(void Function() testFn, Function(String msg) onPrint) => () {
38+
final spec = ZoneSpecification(print: (_, __, ___, msg) {
39+
// Add to log instead of printing to stdout
40+
onPrint(msg);
41+
});
42+
return Zone.current.fork(specification: spec).run<void>(testFn);
43+
};
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright 2021-2022 Workiva.
2+
// Licensed under the Apache License, Version 2.0. Please see https://github.com/Workiva/opentelemetry-dart/blob/master/LICENSE for more information
3+
4+
@TestOn('vm')
5+
import 'package:fixnum/fixnum.dart';
6+
import 'package:opentelemetry/api.dart' as api;
7+
import 'package:opentelemetry/sdk.dart' as sdk;
8+
import 'package:opentelemetry/src/experimental_sdk.dart' as sdk;
9+
import 'package:opentelemetry/src/sdk/logs/log_record_limit.dart';
10+
import 'package:test/test.dart';
11+
12+
import '../../../mocks.dart';
13+
14+
void main() {
15+
List<String> log = <String>[];
16+
17+
tearDown(() {
18+
log = <String>[];
19+
});
20+
21+
test(
22+
'Test exporter',
23+
overridePrint(
24+
() async {
25+
final exporter = sdk.ConsoleLogRecordExporter();
26+
final tracer = sdk.TracerProviderBase().getTracer('test');
27+
final parent = tracer.startSpan('parent');
28+
final context = api.contextWithSpan(api.Context.current, parent);
29+
final logRecord = sdk.LogRecord(
30+
instrumentationScope: sdk.InstrumentationScope('library_name', 'library_version', 'url://schema', []),
31+
context: context,
32+
logRecordLimits: LogRecordLimitsImpl(),
33+
timeProvider: FakeTimeProvider(now: Int64(123)),
34+
resource: sdk.Resource([api.Attribute.fromString('resource.name', 'test')]),
35+
)
36+
..makeReadonly()
37+
..body = 'Log Message';
38+
final spanContext = parent.spanContext;
39+
40+
await exporter.export([logRecord]);
41+
42+
expect(log, [
43+
'{resource: {attributes: {resource.name: test}}, instrumentationScope: {name: library_name, version: library_version, schemaUrl: url://schema, attributes: {}}, timestamp: 123, severityText: null, severityNumber: null, body: null, attributes: {}, traceId: ${spanContext.traceId}, spanId: ${spanContext.spanId}, traceFlags: ${spanContext.traceFlags}}'
44+
]);
45+
46+
await exporter.shutdown();
47+
},
48+
log.add,
49+
));
50+
}

0 commit comments

Comments
 (0)