Skip to content

Commit 3b5adcb

Browse files
restore the hacks
1 parent db1233d commit 3b5adcb

File tree

10 files changed

+251
-172
lines changed

10 files changed

+251
-172
lines changed

ddtrace/contrib/internal/pytest/_plugin_v2.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
from pathlib import Path
23
import re
34
import typing as t
@@ -59,6 +60,7 @@
5960
from ddtrace.internal.test_visibility.api import InternalTestSession
6061
from ddtrace.internal.test_visibility.api import InternalTestSuite
6162
from ddtrace.internal.test_visibility.coverage_lines import CoverageLines
63+
from ddtrace.internal.utils.formats import asbool
6264
from ddtrace.vendor.debtcollector import deprecate
6365

6466

@@ -121,6 +123,10 @@ def _handle_test_management(item, test_id):
121123
is_quarantined = InternalTest.is_quarantined_test(test_id)
122124
is_disabled = InternalTest.is_disabled_test(test_id)
123125

126+
if is_quarantined and asbool(os.getenv("_DD_TEST_SKIP_QUARANTINED_TESTS")):
127+
# For intenal use: treat quarantined tests as disabled.
128+
is_disabled = True
129+
124130
if is_disabled:
125131
# A test that is both disabled and quarantined should be skipped just like a regular disabled test.
126132
# It should still have both disabled and quarantined event tags, though.

ddtrace/internal/ci_visibility/api/_base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ def _finish_span(self, override_finish_time: Optional[float] = None) -> None:
213213
self._session_settings.test_management_settings is not None
214214
and self._session_settings.test_management_settings.enabled
215215
):
216-
self._set_quarantine_tags()
216+
self._set_test_management_tags()
217217

218218
# Allow items to potentially overwrite default and hierarchy tags.
219219
self._set_item_tags()
@@ -280,7 +280,7 @@ def _set_atr_tags(self) -> None:
280280
"""ATR tags are only set at the test level"""
281281
pass
282282

283-
def _set_quarantine_tags(self) -> None:
283+
def _set_test_management_tags(self) -> None:
284284
"""Quarantine tags are only set at the test or session level"""
285285
pass
286286

ddtrace/internal/ci_visibility/api/_session.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def _set_efd_tags(self):
7272
elif self.efd_is_faulty_session():
7373
self.set_tag(TEST_EFD_ABORT_REASON, "faulty")
7474

75-
def _set_quarantine_tags(self):
75+
def _set_test_management_tags(self):
7676
self.set_tag(TEST_SESSION_QUARANTINE_ENABLED, True)
7777

7878
def _set_itr_tags(self, itr_enabled: bool) -> None:

ddtrace/internal/ci_visibility/api/_test.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
from ddtrace.internal.ci_visibility.constants import TEST
2323
from ddtrace.internal.ci_visibility.constants import TEST_EFD_ABORT_REASON
2424
from ddtrace.internal.ci_visibility.constants import TEST_HAS_FAILED_ALL_RETRIES
25-
from ddtrace.internal.ci_visibility.constants import TEST_IS_NEW
2625
from ddtrace.internal.ci_visibility.constants import TEST_IS_DISABLED
26+
from ddtrace.internal.ci_visibility.constants import TEST_IS_NEW
2727
from ddtrace.internal.ci_visibility.constants import TEST_IS_QUARANTINED
2828
from ddtrace.internal.ci_visibility.constants import TEST_IS_RETRY
2929
from ddtrace.internal.ci_visibility.telemetry.constants import EVENT_TYPES
@@ -133,9 +133,11 @@ def _set_atr_tags(self) -> None:
133133
if self._atr_is_retry:
134134
self.set_tag(TEST_IS_RETRY, self._atr_is_retry)
135135

136-
def _set_quarantine_tags(self) -> None:
136+
def _set_test_management_tags(self) -> None:
137137
if self._is_quarantined:
138138
self.set_tag(TEST_IS_QUARANTINED, self._is_quarantined)
139+
if self._is_disabled:
140+
self.set_tag(TEST_IS_DISABLED, self._is_disabled)
139141

