datadog-ci 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -2
  3. data/lib/datadog/ci/configuration/components.rb +13 -9
  4. data/lib/datadog/ci/configuration/extensions.rb +21 -0
  5. data/lib/datadog/ci/contrib/cucumber/configuration/settings.rb +1 -1
  6. data/lib/datadog/ci/contrib/cucumber/ext.rb +7 -5
  7. data/lib/datadog/ci/contrib/cucumber/formatter.rb +99 -19
  8. data/lib/datadog/ci/contrib/minitest/configuration/settings.rb +1 -1
  9. data/lib/datadog/ci/contrib/minitest/ext.rb +6 -4
  10. data/lib/datadog/ci/contrib/minitest/helpers.rb +22 -0
  11. data/lib/datadog/ci/contrib/minitest/hooks.rb +45 -17
  12. data/lib/datadog/ci/contrib/minitest/patcher.rb +7 -0
  13. data/lib/datadog/ci/contrib/minitest/plugin.rb +73 -0
  14. data/lib/datadog/ci/contrib/minitest/runnable.rb +42 -0
  15. data/lib/datadog/ci/contrib/rspec/configuration/settings.rb +1 -1
  16. data/lib/datadog/ci/contrib/rspec/example.rb +2 -2
  17. data/lib/datadog/ci/contrib/rspec/example_group.rb +46 -0
  18. data/lib/datadog/ci/contrib/rspec/ext.rb +5 -4
  19. data/lib/datadog/ci/contrib/rspec/integration.rb +1 -1
  20. data/lib/datadog/ci/contrib/rspec/patcher.rb +5 -0
  21. data/lib/datadog/ci/contrib/rspec/runner.rb +57 -0
  22. data/lib/datadog/ci/contrib/settings.rb +1 -1
  23. data/lib/datadog/ci/ext/test.rb +2 -0
  24. data/lib/datadog/ci/span.rb +24 -0
  25. data/lib/datadog/ci/test.rb +30 -0
  26. data/lib/datadog/ci/test_session.rb +8 -0
  27. data/lib/datadog/ci/test_visibility/context/global.rb +82 -0
  28. data/lib/datadog/ci/test_visibility/context/local.rb +52 -0
  29. data/lib/datadog/ci/test_visibility/null_recorder.rb +73 -0
  30. data/lib/datadog/ci/test_visibility/recorder.rb +314 -0
  31. data/lib/datadog/ci/version.rb +1 -1
  32. data/lib/datadog/ci.rb +3 -3
  33. data/sig/datadog/ci/configuration/components.rbs +2 -2
  34. data/sig/datadog/ci/configuration/extensions.rbs +9 -0
  35. data/sig/datadog/ci/contrib/cucumber/ext.rbs +1 -5
  36. data/sig/datadog/ci/contrib/cucumber/formatter.rbs +17 -4
  37. data/sig/datadog/ci/contrib/minitest/ext.rbs +1 -5
  38. data/sig/datadog/ci/contrib/minitest/helpers.rbs +13 -0
  39. data/sig/datadog/ci/contrib/minitest/hooks.rbs +9 -1
  40. data/sig/datadog/ci/contrib/minitest/plugin.rbs +31 -0
  41. data/sig/datadog/ci/contrib/minitest/runnable.rbs +24 -0
  42. data/sig/datadog/ci/contrib/rspec/example_group.rbs +21 -0
  43. data/sig/datadog/ci/contrib/rspec/ext.rbs +2 -8
  44. data/sig/datadog/ci/contrib/rspec/runner.rbs +21 -0
  45. data/sig/datadog/ci/ext/test.rbs +2 -0
  46. data/sig/datadog/ci/span.rbs +8 -0
  47. data/sig/datadog/ci/test.rbs +5 -0
  48. data/sig/datadog/ci/test_visibility/context/global.rbs +39 -0
  49. data/sig/datadog/ci/test_visibility/context/local.rbs +23 -0
  50. data/sig/datadog/ci/test_visibility/null_recorder.rbs +45 -0
  51. data/sig/datadog/ci/test_visibility/recorder.rbs +85 -0
  52. data/sig/datadog/ci.rbs +3 -1
  53. metadata +23 -11
  54. data/lib/datadog/ci/context/global.rb +0 -80
  55. data/lib/datadog/ci/context/local.rb +0 -50
  56. data/lib/datadog/ci/extensions.rb +0 -19
  57. data/lib/datadog/ci/recorder.rb +0 -291
  58. data/sig/datadog/ci/context/global.rbs +0 -37
  59. data/sig/datadog/ci/context/local.rbs +0 -21
  60. data/sig/datadog/ci/extensions.rbs +0 -7
  61. data/sig/datadog/ci/recorder.rbs +0 -83
