Skip to content

Commit bb90878

Browse files
seedspiritclaude
andcommitted
test(BA-5824): remove trivial test_types.py and consolidate with parametrize
- Remove tests/unit/manager/data/metric/test_types.py entirely - Consolidate metric type classification tests into single parametrized test - Merge rate/diff query preset tests into parametrized test - Merge diff/rate live stat filter tests into parametrized test Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent bac2b5a commit bb90878

4 files changed

Lines changed: 49 additions & 302 deletions

File tree

tests/unit/manager/clients/prometheus/test_fixed_query_builder.py

Lines changed: 49 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,34 @@ class TestGetContainerMetricType:
2525
def builder(self) -> FixedQueryBuilder:
2626
return FixedQueryBuilder("1m")
2727

28-
def test_gauge_for_unknown_metric(self, builder: FixedQueryBuilder) -> None:
29-
label = ContainerMetricOptionalLabel(value_type=ValueType.CURRENT)
30-
assert builder.get_container_metric_type("mem", label) == MetricType.GAUGE
31-
32-
def test_gauge_for_capacity_value_type(self, builder: FixedQueryBuilder) -> None:
33-
"""cpu_util with CAPACITY value_type should be GAUGE, not DIFF."""
34-
label = ContainerMetricOptionalLabel(value_type=ValueType.CAPACITY)
35-
assert builder.get_container_metric_type("cpu_util", label) == MetricType.GAUGE
36-
37-
@pytest.mark.parametrize("metric_name", ["net_rx", "net_tx"])
38-
def test_rate_for_network_metrics(self, builder: FixedQueryBuilder, metric_name: str) -> None:
39-
label = ContainerMetricOptionalLabel(value_type=ValueType.CURRENT)
40-
assert builder.get_container_metric_type(metric_name, label) == MetricType.RATE
41-
42-
def test_rate_takes_precedence_over_value_type(self, builder: FixedQueryBuilder) -> None:
43-
"""net_rx is RATE regardless of value_type."""
44-
label = ContainerMetricOptionalLabel(value_type=ValueType.CAPACITY)
45-
assert builder.get_container_metric_type("net_rx", label) == MetricType.RATE
46-
47-
def test_diff_for_cpu_util_with_current(self, builder: FixedQueryBuilder) -> None:
48-
label = ContainerMetricOptionalLabel(value_type=ValueType.CURRENT)
49-
assert builder.get_container_metric_type("cpu_util", label) == MetricType.DIFF
28+
@pytest.mark.parametrize(
29+
("metric_name", "value_type", "expected"),
30+
[
31+
("mem", ValueType.CURRENT, MetricType.GAUGE),
32+
("cpu_util", ValueType.CAPACITY, MetricType.GAUGE),
33+
("net_rx", ValueType.CURRENT, MetricType.RATE),
34+
("net_tx", ValueType.CURRENT, MetricType.RATE),
35+
("net_rx", ValueType.CAPACITY, MetricType.RATE),
36+
("cpu_util", ValueType.CURRENT, MetricType.DIFF),
37+
],
38+
ids=[
39+
"gauge-unknown-metric",
40+
"gauge-capacity-overrides-diff",
41+
"rate-net_rx",
42+
"rate-net_tx",
43+
"rate-precedence-over-value_type",
44+
"diff-cpu_util-current",
45+
],
46+
)
47+
def test_metric_type_classification(
48+
self,
49+
builder: FixedQueryBuilder,
50+
metric_name: str,
51+
value_type: ValueType,
52+
expected: MetricType,
53+
) -> None:
54+
label = ContainerMetricOptionalLabel(value_type=value_type)
55+
assert builder.get_container_metric_type(metric_name, label) == expected
5056

5157

5258
class TestGetContainerMetricQuery:
@@ -61,26 +67,18 @@ def test_gauge_query_preset(self, builder: FixedQueryBuilder) -> None:
6167

6268
assert isinstance(result, MetricPreset)
6369
assert result.window == "5m"
64-
assert "container_metric_name" in result.labels
6570
assert result.labels["container_metric_name"] == LabelMatcher.exact("mem")
6671
assert result.labels["value_type"] == LabelMatcher.exact("current")
6772
assert "value_type" in result.group_by
6873