140142
def _set_span_tags(self) -> None:
141143
"""This handles setting tags that can't be properly stored in self._tags

ddtrace/internal/ci_visibility/constants.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,4 @@ class REQUESTS_MODE(IntEnum):
8989
TEST_EFD_ENABLED = "test.early_flake.enabled"
9090
TEST_HAS_FAILED_ALL_RETRIES = "test.has_failed_all_retries"
9191

92-
TEST_SESSION_QUARANTINE_ENABLED = "test_session.quarantine.enabled"
92+
TEST_SESSION_QUARANTINE_ENABLED = "test.test_management.enabled"

ddtrace/internal/ci_visibility/telemetry/git.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def record_settings_response(
6262
itr_enabled: Optional[bool] = False,
6363
flaky_test_retries_enabled: Optional[bool] = False,
6464
early_flake_detection_enabled: Optional[bool] = False,
65-
quarantine_enabled: Optional[bool] = False,
65+
test_management_enabled: Optional[bool] = False,
6666
) -> None:
6767
log.debug(
6868
"Recording settings telemetry:"
@@ -72,12 +72,14 @@ def record_settings_response(
7272
", itr_enabled=%s"
7373
", flaky_test_retries_enabled=%s"
7474
", early_flake_detection_enabled=%s",
75+
", test_management_enabled=%s",
7576
coverage_enabled,
7677
skipping_enabled,
7778
require_git,
7879
itr_enabled,
7980
flaky_test_retries_enabled,
8081
early_flake_detection_enabled,
82+
test_management_enabled,
8183
)
8284
# Telemetry "booleans" are true if they exist, otherwise false
8385
response_tags = []
@@ -93,8 +95,8 @@ def record_settings_response(
9395
response_tags.append(("flaky_test_retries_enabled", "true"))
9496
if early_flake_detection_enabled:
9597
response_tags.append(("early_flake_detection_enabled", "true"))
96-
if quarantine_enabled:
97-
response_tags.append(("quarantine_enabled", "true"))
98+
if test_management_enabled:
99+
response_tags.append(("test_management_enabled", "true"))
98100

99101
if response_tags:
100102
telemetry_writer.add_count_metric(

ddtrace/internal/test_visibility/api.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,7 @@ def is_quarantined_test(item_id: InternalTestId) -> bool:
189189
@_catch_and_log_exceptions
190190
def is_disabled_test(item_id: InternalTestId) -> bool:
191191
log.debug("Checking if test %s is disabled", item_id)
192-
is_disabled = bool(
193-
core.dispatch_with_results("test_visibility.test.is_disabled", (item_id,)).is_disabled.value
194-
)
192+
is_disabled = bool(core.dispatch_with_results("test_visibility.test.is_disabled", (item_id,)).is_disabled.value)
195193
log.debug("Test %s is disabled: %s", item_id, is_disabled)
196194
return is_disabled
197195

tests/ci_visibility/api_client/test_ci_visibility_api_client_test_management_responses.py

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,30 @@ def test_api_client_test_management_tests_parsed(self):
5757
mock_response = Response(200, json.dumps(response_dict))
5858

5959
expected_tests = {
60-
_make_fqdn_internal_test_id("module1", "suite1.py", "test1"): TestProperties(quarantined=True, disabled=False),
61-
_make_fqdn_internal_test_id("module1", "suite1.py", "test2"): TestProperties(quarantined=False, disabled=False),
62-
_make_fqdn_internal_test_id("module1", "suite1.py", "test3"): TestProperties(quarantined=False, disabled=False),
63-
_make_fqdn_internal_test_id("module1", "suite1.py", "test4"): TestProperties(quarantined=False, disabled=False),
64-
_make_fqdn_internal_test_id("module1", "suite2.py", "test1"): TestProperties(quarantined=False, disabled=True),
65-
_make_fqdn_internal_test_id("module1", "suite2.py", "test5"): TestProperties(quarantined=True, disabled=False),
66-
_make_fqdn_internal_test_id("module2", "suite1.py", "test1"): TestProperties(quarantined=False, disabled=False),
67-
_make_fqdn_internal_test_id("module2", "suite1.py", "test2"): TestProperties(quarantined=False, disabled=False),
60+
_make_fqdn_internal_test_id("module1", "suite1.py", "test1"): TestProperties(
61+
quarantined=True, disabled=False
62+
),
63+
_make_fqdn_internal_test_id("module1", "suite1.py", "test2"): TestProperties(
64+
quarantined=False, disabled=False
65+
),
66+
_make_fqdn_internal_test_id("module1", "suite1.py", "test3"): TestProperties(
67+
quarantined=False, disabled=False
68+
),
69+
_make_fqdn_internal_test_id("module1", "suite1.py", "test4"): TestProperties(
70+
quarantined=False, disabled=False
71+
),
72+
_make_fqdn_internal_test_id("module1", "suite2.py", "test1"): TestProperties(
73+
quarantined=False, disabled=True
74+
),
75+
_make_fqdn_internal_test_id("module1", "suite2.py", "test5"): TestProperties(
76+
quarantined=True, disabled=False
77+
),
78+
_make_fqdn_internal_test_id("module2", "suite1.py", "test1"): TestProperties(
79+
quarantined=False, disabled=False
80+
),
81+
_make_fqdn_internal_test_id("module2", "suite1.py", "test2"): TestProperties(
82+
quarantined=False, disabled=False
83+
),
6884
}
6985

7086
client = self._get_test_client()

0 commit comments

Comments
 (0)