5
5
-include_lib (" stdlib/include/assert.hrl" ).
6
6
-include_lib (" common_test/include/ct.hrl" ).
7
7
8
+ -include (" otel_span.hrl" ).
8
9
-include_lib (" opentelemetry_api/include/opentelemetry.hrl" ).
9
10
10
11
all () ->
11
- [exporting_timeout_test ].
12
+ [exporting_timeout_test ,
13
+ check_table_size_test ].
12
14
13
15
% % verifies that after the runner has to be killed for taking too long
14
16
% % that everything is still functional and the exporter does not crash
15
17
exporting_timeout_test (_Config ) ->
16
18
process_flag (trap_exit , true ),
17
19
18
- {ok , Pid , _ } = otel_batch_processor :start_link (#{reg_name => test_processor ,
20
+ {ok , Pid , _ } = otel_batch_processor :start_link (#{name => test_processor ,
19
21
resource => otel_resource :create ([]),
20
22
exporter => ? MODULE ,
21
23
exporting_timeout_ms => 1 ,
@@ -30,6 +32,34 @@ exporting_timeout_test(_Config) ->
30
32
ok
31
33
end .
32
34
35
+ check_table_size_test (_Config ) ->
36
+ MaxQueueSize = 10 ,
37
+ CheckTableSizeMs = 1 ,
38
+ {ok , _Pid , #{reg_name := RegName }} = otel_batch_processor :start_link (
39
+ #{name => test_processor_check_size_test ,
40
+ resource => otel_resource :create ([]),
41
+ exporter => ? MODULE ,
42
+ exporting_timeout_ms => timer :minutes (10 ),
43
+ % % long enough, so that it never happens during the test
44
+ scheduled_delay_ms => timer :minutes (10 ),
45
+ check_table_size_ms => CheckTableSizeMs ,
46
+ max_queue_size => MaxQueueSize }
47
+ ),
48
+ % % max_queue_size limit is not reached
49
+ true = otel_batch_processor :on_end (generate_span (), #{reg_name => RegName }),
50
+ lists :foreach (fun (_ ) ->
51
+ otel_batch_processor :on_end (generate_span (), #{reg_name => RegName })
52
+ end ,
53
+ lists :seq (1 , MaxQueueSize )),
54
+ % % Wait for more than CheckTablesizeMS to be sure check timeout occurred
55
+ timer :sleep (CheckTableSizeMs * 5 ),
56
+ dropped = otel_batch_processor :on_end (generate_span (), #{reg_name => RegName }),
57
+
58
+ otel_batch_processor :force_flush (#{reg_name => RegName }),
59
+ % % force_flush is async, have to wait for some long enough time again,
60
+ timer :sleep (CheckTableSizeMs * 10 ),
61
+ true = otel_batch_processor :on_end (generate_span (), #{reg_name => RegName }).
62
+
33
63
% % exporter behaviour
34
64
35
65
init (_ ) ->
@@ -40,3 +70,13 @@ export(_, _) ->
40
70
41
71
shutdown (_ ) ->
42
72
ok .
73
+
74
+ % % helpers
75
+
76
+ generate_span () ->
77
+ # span {trace_id = otel_id_generator :generate_trace_id (),
78
+ span_id = otel_id_generator :generate_span_id (),
79
+ name = " test_span" ,
80
+ trace_flags = 1 ,
81
+ is_recording = true ,
82
+ instrumentation_scope = # instrumentation_scope {name = " test" }}.
0 commit comments