Skip to content

Commit 0cfa932

Browse files
committed
remove get_metric_value in favor of metrics fixture
1 parent a408b2a commit 0cfa932

2 files changed

Lines changed: 35 additions & 92 deletions

File tree

tests/test_path_rmdir.py

Lines changed: 35 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,16 @@
44
import pytest
55

66
from event import Event, EventType, Process
7-
from utils import get_metric_value
87

98

10-
def get_inode_removed_count(fact_config):
11-
"""
12-
Query Prometheus metrics to get the count of removed inodes.
13-
14-
Args:
15-
fact_config: The fact configuration tuple (config dict, config file path).
16-
17-
Returns:
18-
The current value of host_scanner_scan{label="InodeRemoved"} metric.
19-
"""
20-
value = get_metric_value(fact_config, "host_scanner_scan", {"label": "InodeRemoved"})
21-
return int(value) if value is not None else 0
22-
23-
24-
def get_kernel_rmdir_processed(fact_config):
25-
"""
26-
Query Prometheus metrics to get the count of processed (non-ignored) rmdir events.
27-
28-
Args:
29-
fact_config: The fact configuration tuple (config dict, config file path).
30-
31-
Returns:
32-
The difference between Total and Ignored kernel_path_rmdir_events.
33-
"""
34-
total_str = get_metric_value(fact_config, "kernel_path_rmdir_events", {"label": "Total"})
35-
ignored_str = get_metric_value(fact_config, "kernel_path_rmdir_events", {"label": "Ignored"})
9+
def get_inode_removed_count(metrics):
10+
return metrics.snapshot().get("host_scanner_scan", label="InodeRemoved")
3611

37-
total = int(total_str) if total_str is not None else 0
38-
ignored = int(ignored_str) if ignored_str is not None else 0
3912

13+
def get_kernel_rmdir_processed(metrics):
14+
ss = metrics.snapshot()
15+
total = ss.get("kernel_path_rmdir_events", label="Total")
16+
ignored = ss.get("kernel_path_rmdir_events", label="Ignored")
4017
return total - ignored
4118

4219

@@ -46,7 +23,7 @@ def get_kernel_rmdir_processed(fact_config):
4623
pytest.param('файл', id='Cyrillic'),
4724
pytest.param('日本語', id='Japanese'),
4825
])
49-
def test_rmdir_empty(monitored_dir, server, fact_config, dirname):
26+
def test_rmdir_empty(monitored_dir, server, metrics, dirname):
5027
"""
5128
Tests that removing an empty directory properly cleans up inode tracking.
5229
@@ -60,14 +37,14 @@ def test_rmdir_empty(monitored_dir, server, fact_config, dirname):
6037
Args:
6138
monitored_dir: Temporary directory path for creating the test directory.
6239
server: The server instance to communicate with.
63-
fact_config: The fact configuration.
40+
metrics: The metrics client fixture.
6441
dirname: Directory name to test (including UTF-8 variants).
6542
"""
6643
process = Process.from_proc()
6744

6845
# Get baseline metric counts
69-
initial_inode_removed = get_inode_removed_count(fact_config)
70-
initial_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
46+
initial_inode_removed = get_inode_removed_count(metrics)
47+
initial_kernel_rmdir = get_kernel_rmdir_processed(metrics)
7148

7249
# Create a directory
7350
test_dir = os.path.join(monitored_dir, dirname)
@@ -94,7 +71,7 @@ def test_rmdir_empty(monitored_dir, server, fact_config, dirname):
9471
server.wait_events([e2])
9572

9673
# Check that file deletion incremented the metric by exactly 1
97-
count_after_file = get_inode_removed_count(fact_config)
74+
count_after_file = get_inode_removed_count(metrics)
9875
file_delta = count_after_file - initial_inode_removed
9976
assert file_delta == 1, \
10077
f"Expected exactly 1 inode removed for file deletion, got {file_delta}"
@@ -103,8 +80,8 @@ def test_rmdir_empty(monitored_dir, server, fact_config, dirname):
10380
os.rmdir(test_dir)
10481

10582
# Check metrics after directory deletion
106-
final_inode_removed = get_inode_removed_count(fact_config)
107-
final_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
83+
final_inode_removed = get_inode_removed_count(metrics)
84+
final_kernel_rmdir = get_kernel_rmdir_processed(metrics)
10885