@@ -0,0 +1,314 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "datadog/tracing"
4
+ require "datadog/tracing/trace_digest"
5
+
6
+ require "rbconfig"
7
+
8
+ require_relative "context/global"
9
+ require_relative "context/local"
10
+
11
+ require_relative "../ext/app_types"
12
+ require_relative "../ext/test"
13
+ require_relative "../ext/environment"
14
+
15
+ require_relative "../span"
16
+ require_relative "../null_span"
17
+ require_relative "../test"
18
+ require_relative "../test_session"
19
+ require_relative "../test_module"
20
+ require_relative "../test_suite"
21
+
22
+ module Datadog
23
+ module CI
24
+ module TestVisibility
25
+ # Common behavior for CI tests
26
+ # Note: this class has too many responsibilities and should be split into multiple classes
27
+ class Recorder
28
+ attr_reader :environment_tags, :test_suite_level_visibility_enabled
29
+
30
+ def initialize(test_suite_level_visibility_enabled: false)
31
+ @test_suite_level_visibility_enabled = test_suite_level_visibility_enabled
32
+
33
+ @environment_tags = Ext::Environment.tags(ENV).freeze
34
+ @local_context = Context::Local.new
35
+ @global_context = Context::Global.new
36
+ end
37
+
38
+ def start_test_session(service: nil, tags: {})
39
+ return skip_tracing unless test_suite_level_visibility_enabled
40
+
41
+ @global_context.fetch_or_activate_test_session do
42
+ tracer_span = start_datadog_tracer_span(
43
+ "test.session", build_span_options(service, Ext::AppTypes::TYPE_TEST_SESSION)
44
+ )
45
+ set_session_context(tags, tracer_span)
46
+
47
+ build_test_session(tracer_span, tags)
48
+ end
49
+ end
50
+
51
+ def start_test_module(test_module_name, service: nil, tags: {})
52
+ return skip_tracing unless test_suite_level_visibility_enabled
53
+
54
+ @global_context.fetch_or_activate_test_module do
55
+ set_inherited_globals(tags)
56
+ set_session_context(tags)
57
+
58
+ tracer_span = start_datadog_tracer_span(
59
+ test_module_name, build_span_options(service, Ext::AppTypes::TYPE_TEST_MODULE)
60
+ )
61
+ set_module_context(tags, tracer_span)
62
+
63
+ build_test_module(tracer_span, tags)
64
+ end
65
+ end
66
+
67
+ def start_test_suite(test_suite_name, service: nil, tags: {})
68
+ return skip_tracing unless test_suite_level_visibility_enabled
69
+
70
+ @global_context.fetch_or_activate_test_suite(test_suite_name) do
71
+ set_inherited_globals(tags)
72
+ set_session_context(tags)
73
+ set_module_context(tags)
74
+
75
+ tracer_span = start_datadog_tracer_span(
76
+ test_suite_name, build_span_options(service, Ext::AppTypes::TYPE_TEST_SUITE)
77
+ )
78
+ set_suite_context(tags, span: tracer_span)
79
+
80
+ build_test_suite(tracer_span, tags)
81
+ end
82
+ end
83
+
84
+ def trace_test(test_name, test_suite_name, service: nil, tags: {}, &block)
85
+ set_inherited_globals(tags)
86
+ set_session_context(tags)
87
+ set_module_context(tags)
88
+ set_suite_context(tags, name: test_suite_name)
89
+
90
+ tags[Ext::Test::TAG_NAME] = test_name
91
+
92
+ span_options = build_span_options(
93
+ service,
94
+ Ext::AppTypes::TYPE_TEST,
95
+ # :resource is needed for the agent APM protocol to work correctly (for older agent versions)
96
+ # :continue_from is required to start a new trace for each test
97
+ {resource: test_name, continue_from: Datadog::Tracing::TraceDigest.new}
98
+ )
99
+
100
+ if block
101
+ start_datadog_tracer_span(test_name, span_options) do |tracer_span|
102
+ test = build_test(tracer_span, tags)
103
+
104
+ @local_context.activate_test!(test) do
105
+ block.call(test)
106
+ end
107
+ end
108
+ else
109
+ tracer_span = start_datadog_tracer_span(test_name, span_options)
110
+
111
+ test = build_test(tracer_span, tags)
112
+ @local_context.activate_test!(test)
113
+ test
114
+ end
115
+ end
116
+
117
+ def trace(span_type, span_name, tags: {}, &block)
118
+ span_options = build_span_options(
119
+ nil, # service name is completely optional for custom spans
120
+ span_type,
121
+ {resource: span_name}
122
+ )
123
+
124
+ if block
125
+ start_datadog_tracer_span(span_name, span_options) do |tracer_span|
126
+ block.call(build_span(tracer_span, tags))
127
+ end
128
+ else
129
+ tracer_span = start_datadog_tracer_span(span_name, span_options)
130
+
131
+ build_span(tracer_span, tags)
132
+ end
133
+ end
134
+
135
+ def active_span
136
+ tracer_span = Datadog::Tracing.active_span
137
+ Span.new(tracer_span) if tracer_span
138
+ end
139
+
140
+ def active_test
141
+ @local_context.active_test
142
+ end
143
+
144
+ def active_test_session
145
+ @global_context.active_test_session
146
+ end
147
+
148
+ def active_test_module
149
+ @global_context.active_test_module
150
+ end
151
+
152
+ def active_test_suite(test_suite_name)
153
+ @global_context.active_test_suite(test_suite_name)
154
+ end
155
+
156
+ def deactivate_test(test)
157
+ @local_context.deactivate_test!(test)
158
+ end
159
+
160
+ def deactivate_test_session
161
+ @global_context.deactivate_test_session!
162
+ end
163
+
164
+ def deactivate_test_module
165
+ @global_context.deactivate_test_module!
166
+ end
167
+
168
+ def deactivate_test_suite(test_suite_name)
169
+ @global_context.deactivate_test_suite!(test_suite_name)
170
+ end
171
+
172
+ private
173
+
174
+ def skip_tracing(block = nil)
175
+ if block
176
+ block.call(null_span)
177
+ else
178
+ null_span
179
+ end
180
+ end
181
+
182
+ # Sets trace's origin to ciapp-test
183
+ def set_trace_origin(trace)
184
+ trace.origin = Ext::Test::CONTEXT_ORIGIN if trace
185
+ end
186
+
187
+ def build_test_session(tracer_span, tags)
188
+ test_session = TestSession.new(tracer_span)
189
+ set_initial_tags(test_session, tags)
190
+ test_session
191
+ end
192
+
193
+ def build_test_module(tracer_span, tags)
194
+ test_module = TestModule.new(tracer_span)
195
+ set_initial_tags(test_module, tags)
196
+ test_module
197
+ end
198
+
199
+ def build_test_suite(tracer_span, tags)
200
+ test_suite = TestSuite.new(tracer_span)
201
+ set_initial_tags(test_suite, tags)
202
+ test_suite
203
+ end
204
+
205
+ def build_test(tracer_span, tags)
206
+ test = Test.new(tracer_span)
207
+ set_initial_tags(test, tags)
208
+ validate_test_suite_level_visibility_correctness(test)
209
+ test
210
+ end
211
+
212
+ def build_span(tracer_span, tags)
213
+ span = Span.new(tracer_span)
214
+ set_initial_tags(span, tags)
215
+ span
216
+ end
217
+
218
+ def build_span_options(service, span_type, other_options = {})
219
+ other_options[:service] = service || @global_context.service
220
+ other_options[:span_type] = span_type
221
+
222
+ other_options
223
+ end
224
+
225
+ def set_inherited_globals(tags)
226
+ # this code achieves the same as @global_context.inheritable_session_tags.merge(tags)
227
+ # but without allocating a new hash
228
+ @global_context.inheritable_session_tags.each do |key, value|
229
+ tags[key] = value unless tags.key?(key)
230
+ end
231
+ end
232
+
233
+ def set_initial_tags(ci_span, tags)
234
+ ci_span.set_default_tags
235
+ ci_span.set_environment_runtime_tags
236
+
237
+ ci_span.set_tags(tags)
238
+ ci_span.set_tags(environment_tags)
239
+ end
240
+
241
+ def set_session_context(tags, test_session = nil)
242
+ test_session ||= active_test_session
243
+ tags[Ext::Test::TAG_TEST_SESSION_ID] = test_session.id.to_s if test_session
244
+ end
245
+
246
+ def set_module_context(tags, test_module = nil)
247
+ test_module ||= active_test_module
248
+ if test_module
249
+ tags[Ext::Test::TAG_TEST_MODULE_ID] = test_module.id.to_s
250
+ tags[Ext::Test::TAG_MODULE] = test_module.name
251
+ end
252
+ end
253
+
254
+ def set_suite_context(tags, span: nil, name: nil)
255
+ return if span.nil? && name.nil?
256
+
257
+ test_suite = span || active_test_suite(name)
258
+
259
+ if test_suite
260
+ tags[Ext::Test::TAG_TEST_SUITE_ID] = test_suite.id.to_s
261
+ tags[Ext::Test::TAG_SUITE] = test_suite.name
262
+ else
263
+ tags[Ext::Test::TAG_SUITE] = name
264
+ end
265
+ end
266
+
267
+ def start_datadog_tracer_span(span_name, span_options, &block)
268
+ if block
269
+ Datadog::Tracing.trace(span_name, **span_options) do |tracer_span, trace|
270
+ set_trace_origin(trace)
271
+
272
+ yield tracer_span
273
+ end
274
+ else
275
+ tracer_span = Datadog::Tracing.trace(span_name, **span_options)
276
+ trace = Datadog::Tracing.active_trace
277
+ set_trace_origin(trace)
278
+
279
+ tracer_span
280
+ end
281
+ end
282
+
283
+ def null_span
284
+ @null_span ||= NullSpan.new
285
+ end
286
+
287
+ def validate_test_suite_level_visibility_correctness(test)
288
+ return unless test_suite_level_visibility_enabled
289
+
290
+ if test.test_suite_id.nil?
291
+ Datadog.logger.debug do
292
+ "Test [#{test.name}] does not have a test suite associated with it. " \
293
+ "Expected test suite [#{test.test_suite_name}] to be running."
294
+ end
295
+ end
296
+
297
+ if test.test_module_id.nil?
298
+ Datadog.logger.debug do
299
+ "Test [#{test.name}] does not have a test module associated with it. " \
300
+ "Make sure that there is a test module running within a session."
301
+ end
302
+ end
303
+
304
+ if test.test_session_id.nil?
305
+ Datadog.logger.debug do
306
+ "Test [#{test.name}] does not have a test session associated with it. " \
307
+ "Make sure that there is a test session running."
308
+ end
309
+ end
310
+ end
311
+ end
312
+ end
313
+ end
314
+ end
@@ -4,7 +4,7 @@ module Datadog
4
4
  module CI
