Class: Datadog::CI::TestVisibility::Component
- Inherits:
-
Object
- Object
- Datadog::CI::TestVisibility::Component
- Includes:
- Core::Utils::Forking
- Defined in:
- lib/datadog/ci/test_visibility/component.rb
Overview
Core functionality of the library: tracing tests’ execution
Instance Attribute Summary collapse
-
#known_tests ⇒ Object
readonly
Returns the value of attribute known_tests.
-
#known_tests_enabled ⇒ Object
readonly
Returns the value of attribute known_tests_enabled.
-
#logical_test_session_name ⇒ Object
readonly
Returns the value of attribute logical_test_session_name.
-
#test_suite_level_visibility_enabled ⇒ Object
readonly
Returns the value of attribute test_suite_level_visibility_enabled.
Instance Method Summary collapse
- #active_span ⇒ Object
- #active_test ⇒ Object
- #active_test_module ⇒ Object
- #active_test_session ⇒ Object
- #active_test_suite(test_suite_name) ⇒ Object
- #configure(library_configuration, test_session) ⇒ Object
- #deactivate_test ⇒ Object
- #deactivate_test_module ⇒ Object
- #deactivate_test_session ⇒ Object
- #deactivate_test_suite(test_suite_name) ⇒ Object
-
#initialize(known_tests_client:, test_suite_level_visibility_enabled: false, codeowners: Codeowners::Parser.new(Git::LocalRepository.root).parse, logical_test_session_name: nil) ⇒ Component
constructor
A new instance of Component.
- #itr_enabled? ⇒ Boolean
- #shutdown! ⇒ Object
- #start_test_module(test_module_name, service: nil, tags: {}) ⇒ Object
- #start_test_session(service: nil, tags: {}, estimated_total_tests_count: 0) ⇒ Object
- #start_test_suite(test_suite_name, service: nil, tags: {}) ⇒ Object
- #tests_skipped_by_tia_count ⇒ Object
- #total_tests_count ⇒ Object
- #trace(span_name, type: "span", tags: {}, &block) ⇒ Object
- #trace_test(test_name, test_suite_name, service: nil, tags: {}, &block) ⇒ Object
Constructor Details
#initialize(known_tests_client:, test_suite_level_visibility_enabled: false, codeowners: Codeowners::Parser.new(Git::LocalRepository.root).parse, logical_test_session_name: nil) ⇒ Component
Returns a new instance of Component.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 29 def initialize( known_tests_client:, test_suite_level_visibility_enabled: false, codeowners: Codeowners::Parser.new(Git::LocalRepository.root).parse, logical_test_session_name: nil ) @test_suite_level_visibility_enabled = test_suite_level_visibility_enabled @context = Context.new @codeowners = codeowners @logical_test_session_name = logical_test_session_name # "Known tests" feature fetches a list of all tests known to Datadog for this repository # and uses this list to determine if a test is new or not. New tests are marked with "test.is_new" tag. @known_tests_enabled = false @known_tests_client = known_tests_client @known_tests = Set.new end |
Instance Attribute Details
#known_tests ⇒ Object (readonly)
Returns the value of attribute known_tests.
26 27 28 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 26 def known_tests @known_tests end |
#known_tests_enabled ⇒ Object (readonly)
Returns the value of attribute known_tests_enabled.
26 27 28 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 26 def known_tests_enabled @known_tests_enabled end |
#logical_test_session_name ⇒ Object (readonly)
Returns the value of attribute logical_test_session_name.
26 27 28 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 26 def logical_test_session_name @logical_test_session_name end |
#test_suite_level_visibility_enabled ⇒ Object (readonly)
Returns the value of attribute test_suite_level_visibility_enabled.
26 27 28 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 26 def test_suite_level_visibility_enabled @test_suite_level_visibility_enabled end |
Instance Method Details
#active_span ⇒ Object
117 118 119 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 117 def active_span @context.active_span end |
#active_test ⇒ Object
121 122 123 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 121 def active_test @context.active_test end |
#active_test_module ⇒ Object
129 130 131 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 129 def active_test_module @context.active_test_module end |
#active_test_session ⇒ Object
125 126 127 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 125 def active_test_session @context.active_test_session end |
#active_test_suite(test_suite_name) ⇒ Object
133 134 135 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 133 def active_test_suite(test_suite_name) maybe_remote_context.active_test_suite(test_suite_name) end |
#configure(library_configuration, test_session) ⇒ Object
49 50 51 52 53 54 55 56 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 49 def configure(library_configuration, test_session) return unless test_suite_level_visibility_enabled if library_configuration.known_tests_enabled? @known_tests_enabled = true fetch_known_tests(test_session) end end |
#deactivate_test ⇒ Object
137 138 139 140 141 142 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 137 def deactivate_test test = active_test on_test_finished(test) if test @context.deactivate_test end |
#deactivate_test_module ⇒ Object
151 152 153 154 155 156 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 151 def deactivate_test_module test_module = active_test_module on_test_module_finished(test_module) if test_module @context.deactivate_test_module end |
#deactivate_test_session ⇒ Object
144 145 146 147 148 149 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 144 def deactivate_test_session test_session = active_test_session on_test_session_finished(test_session) if test_session @context.deactivate_test_session end |
#deactivate_test_suite(test_suite_name) ⇒ Object
158 159 160 161 162 163 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 158 def deactivate_test_suite(test_suite_name) test_suite = active_test_suite(test_suite_name) on_test_suite_finished(test_suite) if test_suite maybe_remote_context.deactivate_test_suite(test_suite_name) end |
#itr_enabled? ⇒ Boolean
173 174 175 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 173 def itr_enabled? test_optimisation.enabled? end |
#shutdown! ⇒ Object
177 178 179 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 177 def shutdown! # noop, there is no thread owned by test visibility component end |
#start_test_module(test_module_name, service: nil, tags: {}) ⇒ Object
70 71 72 73 74 75 76 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 70 def start_test_module(test_module_name, service: nil, tags: {}) return skip_tracing unless test_suite_level_visibility_enabled test_module = @context.start_test_module(test_module_name, service: service, tags: ) on_test_module_started(test_module) test_module end |
#start_test_session(service: nil, tags: {}, estimated_total_tests_count: 0) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 58 def start_test_session(service: nil, tags: {}, estimated_total_tests_count: 0) return skip_tracing unless test_suite_level_visibility_enabled start_drb_service test_session = @context.start_test_session(service: service, tags: ) test_session.estimated_total_tests_count = estimated_total_tests_count on_test_session_started(test_session) test_session end |
#start_test_suite(test_suite_name, service: nil, tags: {}) ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 78 def start_test_suite(test_suite_name, service: nil, tags: {}) return skip_tracing unless test_suite_level_visibility_enabled test_suite = maybe_remote_context.start_test_suite(test_suite_name, service: service, tags: ) on_test_suite_started(test_suite) test_suite end |
#tests_skipped_by_tia_count ⇒ Object
169 170 171 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 169 def tests_skipped_by_tia_count maybe_remote_context.tests_skipped_by_tia_count end |
#total_tests_count ⇒ Object
165 166 167 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 165 def total_tests_count maybe_remote_context.total_tests_count end |
#trace(span_name, type: "span", tags: {}, &block) ⇒ Object
107 108 109 110 111 112 113 114 115 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 107 def trace(span_name, type: "span", tags: {}, &block) if block @context.trace(span_name, type: type, tags: ) do |span| block.call(span) end else @context.trace(span_name, type: type, tags: ) end end |
#trace_test(test_name, test_suite_name, service: nil, tags: {}, &block) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/datadog/ci/test_visibility/component.rb', line 86 def trace_test(test_name, test_suite_name, service: nil, tags: {}, &block) test_suite = maybe_remote_context.active_test_suite(test_suite_name) [Ext::Test::TAG_SUITE] ||= test_suite_name if block @context.trace_test(test_name, test_suite, service: service, tags: ) do |test| subscribe_to_after_stop_event(test.tracer_span) on_test_started(test) res = block.call(test) on_test_finished(test) res end else test = @context.trace_test(test_name, test_suite, service: service, tags: ) subscribe_to_after_stop_event(test.tracer_span) on_test_started(test) test end end |