10986
inode_delta = final_inode_removed - initial_inode_removed
11087
kernel_delta = final_kernel_rmdir - initial_kernel_rmdir
@@ -115,7 +92,7 @@ def test_rmdir_empty(monitored_dir, server, fact_config, dirname):
11592
f"Expected exactly 1 kernel rmdir event processed, got {kernel_delta}"
11693

11794

118-
def test_rmdir_recursive(monitored_dir, server, fact_config):
95+
def test_rmdir_recursive(monitored_dir, server, metrics):
11996
"""
12097
Tests that removing a directory tree recursively cleans up all inode tracking.
12198
@@ -130,13 +107,13 @@ def test_rmdir_recursive(monitored_dir, server, fact_config):
130107
Args:
131108
monitored_dir: Temporary directory path for creating test directories.
132109
server: The server instance to communicate with.
133-
fact_config: The fact configuration.
110+
metrics: The metrics client fixture.
134111
"""
135112
process = Process.from_proc()
136113

137114
# Get baseline metric counts
138-
initial_inode_removed = get_inode_removed_count(fact_config)
139-
initial_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
115+
initial_inode_removed = get_inode_removed_count(metrics)
116+
initial_kernel_rmdir = get_kernel_rmdir_processed(metrics)
140117

141118
# Create nested directories
142119
level1 = os.path.join(monitored_dir, 'level1')
@@ -186,8 +163,8 @@ def test_rmdir_recursive(monitored_dir, server, fact_config):
186163
server.wait_events(unlink_events)
187164

188165
# Check that all inodes and kernel events were tracked
189-
final_inode_removed = get_inode_removed_count(fact_config)
190-
final_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
166+
final_inode_removed = get_inode_removed_count(metrics)
167+
final_kernel_rmdir = get_kernel_rmdir_processed(metrics)
191168

192169
inode_delta = final_inode_removed - initial_inode_removed
193170
kernel_delta = final_kernel_rmdir - initial_kernel_rmdir
@@ -198,7 +175,7 @@ def test_rmdir_recursive(monitored_dir, server, fact_config):
198175
f"Expected exactly 3 kernel rmdir events processed, got {kernel_delta}"
199176

200177

201-
def test_rmdir_ignored(monitored_dir, ignored_dir, server, fact_config):
178+
def test_rmdir_ignored(monitored_dir, ignored_dir, server, metrics):
202179
"""
203180
Tests that directories removed outside monitored paths don't affect tracking.
204181
@@ -208,13 +185,13 @@ def test_rmdir_ignored(monitored_dir, ignored_dir, server, fact_config):
208185
monitored_dir: Temporary directory path that is monitored.
209186
ignored_dir: Temporary directory path that is not monitored.
210187
server: The server instance to communicate with.
211-
fact_config: The fact configuration.
188+
metrics: The metrics client fixture.
212189
"""
213190
process = Process.from_proc()
214191

215192
# Get baseline metric counts
216-
initial_inode_removed = get_inode_removed_count(fact_config)
217-
initial_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
193+
initial_inode_removed = get_inode_removed_count(metrics)
194+
initial_kernel_rmdir = get_kernel_rmdir_processed(metrics)
218195

219196
# Create directory in ignored path
220197
ignored_subdir = os.path.join(ignored_dir, 'ignored_subdir')
@@ -228,8 +205,8 @@ def test_rmdir_ignored(monitored_dir, ignored_dir, server, fact_config):
228205
os.rmdir(ignored_subdir)
229206

230207
# Metrics should not have changed
231-
inode_after_ignored = get_inode_removed_count(fact_config)
232-
kernel_after_ignored = get_kernel_rmdir_processed(fact_config)
208+
inode_after_ignored = get_inode_removed_count(metrics)
209+
kernel_after_ignored = get_kernel_rmdir_processed(metrics)
233210
assert inode_after_ignored == initial_inode_removed, \
234211
f"Ignored path operations should not increment inode_removed metric"
235212
assert kernel_after_ignored == initial_kernel_rmdir, \
@@ -260,8 +237,8 @@ def test_rmdir_ignored(monitored_dir, ignored_dir, server, fact_config):
260237
server.wait_events(deletion_events)
261238

262239
# Metrics should have incremented by exactly 2 inodes and 1 kernel rmdir
263-
final_inode_removed = get_inode_removed_count(fact_config)
264-
final_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
240+
final_inode_removed = get_inode_removed_count(metrics)
241+
final_kernel_rmdir = get_kernel_rmdir_processed(metrics)
265242