5
5
  module VERSION
6
6
  MAJOR = "0"
7
- MINOR = "5"
7
+ MINOR = "6"
8
8
  PATCH = "0"
9
9
  PRE = nil
10
10
  BUILD = nil
data/lib/datadog/ci.rb CHANGED
@@ -389,6 +389,6 @@ require_relative "ci/contrib/cucumber/integration"
389
389
  require_relative "ci/contrib/rspec/integration"
390
390
  require_relative "ci/contrib/minitest/integration"
391
391
 
392
- # Extensions
393
- require_relative "ci/extensions"
394
- Datadog::CI::Extensions.activate!
392
+ # Configuration extensions
393
+ require_relative "ci/configuration/extensions"
394
+ Datadog::CI::Configuration::Extensions.activate!
@@ -2,9 +2,9 @@ module Datadog
2
2
  module CI
3
3
  module Configuration
4
4
  module Components : Datadog::Core::Configuration::Components
5
- @ci_recorder: Datadog::CI::Recorder
5
+ @ci_recorder: Datadog::CI::TestVisibility::Recorder
6
6
 
7
- attr_reader ci_recorder: Datadog::CI::Recorder
7
+ attr_reader ci_recorder: Datadog::CI::TestVisibility::Recorder
8
8
 
9
9
  def initialize: (untyped settings) -> void
