datadog-ci 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -2
- data/lib/datadog/ci/configuration/components.rb +30 -3
- data/lib/datadog/ci/contrib/cucumber/formatter.rb +13 -9
- data/lib/datadog/ci/contrib/minitest/runnable.rb +5 -1
- data/lib/datadog/ci/contrib/minitest/runner.rb +6 -2
- data/lib/datadog/ci/contrib/minitest/test.rb +7 -3
- data/lib/datadog/ci/contrib/rspec/example.rb +6 -2
- data/lib/datadog/ci/contrib/rspec/example_group.rb +5 -1
- data/lib/datadog/ci/contrib/rspec/knapsack_pro/runner.rb +6 -2
- data/lib/datadog/ci/contrib/rspec/runner.rb +6 -2
- data/lib/datadog/ci/ext/environment/providers/appveyor.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/aws_code_pipeline.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/azure.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/bitbucket.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/bitrise.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/buddy.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/buildkite.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/circleci.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/codefresh.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/github_actions.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/gitlab.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/jenkins.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/teamcity.rb +1 -1
- data/lib/datadog/ci/ext/environment/providers/travis.rb +1 -1
- data/lib/datadog/ci/ext/environment.rb +17 -0
- data/lib/datadog/ci/ext/telemetry.rb +120 -0
- data/lib/datadog/ci/git/local_repository.rb +116 -25
- data/lib/datadog/ci/git/search_commits.rb +20 -1
- data/lib/datadog/ci/git/telemetry.rb +37 -0
- data/lib/datadog/ci/git/tree_uploader.rb +7 -0
- data/lib/datadog/ci/git/upload_packfile.rb +22 -1
- data/lib/datadog/ci/test.rb +5 -0
- data/lib/datadog/ci/test_optimisation/component.rb +16 -2
- data/lib/datadog/ci/test_optimisation/coverage/transport.rb +10 -1
- data/lib/datadog/ci/test_optimisation/skippable.rb +24 -0
- data/lib/datadog/ci/test_optimisation/telemetry.rb +56 -0
- data/lib/datadog/ci/test_visibility/component.rb +95 -235
- data/lib/datadog/ci/test_visibility/context.rb +274 -0
- data/lib/datadog/ci/test_visibility/{context → store}/global.rb +1 -1
- data/lib/datadog/ci/test_visibility/{context → store}/local.rb +1 -1
- data/lib/datadog/ci/test_visibility/telemetry.rb +69 -0
- data/lib/datadog/ci/test_visibility/transport.rb +8 -9
- data/lib/datadog/ci/transport/adapters/net.rb +42 -11
- data/lib/datadog/ci/transport/adapters/net_http_client.rb +17 -0
- data/lib/datadog/ci/transport/adapters/telemetry_webmock_safe_adapter.rb +28 -0
- data/lib/datadog/ci/transport/event_platform_transport.rb +42 -5
- data/lib/datadog/ci/transport/http.rb +49 -21
- data/lib/datadog/ci/transport/remote_settings_api.rb +39 -1
- data/lib/datadog/ci/transport/telemetry.rb +93 -0
- data/lib/datadog/ci/utils/identity.rb +20 -0
- data/lib/datadog/ci/utils/parsing.rb +2 -1
- data/lib/datadog/ci/utils/telemetry.rb +23 -0
- data/lib/datadog/ci/version.rb +1 -1
- data/lib/datadog/ci.rb +30 -0
- metadata +16 -6
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../ext/telemetry"
|
4
|
+
require_relative "../ext/test"
|
5
|
+
require_relative "../utils/telemetry"
|
6
|
+
require_relative "../test_visibility/telemetry"
|
7
|
+
|
8
|
+
module Datadog
|
9
|
+
module CI
|
10
|
+
module TestOptimisation
|
11
|
+
# Telemetry for test optimisation component
|
12
|
+
module Telemetry
|
13
|
+
def self.code_coverage_started(test)
|
14
|
+
Utils::Telemetry.inc(Ext::Telemetry::METRIC_CODE_COVERAGE_STARTED, 1, tags_for_test(test))
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.code_coverage_finished(test)
|
18
|
+
Utils::Telemetry.inc(Ext::Telemetry::METRIC_CODE_COVERAGE_FINISHED, 1, tags_for_test(test))
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.code_coverage_is_empty
|
22
|
+
Utils::Telemetry.inc(Ext::Telemetry::METRIC_CODE_COVERAGE_IS_EMPTY, 1)
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.code_coverage_files(count)
|
26
|
+
Utils::Telemetry.distribution(Ext::Telemetry::METRIC_CODE_COVERAGE_FILES, count.to_f)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.itr_skipped
|
30
|
+
Utils::Telemetry.inc(Ext::Telemetry::METRIC_ITR_SKIPPED, 1, tags_for_itr_metrics)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.itr_forced_run
|
34
|
+
Utils::Telemetry.inc(Ext::Telemetry::METRIC_ITR_FORCED_RUN, 1, tags_for_itr_metrics)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.itr_unskippable
|
38
|
+
Utils::Telemetry.inc(Ext::Telemetry::METRIC_ITR_UNSKIPPABLE, 1, tags_for_itr_metrics)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.tags_for_test(test)
|
42
|
+
{
|
43
|
+
Ext::Telemetry::TAG_TEST_FRAMEWORK => test.get_tag(Ext::Test::TAG_FRAMEWORK),
|
44
|
+
Ext::Telemetry::TAG_LIBRARY => Ext::Telemetry::Library::CUSTOM
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.tags_for_itr_metrics
|
49
|
+
{
|
50
|
+
Ext::Telemetry::TAG_EVENT_TYPE => Ext::Telemetry::EventType::TEST
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -1,35 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "datadog/tracing"
|
4
|
-
require "datadog/tracing/contrib/component"
|
5
|
-
require "datadog/tracing/trace_digest"
|
6
|
-
|
7
3
|
require "rbconfig"
|
8
4
|
|
9
|
-
require_relative "context
|
10
|
-
require_relative "
|
5
|
+
require_relative "context"
|
6
|
+
require_relative "telemetry"
|
11
7
|
|
12
8
|
require_relative "../codeowners/parser"
|
13
9
|
require_relative "../contrib/contrib"
|
14
|
-
require_relative "../ext/app_types"
|
15
10
|
require_relative "../ext/test"
|
16
|
-
require_relative "../ext/environment"
|
17
11
|
require_relative "../git/local_repository"
|
18
12
|
|
19
|
-
require_relative "../span"
|
20
|
-
require_relative "../test"
|
21
|
-
require_relative "../test_session"
|
22
|
-
require_relative "../test_module"
|
23
|
-
require_relative "../test_suite"
|
24
13
|
require_relative "../worker"
|
25
14
|
|
26
15
|
module Datadog
|
27
16
|
module CI
|
28
17
|
module TestVisibility
|
29
18
|
# Common behavior for CI tests
|
30
|
-
# Note: this class has too many responsibilities and should be split into multiple classes
|
31
19
|
class Component
|
32
|
-
attr_reader :
|
20
|
+
attr_reader :test_suite_level_visibility_enabled
|
33
21
|
|
34
22
|
def initialize(
|
35
23
|
test_optimisation:,
|
@@ -39,13 +27,8 @@ module Datadog
|
|
39
27
|
codeowners: Codeowners::Parser.new(Git::LocalRepository.root).parse
|
40
28
|
)
|
41
29
|
@test_suite_level_visibility_enabled = test_suite_level_visibility_enabled
|
42
|
-
|
43
|
-
@environment_tags = Ext::Environment.tags(ENV).freeze
|
44
|
-
@local_context = Context::Local.new
|
45
|
-
@global_context = Context::Global.new
|
46
|
-
|
30
|
+
@context = Context.new
|
47
31
|
@codeowners = codeowners
|
48
|
-
|
49
32
|
@test_optimisation = test_optimisation
|
50
33
|
@remote_settings_api = remote_settings_api
|
51
34
|
@git_tree_upload_worker = git_tree_upload_worker
|
@@ -58,155 +41,98 @@ module Datadog
|
|
58
41
|
def start_test_session(service: nil, tags: {})
|
59
42
|
return skip_tracing unless test_suite_level_visibility_enabled
|
60
43
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
@global_context.fetch_or_activate_test_session do
|
65
|
-
tracer_span = start_datadog_tracer_span(
|
66
|
-
"test.session", build_span_options(service, Ext::AppTypes::TYPE_TEST_SESSION)
|
67
|
-
)
|
68
|
-
set_session_context(tags, tracer_span)
|
69
|
-
|
70
|
-
test_session = build_test_session(tracer_span, tags)
|
71
|
-
|
72
|
-
@git_tree_upload_worker.perform(test_session.git_repository_url)
|
73
|
-
configure_library(test_session)
|
74
|
-
|
75
|
-
test_session
|
76
|
-
end
|
44
|
+
test_session = @context.start_test_session(service: service, tags: tags)
|
45
|
+
on_test_session_started(test_session)
|
46
|
+
test_session
|
77
47
|
end
|
78
48
|
|
79
49
|
def start_test_module(test_module_name, service: nil, tags: {})
|
80
50
|
return skip_tracing unless test_suite_level_visibility_enabled
|
81
51
|
|
82
|
-
@
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
tracer_span = start_datadog_tracer_span(
|
87
|
-
test_module_name, build_span_options(service, Ext::AppTypes::TYPE_TEST_MODULE)
|
88
|
-
)
|
89
|
-
set_module_context(tags, tracer_span)
|
90
|
-
|
91
|
-
build_test_module(tracer_span, tags)
|
92
|
-
end
|
52
|
+
test_module = @context.start_test_module(test_module_name, service: service, tags: tags)
|
53
|
+
on_test_module_started(test_module)
|
54
|
+
test_module
|
93
55
|
end
|
94
56
|
|
95
57
|
def start_test_suite(test_suite_name, service: nil, tags: {})
|
96
58
|
return skip_tracing unless test_suite_level_visibility_enabled
|
97
59
|
|
98
|
-
@
|
99
|
-
|
100
|
-
|
101
|
-
set_module_context(tags)
|
102
|
-
|
103
|
-
tracer_span = start_datadog_tracer_span(
|
104
|
-
test_suite_name, build_span_options(service, Ext::AppTypes::TYPE_TEST_SUITE)
|
105
|
-
)
|
106
|
-
set_suite_context(tags, span: tracer_span)
|
107
|
-
|
108
|
-
build_test_suite(tracer_span, tags)
|
109
|
-
end
|
60
|
+
test_suite = @context.start_test_suite(test_suite_name, service: service, tags: tags)
|
61
|
+
on_test_suite_started(test_suite)
|
62
|
+
test_suite
|
110
63
|
end
|
111
64
|
|
112
65
|
def trace_test(test_name, test_suite_name, service: nil, tags: {}, &block)
|
113
|
-
set_inherited_globals(tags)
|
114
|
-
set_session_context(tags)
|
115
|
-
set_module_context(tags)
|
116
|
-
set_suite_context(tags, name: test_suite_name)
|
117
|
-
|
118
|
-
tags[Ext::Test::TAG_NAME] = test_name
|
119
|
-
tags[Ext::Test::TAG_TYPE] ||= Ext::Test::Type::TEST
|
120
|
-
|
121
|
-
span_options = build_span_options(
|
122
|
-
service,
|
123
|
-
Ext::AppTypes::TYPE_TEST,
|
124
|
-
# :resource is needed for the agent APM protocol to work correctly (for older agent versions)
|
125
|
-
# :continue_from is required to start a new trace for each test
|
126
|
-
{resource: test_name, continue_from: Datadog::Tracing::TraceDigest.new}
|
127
|
-
)
|
128
|
-
|
129
66
|
if block
|
130
|
-
|
131
|
-
test
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
res = block.call(test)
|
136
|
-
on_test_finished(test)
|
137
|
-
res
|
138
|
-
end
|
67
|
+
@context.trace_test(test_name, test_suite_name, service: service, tags: tags) do |test|
|
68
|
+
on_test_started(test)
|
69
|
+
res = block.call(test)
|
70
|
+
on_test_finished(test)
|
71
|
+
res
|
139
72
|
end
|
140
73
|
else
|
141
|
-
|
142
|
-
test = build_test(tracer_span, tags)
|
143
|
-
|
144
|
-
@local_context.activate_test(test)
|
74
|
+
test = @context.trace_test(test_name, test_suite_name, service: service, tags: tags)
|
145
75
|
on_test_started(test)
|
146
|
-
|
147
76
|
test
|
148
77
|
end
|
149
78
|
end
|
150
79
|
|
151
80
|
def trace(span_name, type: "span", tags: {}, &block)
|
152
|
-
span_options = build_span_options(
|
153
|
-
nil, # service name is completely optional for custom spans
|
154
|
-
type,
|
155
|
-
{resource: span_name}
|
156
|
-
)
|
157
|
-
|
158
81
|
if block
|
159
|
-
|
160
|
-
block.call(
|
82
|
+
@context.trace(span_name, type: type, tags: tags) do |span|
|
83
|
+
block.call(span)
|
161
84
|
end
|
162
85
|
else
|
163
|
-
|
164
|
-
|
165
|
-
build_span(tracer_span, tags)
|
86
|
+
@context.trace(span_name, type: type, tags: tags)
|
166
87
|
end
|
167
88
|
end
|
168
89
|
|
169
90
|
def active_span
|
170
|
-
|
171
|
-
Span.new(tracer_span) if tracer_span
|
91
|
+
@context.active_span
|
172
92
|
end
|
173
93
|
|
174
94
|
def active_test
|
175
|
-
@
|
95
|
+
@context.active_test
|
176
96
|
end
|
177
97
|
|
178
98
|
def active_test_session
|
179
|
-
@
|
99
|
+
@context.active_test_session
|
180
100
|
end
|
181
101
|
|
182
102
|
def active_test_module
|
183
|
-
@
|
103
|
+
@context.active_test_module
|
184
104
|
end
|
185
105
|
|
186
106
|
def active_test_suite(test_suite_name)
|
187
|
-
@
|
107
|
+
@context.active_test_suite(test_suite_name)
|
188
108
|
end
|
189
109
|
|
190
110
|
def deactivate_test
|
191
111
|
test = active_test
|
192
112
|
on_test_finished(test) if test
|
193
113
|
|
194
|
-
@
|
114
|
+
@context.deactivate_test
|
195
115
|
end
|
196
116
|
|
197
117
|
def deactivate_test_session
|
198
118
|
test_session = active_test_session
|
199
119
|
on_test_session_finished(test_session) if test_session
|
200
120
|
|
201
|
-
@
|
121
|
+
@context.deactivate_test_session
|
202
122
|
end
|
203
123
|
|
204
124
|
def deactivate_test_module
|
205
|
-
|
125
|
+
test_module = active_test_module
|
126
|
+
on_test_module_finished(test_module) if test_module
|
127
|
+
|
128
|
+
@context.deactivate_test_module
|
206
129
|
end
|
207
130
|
|
208
131
|
def deactivate_test_suite(test_suite_name)
|
209
|
-
|
132
|
+
test_suite = active_test_suite(test_suite_name)
|
133
|
+
on_test_suite_finished(test_suite) if test_suite
|
134
|
+
|
135
|
+
@context.deactivate_test_suite(test_suite_name)
|
210
136
|
end
|
211
137
|
|
212
138
|
def itr_enabled?
|
@@ -215,63 +141,27 @@ module Datadog
|
|
215
141
|
|
216
142
|
private
|
217
143
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
remote_configuration = @remote_settings_api.fetch_library_settings(test_session)
|
223
|
-
# sometimes we can skip code coverage for default branch if there are no changes in the repository
|
224
|
-
# backend needs git metadata uploaded for this test session to check if we can skip code coverage
|
225
|
-
if remote_configuration.require_git?
|
226
|
-
Datadog.logger.debug { "Library configuration endpoint requires git upload to be finished, waiting..." }
|
227
|
-
@git_tree_upload_worker.wait_until_done
|
228
|
-
|
229
|
-
Datadog.logger.debug { "Requesting library configuration again..." }
|
230
|
-
remote_configuration = @remote_settings_api.fetch_library_settings(test_session)
|
144
|
+
# DOMAIN EVENTS
|
145
|
+
def on_test_session_started(test_session)
|
146
|
+
Telemetry.event_created(test_session)
|
147
|
+
Telemetry.test_session_started(test_session)
|
231
148
|
|
232
|
-
|
233
|
-
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
@test_optimisation.configure(
|
238
|
-
remote_configuration.payload,
|
239
|
-
test_session: test_session,
|
240
|
-
git_tree_upload_worker: @git_tree_upload_worker
|
241
|
-
)
|
242
|
-
end
|
243
|
-
|
244
|
-
def skip_tracing(block = nil)
|
245
|
-
block&.call(nil)
|
246
|
-
end
|
247
|
-
|
248
|
-
# Sets trace's origin to ciapp-test
|
249
|
-
def set_trace_origin(trace)
|
250
|
-
trace&.origin = Ext::Test::CONTEXT_ORIGIN
|
251
|
-
end
|
149
|
+
# finds and instruments additional test libraries that we support (ex: selenium-webdriver)
|
150
|
+
Contrib.auto_instrument_on_session_start!
|
252
151
|
|
253
|
-
|
254
|
-
test_session
|
255
|
-
set_initial_tags(test_session, tags)
|
256
|
-
test_session
|
152
|
+
@git_tree_upload_worker.perform(test_session.git_repository_url)
|
153
|
+
configure_library(test_session)
|
257
154
|
end
|
258
155
|
|
259
|
-
def
|
260
|
-
|
261
|
-
set_initial_tags(test_module, tags)
|
262
|
-
test_module
|
156
|
+
def on_test_module_started(test_module)
|
157
|
+
Telemetry.event_created(test_module)
|
263
158
|
end
|
264
159
|
|
265
|
-
def
|
266
|
-
|
267
|
-
set_initial_tags(test_suite, tags)
|
268
|
-
test_suite
|
160
|
+
def on_test_suite_started(test_suite)
|
161
|
+
Telemetry.event_created(test_suite)
|
269
162
|
end
|
270
163
|
|
271
|
-
def
|
272
|
-
test = Test.new(tracer_span)
|
273
|
-
set_initial_tags(test, tags)
|
274
|
-
|
164
|
+
def on_test_started(test)
|
275
165
|
# sometimes test suite is not being assigned correctly
|
276
166
|
# fix it by fetching the one single running test suite from the global context
|
277
167
|
fix_test_suite!(test) if test.test_suite_id.nil?
|
@@ -279,49 +169,63 @@ module Datadog
|
|
279
169
|
validate_test_suite_level_visibility_correctness(test)
|
280
170
|
set_codeowners(test)
|
281
171
|
|
282
|
-
test
|
283
|
-
end
|
172
|
+
Telemetry.event_created(test)
|
284
173
|
|
285
|
-
|
286
|
-
|
287
|
-
set_initial_tags(span, tags)
|
288
|
-
span
|
174
|
+
@test_optimisation.mark_if_skippable(test)
|
175
|
+
@test_optimisation.start_coverage(test)
|
289
176
|
end
|
290
177
|
|
291
|
-
def
|
292
|
-
|
293
|
-
other_options[:type] = type
|
178
|
+
def on_test_session_finished(test_session)
|
179
|
+
@test_optimisation.write_test_session_tags(test_session)
|
294
180
|
|
295
|
-
|
181
|
+
Telemetry.event_finished(test_session)
|
296
182
|
end
|
297
183
|
|
298
|
-
def
|
299
|
-
|
300
|
-
# but without allocating a new hash
|
301
|
-
@global_context.inheritable_session_tags.each do |key, value|
|
302
|
-
tags[key] = value unless tags.key?(key)
|
303
|
-
end
|
184
|
+
def on_test_module_finished(test_module)
|
185
|
+
Telemetry.event_finished(test_module)
|
304
186
|
end
|
305
187
|
|
306
|
-
def
|
307
|
-
|
308
|
-
ci_span.set_environment_runtime_tags
|
309
|
-
|
310
|
-
ci_span.set_tags(tags)
|
311
|
-
ci_span.set_tags(environment_tags)
|
188
|
+
def on_test_suite_finished(test_suite)
|
189
|
+
Telemetry.event_finished(test_suite)
|
312
190
|
end
|
313
191
|
|
314
|
-
def
|
315
|
-
|
316
|
-
|
192
|
+
def on_test_finished(test)
|
193
|
+
@test_optimisation.stop_coverage(test)
|
194
|
+
@test_optimisation.count_skipped_test(test)
|
195
|
+
|
196
|
+
Telemetry.event_finished(test)
|
317
197
|
end
|
318
198
|
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
199
|
+
# TODO: move this to CI::Configuration::Remote
|
200
|
+
def configure_library(test_session)
|
201
|
+
# this will change when EFD is implemented
|
202
|
+
return unless itr_enabled?
|
203
|
+
|
204
|
+
remote_configuration = @remote_settings_api.fetch_library_settings(test_session)
|
205
|
+
# sometimes we can skip code coverage for default branch if there are no changes in the repository
|
206
|
+
# backend needs git metadata uploaded for this test session to check if we can skip code coverage
|
207
|
+
if remote_configuration.require_git?
|
208
|
+
Datadog.logger.debug { "Library configuration endpoint requires git upload to be finished, waiting..." }
|
209
|
+
@git_tree_upload_worker.wait_until_done
|
210
|
+
|
211
|
+
Datadog.logger.debug { "Requesting library configuration again..." }
|
212
|
+
remote_configuration = @remote_settings_api.fetch_library_settings(test_session)
|
213
|
+
|
214
|
+
if remote_configuration.require_git?
|
215
|
+
Datadog.logger.debug { "git metadata upload did not complete in time when configuring library" }
|
216
|
+
end
|
324
217
|
end
|
218
|
+
|
219
|
+
@test_optimisation.configure(
|
220
|
+
remote_configuration.payload,
|
221
|
+
test_session: test_session,
|
222
|
+
git_tree_upload_worker: @git_tree_upload_worker
|
223
|
+
)
|
224
|
+
end
|
225
|
+
|
226
|
+
# HELPERS
|
227
|
+
def skip_tracing(block = nil)
|
228
|
+
block&.call(nil)
|
325
229
|
end
|
326
230
|
|
327
231
|
def set_codeowners(test)
|
@@ -330,21 +234,8 @@ module Datadog
|
|
330
234
|
test.set_tag(Ext::Test::TAG_CODEOWNERS, owners) unless owners.nil?
|
331
235
|
end
|
332
236
|
|
333
|
-
def set_suite_context(tags, span: nil, name: nil)
|
334
|
-
return if span.nil? && name.nil?
|
335
|
-
|
336
|
-
test_suite = span || active_test_suite(name)
|
337
|
-
|
338
|
-
if test_suite
|
339
|
-
tags[Ext::Test::TAG_TEST_SUITE_ID] = test_suite.id.to_s
|
340
|
-
tags[Ext::Test::TAG_SUITE] = test_suite.name
|
341
|
-
else
|
342
|
-
tags[Ext::Test::TAG_SUITE] = name
|
343
|
-
end
|
344
|
-
end
|
345
|
-
|
346
237
|
def fix_test_suite!(test)
|
347
|
-
test_suite = @
|
238
|
+
test_suite = @context.single_active_test_suite
|
348
239
|
unless test_suite
|
349
240
|
Datadog.logger.debug do
|
350
241
|
"Trying to fix test suite for test [#{test.name}] but no single test suite is running."
|
@@ -361,22 +252,6 @@ module Datadog
|
|
361
252
|
test.set_tag(Ext::Test::TAG_SUITE, test_suite.name)
|
362
253
|
end
|
363
254
|
|
364
|
-
def start_datadog_tracer_span(span_name, span_options, &block)
|
365
|
-
if block
|
366
|
-
Datadog::Tracing.trace(span_name, **span_options) do |tracer_span, trace|
|
367
|
-
set_trace_origin(trace)
|
368
|
-
|
369
|
-
yield tracer_span
|
370
|
-
end
|
371
|
-
else
|
372
|
-
tracer_span = Datadog::Tracing.trace(span_name, **span_options)
|
373
|
-
trace = Datadog::Tracing.active_trace
|
374
|
-
set_trace_origin(trace)
|
375
|
-
|
376
|
-
tracer_span
|
377
|
-
end
|
378
|
-
end
|
379
|
-
|
380
255
|
def validate_test_suite_level_visibility_correctness(test)
|
381
256
|
return unless test_suite_level_visibility_enabled
|
382
257
|
|
@@ -401,21 +276,6 @@ module Datadog
|
|
401
276
|
end
|
402
277
|
end
|
403
278
|
end
|
404
|
-
|
405
|
-
# TODO: use kind of event system to notify about test finished?
|
406
|
-
def on_test_finished(test)
|
407
|
-
@test_optimisation.stop_coverage(test)
|
408
|
-
@test_optimisation.count_skipped_test(test)
|
409
|
-
end
|
410
|
-
|
411
|
-
def on_test_started(test)
|
412
|
-
@test_optimisation.mark_if_skippable(test)
|
413
|
-
@test_optimisation.start_coverage(test)
|
414
|
-
end
|
415
|
-
|
416
|
-
def on_test_session_finished(test_session)
|
417
|
-
@test_optimisation.write_test_session_tags(test_session)
|
418
|
-
end
|
419
279
|
end
|
420
280
|
end
|
421
281
|
end
|