266243
inode_delta = final_inode_removed - initial_inode_removed
267244
kernel_delta = final_kernel_rmdir - initial_kernel_rmdir
@@ -272,7 +249,7 @@ def test_rmdir_ignored(monitored_dir, ignored_dir, server, fact_config):
272249
f"Expected exactly 1 kernel rmdir event processed, got {kernel_delta}"
273250

274251

275-
def test_rmdir_with_parent_inode(monitored_dir, server, fact_config):
252+
def test_rmdir_with_parent_inode(monitored_dir, server, metrics):
276253
"""
277254
Tests that directory deletion properly handles parent inode relationships.
278255
@@ -282,13 +259,13 @@ def test_rmdir_with_parent_inode(monitored_dir, server, fact_config):
282259
Args:
283260
monitored_dir: Temporary directory path for creating test directories.
284261
server: The server instance to communicate with.
285-
fact_config: The fact configuration.
262+
metrics: The metrics client fixture.
286263
"""
287264
process = Process.from_proc()
288265

289266
# Get baseline metric counts
290-
initial_inode_removed = get_inode_removed_count(fact_config)
291-
initial_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
267+
initial_inode_removed = get_inode_removed_count(metrics)
268+
initial_kernel_rmdir = get_kernel_rmdir_processed(metrics)
292269

293270
# Create a subdirectory
294271
subdir = os.path.join(monitored_dir, 'subdir')
@@ -325,8 +302,8 @@ def test_rmdir_with_parent_inode(monitored_dir, server, fact_config):
325302
server.wait_events(deletion_events)
326303

327304
# Check metrics incremented (file + subdir)
328-
inode_after_subdir = get_inode_removed_count(fact_config)
329-
kernel_after_subdir = get_kernel_rmdir_processed(fact_config)
305+
inode_after_subdir = get_inode_removed_count(metrics)
306+
kernel_after_subdir = get_kernel_rmdir_processed(metrics)
330307

331308
inode_delta_subdir = inode_after_subdir - initial_inode_removed
332309
kernel_delta_subdir = kernel_after_subdir - initial_kernel_rmdir
@@ -356,8 +333,8 @@ def test_rmdir_with_parent_inode(monitored_dir, server, fact_config):
356333

357334
# Final metric check: should be 3 total inodes (test_file, subdir, new_file)
358335
# and 1 total kernel rmdir (subdir)
359-
final_inode_removed = get_inode_removed_count(fact_config)
360-
final_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
336+
final_inode_removed = get_inode_removed_count(metrics)
337+
final_kernel_rmdir = get_kernel_rmdir_processed(metrics)
361338

362339
inode_total_delta = final_inode_removed - initial_inode_removed
363340
kernel_total_delta = final_kernel_rmdir - initial_kernel_rmdir

tests/utils.py

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import os
22
import re
33

4-
import requests
5-
64

75
def join_path_with_filename(directory, filename):
86
"""
@@ -73,35 +71,3 @@ def rust_style_join(args):
7371
args: The string to quote
7472
"""
7573
return ' '.join(rust_style_quote(arg) for arg in args)
76-
77-
78-
def get_metric_value(fact_config, metric_name, labels=None):
79-
"""
80-
Query Prometheus metrics endpoint to get the value of a metric.
81-
82-
Args:
83-
fact_config: The fact configuration tuple (config dict, config file path).
84-
metric_name: Name of the metric to query (e.g., "host_scanner_scan").
85-
labels: Optional dict of label filters (e.g., {"label": "InodeRemoved"}).
86-
87-
Returns:
88-
The metric value as a string if found, None otherwise.
89-
"""
90-
config, _ = fact_config
91-
response = requests.get(f'http://{config["endpoint"]["address"]}/metrics')
92-
assert response.status_code == 200
93-
94-
labels = labels or {}
95-
96-
for line in response.text.split('\n'):
97-
if metric_name not in line:
98-
continue
99-
100-
# Check if all label filters match
101-
if all(f'{k}="{v}"' in line for k, v in labels.items()):
102-
# Format: metric_name{label="value"} 42
103-
parts = line.split()
104-
if len(parts) >= 2:
105-
return parts[-1]
106-
107-
return None

0 commit comments

Comments
 (0)