10
10
 
@@ -0,0 +1,9 @@
1
+ module Datadog
2
+ module CI
3
+ module Configuration
4
+ module Extensions
5
+ def self.activate!: () -> untyped
6
+ end
7
+ end
8
+ end
9
+ end
@@ -3,8 +3,6 @@ module Datadog
3
3
  module Contrib
4
4
  module Cucumber
5
5
  module Ext
6
- APP: String
7
-
8
6
  ENV_ENABLED: String
9
7
 
10
8
  ENV_OPERATION_NAME: String
@@ -13,11 +11,9 @@ module Datadog
13
11
 
14
12
  OPERATION_NAME: String
15
13
 
16
- SERVICE_NAME: String
14
+ DEFAULT_SERVICE_NAME: String
17
15
 
18
16
  STEP_SPAN_TYPE: String
19
-
20
- TEST_TYPE: String
21
17
  end
22
18
  end
23
19
  end
@@ -4,19 +4,22 @@ module Datadog
4
4
  module Cucumber
5
5
  class Formatter
6
6
  private
7
+ @failed_tests_count: Integer
8
+ @current_test_suite: Datadog::CI::Span?
9
+ @failed_tests_in_current_test_suite: Integer
7
10
 
8
11
  attr_reader config: untyped
9
12
 