69-
def test_rate_query_preset(self, builder: FixedQueryBuilder) -> None:
74+
@pytest.mark.parametrize("metric_name", ["net_rx", "cpu_util"])
75+
def test_rate_based_query_uses_rate_function(
76+
self, builder: FixedQueryBuilder, metric_name: str
77+
) -> None:
7078
label = ContainerMetricOptionalLabel(value_type=ValueType.CURRENT)
7179

72-
result = builder.get_container_metric_query("net_rx", label)
80+
rendered = builder.get_container_metric_query(metric_name, label).render()
7381

74-
rendered = result.render()
75-
assert "rate(" in rendered
76-
assert "[5m]" in rendered
77-
78-
def test_diff_query_preset(self, builder: FixedQueryBuilder) -> None:
79-
label = ContainerMetricOptionalLabel(value_type=ValueType.CURRENT)
80-
81-
result = builder.get_container_metric_query("cpu_util", label)
82-
83-
rendered = result.render()
8482
assert "rate(" in rendered
8583
assert "[5m]" in rendered
8684

@@ -93,7 +91,6 @@ def test_query_with_optional_labels(self, builder: FixedQueryBuilder) -> None:
9391

9492
result = builder.get_container_metric_query("mem", label)
9593

96-
assert "kernel_id" in result.labels
9794
assert result.labels["kernel_id"] == LabelMatcher.exact(str(kid))
9895
assert "kernel_id" in result.group_by
9996

@@ -106,38 +103,31 @@ def test_kernel_id_regex_filter(self) -> None:
106103

107104
result = builder.get_container_live_stat_queries([kid1, kid2])
108105

109-
gauge_labels = result.gauge.labels
110-
assert "kernel_id" in gauge_labels
111-
matcher = gauge_labels["kernel_id"]
106+
matcher = result.gauge.labels["kernel_id"]
112107
assert matcher.operator == LabelOperator.REGEX
113108
assert str(kid1) in matcher.value
114109
assert str(kid2) in matcher.value
115110

116-
def test_diff_filters_by_metric_name_and_value_type(self) -> None:
117-
builder = FixedQueryBuilder("1m")
118-
kid = KernelId(UUID("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"))
119-
120-
result = builder.get_container_live_stat_queries([kid])
121-
122-
diff_labels = result.diff.labels
123-
assert "container_metric_name" in diff_labels
124-
assert diff_labels["container_metric_name"].operator == LabelOperator.REGEX
125-
assert "cpu_util" in diff_labels["container_metric_name"].value
126-
assert "value_type" in diff_labels
127-
assert diff_labels["value_type"] == LabelMatcher.exact("current")
128-
129-
def test_rate_filters_by_metric_name_and_value_type(self) -> None:
111+
@pytest.mark.parametrize(
112+
("preset_attr", "expected_metrics"),
113+
[
114+
("diff", ["cpu_util"]),
115+
("rate", ["net_rx", "net_tx"]),
116+
],
117+
)
118+
def test_preset_filters_by_metric_name_and_value_type(
119+
self, preset_attr: str, expected_metrics: list[str]
120+
) -> None:
130121
builder = FixedQueryBuilder("1m")
131122
kid = KernelId(UUID("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"))
132123

133124
result = builder.get_container_live_stat_queries([kid])
125+
labels = getattr(result, preset_attr).labels
134126

135-
rate_labels = result.rate.labels
136-
assert "container_metric_name" in rate_labels
137-
assert "net_rx" in rate_labels["container_metric_name"].value
138-
assert "net_tx" in rate_labels["container_metric_name"].value
139-
assert "value_type" in rate_labels
140-
assert rate_labels["value_type"] == LabelMatcher.exact("current")
127+
assert labels["container_metric_name"].operator == LabelOperator.REGEX
128+
for metric in expected_metrics:
129+
assert metric in labels["container_metric_name"].value
130+
assert labels["value_type"] == LabelMatcher.exact("current")
141131

142132
def test_gauge_has_no_metric_name_filter(self) -> None:
143133
builder = FixedQueryBuilder("1m")

tests/unit/manager/data/metric/BUILD

Lines changed: 0 additions & 1 deletion
This file was deleted.

tests/unit/manager/data/metric/__init__.py

Whitespace-only changes.

tests/unit/manager/data/metric/test_types.py

Lines changed: 0 additions & 242 deletions
This file was deleted.

0 commit comments

Comments
 (0)