|
3 | 3 | # Licensed under a 3-clause BSD style license (see LICENSE) |
4 | 4 |
|
5 | 5 | import json |
| 6 | +from unittest.mock import Mock |
6 | 7 |
|
7 | 8 | import pytest |
| 9 | +from kubernetes.client.exceptions import ApiException |
8 | 10 |
|
9 | 11 | from datadog_checks.base.stubs import tagger |
10 | 12 | from datadog_checks.dev.utils import get_metadata_metrics |
11 | 13 | from datadog_checks.kueue import KueueCheck |
12 | 14 | from datadog_checks.kueue.check import OTHER_RESOURCE_NAME, RESOURCE_NAME_MAP |
| 15 | +from datadog_checks.kueue.kube_client import KubernetesAPIClient |
13 | 16 | from datadog_checks.kueue.metrics import LOCAL_QUEUE_METRIC_MAP, METRIC_MAP, RESOURCE_METRIC_MAP |
14 | 17 |
|
15 | 18 | from .common import EXPECTED_METRIC_TAGS, UNIT_METRICS, get_fixture_path |
@@ -150,6 +153,23 @@ def test_workload_events_config_can_be_parsed_before_check(instance): |
150 | 153 | assert check.collect_workload_events is True |
151 | 154 |
|
152 | 155 |
|
| 156 | +@pytest.mark.parametrize( |
| 157 | + ('namespace', 'method_name'), |
| 158 | + [ |
| 159 | + (None, 'list_cluster_custom_object'), |
| 160 | + ('default', 'list_namespaced_custom_object'), |
| 161 | + ], |
| 162 | +) |
| 163 | +def test_workload_api_version_fallback(namespace, method_name): |
| 164 | + kube_client = object.__new__(KubernetesAPIClient) |
| 165 | + kube_client.custom_obj_client = Mock() |
| 166 | + method = getattr(kube_client.custom_obj_client, method_name) |
| 167 | + method.side_effect = [ApiException(status=404), {'items': []}] |
| 168 | + |
| 169 | + assert kube_client.list_workloads(namespace) == [] |
| 170 | + assert [call.kwargs['version'] for call in method.call_args_list] == ['v1beta2', 'v1beta1'] |
| 171 | + |
| 172 | + |
153 | 173 | class FakeKubernetesAPIClient: |
154 | 174 | def __init__(self, *workload_snapshots): |
155 | 175 | self.workload_snapshots = list(workload_snapshots) |
@@ -196,6 +216,21 @@ def test_workload_events_suppress_first_poll(dd_run_check, aggregator, instance, |
196 | 216 | assert not aggregator.events |
197 | 217 |
|
198 | 218 |
|
| 219 | +@pytest.mark.parametrize( |
| 220 | + ('spec', 'priority_class'), |
| 221 | + [ |
| 222 | + ({'priorityClassName': 'v1beta1'}, 'v1beta1'), |
| 223 | + ({'priorityClassName': 'v1beta1', 'priorityClassRef': {'name': 'v1beta2'}}, 'v1beta2'), |
| 224 | + ], |
| 225 | +) |
| 226 | +def test_workload_event_tags_priority_class(instance, spec, priority_class): |
| 227 | + check = KueueCheck('kueue', {}, [instance]) |
| 228 | + |
| 229 | + tags = check.workload_event_tags('admitted', {'spec': spec}, None) |
| 230 | + |
| 231 | + assert f'kueue_workload_priority_class:{priority_class}' in tags |
| 232 | + |
| 233 | + |
199 | 234 | def test_workload_events_transitions(dd_run_check, aggregator, instance, mock_http_response): |
200 | 235 | mock_http_response(file_path=get_fixture_path('metrics.txt')) |
201 | 236 | tagger.reset() |
|
0 commit comments