10
- attr_reader current_feature_span: untyped
11
-
12
- attr_reader current_step_span: untyped
13
-
14
13
  public
15
14
 
16
15
  def initialize: (untyped config) -> void
17
16
 
18
17
  def bind_events: (untyped config) -> untyped
19
18
 
19
+ def on_test_run_started: (untyped event) -> untyped
20
+
21
+ def on_test_run_finished: (untyped event) -> untyped
22
+
20
23
  def on_test_case_started: (untyped event) -> untyped
21
24
 
22
25
  def on_test_case_finished: (untyped event) -> (nil | untyped)
@@ -27,6 +30,16 @@ module Datadog
27
30
 
28
31
  private
29
32
 
33
+ def start_test_suite: (String test_suite_name) -> void
34
+
35
+ def finish_current_test_suite: () -> void
36
+
37
+ def same_test_suite_as_current?: (String test_suite_name) -> bool
38
+
39
+ def finish_session: (bool result) -> void
40
+
41
+ def finish_test: (Datadog::CI::Span test, Cucumber::Core::Test::Result result) -> void
42
+
30
43
  def configuration: () -> untyped
31
44
  end
32
45
  end
@@ -3,8 +3,6 @@ module Datadog
3
3
  module Contrib
4
4
  module Minitest
5
5
  module Ext
6
- APP: String
7
-
8
6
  ENV_ENABLED: String
9
7
 
10
8
  ENV_OPERATION_NAME: String
@@ -13,9 +11,7 @@ module Datadog
13
11
 
14
12
  OPERATION_NAME: String
15
13
 
16
- SERVICE_NAME: String
17
-
18
- TEST_TYPE: String
14
+ DEFAULT_SERVICE_NAME: String
19
15
  end
20
16
  end
21
17
  end
@@ -0,0 +1,13 @@
1
+ module Datadog
2
+ module CI
3
+ module Contrib
4
+ module Minitest
5
+ module Helpers
6
+ def self.test_suite_name: (untyped klass, String? method_name) -> ::String
7
+
8
+ def self.parallel?: (untyped klass) -> bool
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -11,7 +11,15 @@ module Datadog
11
11
 
12
12
  private
13
13
 
14
- def configuration: () -> untyped
14
+ def datadog_configuration: () -> untyped
15
+
16
+ def finish_test: (Datadog::CI::Test test_span, String result_code) -> void
17
+
18
+ def finish_test_suite: (Datadog::CI::TestSuite? test_suite, String result_code) -> void
19
+
20
+ def finish_with_result: (Datadog::CI::Span span, String result_code) -> void
21
+
22
+ def self.test_order: () -> (nil | :parallel | :sorted | :random | :alpha)
15
23
  end
16
24
  end
17
25
  end
@@ -0,0 +1,31 @@
1
+ module Datadog
2
+ module CI
3
+ module Contrib
4
+ module Minitest
5
+ module Plugin
6
+ def self.included: (untyped base) -> untyped
7
+
8
+ class DatadogReporter < ::Minitest::AbstractReporter
9
+ @reporter: WeakRef
10
+
11
+ def initialize: (Minitest::AbstractReporter reporter) -> void
12
+ end
13
+
14
+ module ClassMethods
15
+ def plugin_datadog_ci_init: (*untyped) -> (nil | untyped)
16
+
17
+ def initialize: (untyped reporter) -> void
18
+
19
+ def report: () -> (nil | untyped)
20
+
21
+ def reporter: () -> Minitest::CompositeReporter
22
+
23
+ private
24
+
25
+ def datadog_configuration: () -> untyped
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+ module Datadog
2
+ module CI
3
+ module Contrib
4
+ module Minitest
5
+ module Runnable
6
+ def self.included: (untyped base) -> untyped
7
+
8
+ module ClassMethods : ::Minitest::Runnable
9
+
10
+ def run: (*untyped) -> untyped
11
+
12
+ private
13
+
14
+ def datadog_configuration: () -> untyped
15
+
16
+ def test_order: () -> (nil | :parallel | :random | :sorted | :alpha)
17
+
18
+ def runnable_methods: () -> Array[String]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ module Datadog
2
+ module CI
3
+ module Contrib
4
+ module RSpec
5
+ module ExampleGroup
6
+ def self.included: (untyped base) -> untyped
7
+
8
+ module ClassMethods
9
+ include ::RSpec::Core::ExampleGroup::ClassMethods
10
+
11
+ def run: (?untyped reporter) -> untyped
12
+
13
+ private
14
+
15
+ def configuration: () -> untyped
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -3,19 +3,13 @@ module Datadog
3
3
  module Contrib
4
4
  module RSpec
5
5
  module Ext
6
- APP: String
7
-
8
6
  ENV_ENABLED: String
9
7
 
10
- ENV_OPERATION_NAME: String
11
-
12
8
  FRAMEWORK: String
9
+ DEFAULT_SERVICE_NAME: String
13
10
 
14
11
  OPERATION_NAME: String
15
-
16
- SERVICE_NAME: String
17
-
18
- TEST_TYPE: String
12
+ ENV_OPERATION_NAME: String
19
13
  end
20
14
  end
21
15
  end
@@ -0,0 +1,21 @@
1
+ module Datadog
2
+ module CI
3
+ module Contrib
4
+ module RSpec
5
+ module Runner
6
+ def self.included: (untyped base) -> untyped
7
+
8
+ module InstanceMethods
9
+ include ::RSpec::Core::Runner
10
+
11
+ def run_specs: (untyped example_groups) -> untyped
12
+
13
+ private
14
+
15
+ def configuration: () -> untyped
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -32,6 +32,8 @@ module Datadog
32
32
 
33
33
  TAG_TEST_SUITE_ID: String
34
34
 
35
+ TEST_TYPE: String
36
+
35
37
  SPECIAL_TAGS: Array[String]
36
38
 
37
39
  INHERITABLE_TAGS: Array[String]
@@ -13,6 +13,14 @@ module Datadog
13
13
 
14
14
  def service: () -> String
15
15
 
16
+ def undefined?: () -> bool
17
+
18
+ def passed?: () -> bool
19
+
20
+ def failed?: () -> bool
21
+
22
+ def skipped?: () -> bool
23
+
16
24
  def passed!: () -> void
17
25
 
18
26
  def failed!: (?exception: untyped?) -> void
@@ -2,6 +2,11 @@ module Datadog
2
2
  module CI
3
3
  class Test < Span
4
4
  def finish: () -> void
5
+ def test_suite: () -> Datadog::CI::TestSuite?
6
+ def test_suite_id: () -> String?
7
+ def test_suite_name: () -> String?
8
+ def test_module_id: () -> String?
9
+ def test_session_id: () -> String?
5
10
  end
6
11
  end
7
12
  end
@@ -0,0 +1,39 @@
1
+ module Datadog
2
+ module CI
3
+ module TestVisibility
4
+ module Context
5
+ class Global
6
+ @mutex: Thread::Mutex
7
+
8
+ @test_session: Datadog::CI::TestSession?
9
+ @test_module: Datadog::CI::TestModule?
10
+ @test_suites: Hash[String, Datadog::CI::TestSuite]
11
+
12
+ def initialize: () -> void
13
+
14
+ def fetch_or_activate_test_suite: (String test_suite_name) {() -> Datadog::CI::TestSuite} -> Datadog::CI::TestSuite
15
+
16
+ def fetch_or_activate_test_module: () {() -> Datadog::CI::TestModule} -> Datadog::CI::TestModule
17
+
18
+ def fetch_or_activate_test_session: () {() -> Datadog::CI::TestSession} -> Datadog::CI::TestSession
19
+
20
+ def active_test_session: () -> Datadog::CI::TestSession?
21
+
22
+ def active_test_suite: (String test_suite_name) -> Datadog::CI::TestSuite?
23
+
24
+ def service: () -> String?
25
+
26
+ def inheritable_session_tags: () -> Hash[untyped, untyped]
27
+
28
+ def active_test_module: () -> Datadog::CI::TestModule?
29
+
30
+ def deactivate_test_session!: () -> void
31
+
32
+ def deactivate_test_module!: () -> void
33
+
34
+ def deactivate_test_suite!: (String test_suite_name) -> void
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end