Skip to content

Commit 51905f9

Browse files
committed
Checking kernel_path_rmdir_events metrics
1 parent 8fa3248 commit 51905f9

1 file changed

Lines changed: 94 additions & 37 deletions

File tree

tests/test_path_rmdir.py

Lines changed: 94 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,25 @@ def get_inode_removed_count(fact_config):
2121
return int(value) if value is not None else 0
2222

2323

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"})
36+
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
39+
40+
return total - ignored
41+
42+
2443
@pytest.mark.parametrize("dirname", [
2544
pytest.param('testdir', id='ASCII'),
2645
pytest.param('café', id='French'),
@@ -49,8 +68,9 @@ def test_rmdir_empty(monitored_dir, server, fact_config, dirname):
4968
"""
5069
process = Process.from_proc()
5170

52-
# Get baseline metric count
53-
initial_count = get_inode_removed_count(fact_config)
71+
# Get baseline metric counts
72+
initial_inode_removed = get_inode_removed_count(fact_config)
73+
initial_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
5474

5575
# Create a directory
5676
test_dir = os.path.join(monitored_dir, dirname)
@@ -78,7 +98,7 @@ def test_rmdir_empty(monitored_dir, server, fact_config, dirname):
7898

7999
# Check that file deletion incremented the metric by exactly 1
80100
count_after_file = get_inode_removed_count(fact_config)
81-
file_delta = count_after_file - initial_count
101+
file_delta = count_after_file - initial_inode_removed
82102
assert file_delta == 1, \
83103
f"Expected exactly 1 inode removed for file deletion, got {file_delta}"
84104

@@ -91,11 +111,17 @@ def test_rmdir_empty(monitored_dir, server, fact_config, dirname):
91111

92112
server.wait_events([e3])
93113

94-
# Check that directory deletion also incremented the metric by exactly 1
95-
final_count = get_inode_removed_count(fact_config)
96-
total_delta = final_count - initial_count
97-
assert total_delta == 2, \
98-
f"Expected exactly 2 inodes removed (1 file + 1 dir), got {total_delta}"
114+
# Check that directory deletion incremented both metrics by exactly 1
115+
final_inode_removed = get_inode_removed_count(fact_config)
116+
final_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
117+
118+
inode_delta = final_inode_removed - initial_inode_removed
119+
kernel_delta = final_kernel_rmdir - initial_kernel_rmdir
120+
121+
assert inode_delta == 2, \
122+
f"Expected exactly 2 inodes removed (1 file + 1 dir), got {inode_delta}"
123+
assert kernel_delta == 1, \
124+
f"Expected exactly 1 kernel rmdir event processed, got {kernel_delta}"
99125

100126

101127
def test_rmdir_tree(monitored_dir, server, fact_config):
@@ -115,8 +141,9 @@ def test_rmdir_tree(monitored_dir, server, fact_config):
115141
"""
116142
process = Process.from_proc()
117143

118-
# Get baseline metric count
119-
initial_count = get_inode_removed_count(fact_config)
144+
# Get baseline metric counts
145+
initial_inode_removed = get_inode_removed_count(fact_config)
146+
initial_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
120147

121148
# Create nested directories
122149
level1 = os.path.join(monitored_dir, 'level1')
@@ -172,11 +199,17 @@ def test_rmdir_tree(monitored_dir, server, fact_config):
172199

173200
server.wait_events(unlink_events)
174201

175-
# Check that all inodes were removed: 3 files + 3 directories = 6 total
176-
final_count = get_inode_removed_count(fact_config)
177-
total_delta = final_count - initial_count
178-
assert total_delta == 6, \
179-
f"Expected exactly 6 inodes removed (3 files + 3 dirs), got {total_delta}"
202+
# Check that all inodes and kernel events were tracked
203+
final_inode_removed = get_inode_removed_count(fact_config)
204+
final_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
205+
206+
inode_delta = final_inode_removed - initial_inode_removed
207+
kernel_delta = final_kernel_rmdir - initial_kernel_rmdir
208+
209+
assert inode_delta == 6, \
210+
f"Expected exactly 6 inodes removed (3 files + 3 dirs), got {inode_delta}"
211+
assert kernel_delta == 3, \
212+
f"Expected exactly 3 kernel rmdir events processed, got {kernel_delta}"
180213

181214

182215
def test_rmdir_ignored(monitored_dir, ignored_dir, server, fact_config):
@@ -193,8 +226,9 @@ def test_rmdir_ignored(monitored_dir, ignored_dir, server, fact_config):
193226
"""
194227
process = Process.from_proc()
195228

196-
# Get baseline metric count
197-
initial_count = get_inode_removed_count(fact_config)
229+
# Get baseline metric counts
230+
initial_inode_removed = get_inode_removed_count(fact_config)
231+
initial_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
198232

199233
# Create directory in ignored path
200234
ignored_subdir = os.path.join(ignored_dir, 'ignored_subdir')
@@ -207,10 +241,13 @@ def test_rmdir_ignored(monitored_dir, ignored_dir, server, fact_config):
207241
os.remove(ignored_file)
208242
os.rmdir(ignored_subdir)
209243

210-
# Metric should not have changed
211-
count_after_ignored = get_inode_removed_count(fact_config)
212-
assert count_after_ignored == initial_count, \
244+
# Metrics should not have changed
245+
inode_after_ignored = get_inode_removed_count(fact_config)
246+
kernel_after_ignored = get_kernel_rmdir_processed(fact_config)
247+
assert inode_after_ignored == initial_inode_removed, \
213248
f"Ignored path operations should not increment inode_removed metric"
249+
assert kernel_after_ignored == initial_kernel_rmdir, \
250+
f"Ignored path operations should not increment kernel_rmdir_processed metric"
214251

215252
# Create and remove directory in monitored path
216253
monitored_subdir = os.path.join(monitored_dir, 'monitored_subdir')
@@ -239,11 +276,17 @@ def test_rmdir_ignored(monitored_dir, ignored_dir, server, fact_config):
239276

240277
server.wait_events(deletion_events)
241278

242-
# Metric should have incremented by exactly 2 (file + dir)
243-
final_count = get_inode_removed_count(fact_config)
244-
total_delta = final_count - initial_count
245-
assert total_delta == 2, \
246-
f"Expected exactly 2 inodes removed from monitored path, got {total_delta}"
279+
# Metrics should have incremented by exactly 2 inodes and 1 kernel rmdir
280+
final_inode_removed = get_inode_removed_count(fact_config)
281+
final_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
282+
283+
inode_delta = final_inode_removed - initial_inode_removed
284+
kernel_delta = final_kernel_rmdir - initial_kernel_rmdir
285+
286+
assert inode_delta == 2, \
287+
f"Expected exactly 2 inodes removed from monitored path, got {inode_delta}"
288+
assert kernel_delta == 1, \
289+
f"Expected exactly 1 kernel rmdir event processed, got {kernel_delta}"
247290

248291

249292
def test_rmdir_with_parent_inode(monitored_dir, server, fact_config):
@@ -260,8 +303,9 @@ def test_rmdir_with_parent_inode(monitored_dir, server, fact_config):
260303
"""
261304
process = Process.from_proc()
262305

263-
# Get baseline metric count
264-
initial_count = get_inode_removed_count(fact_config)
306+
# Get baseline metric counts
307+
initial_inode_removed = get_inode_removed_count(fact_config)
308+
initial_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
265309

266310
# Create a subdirectory
267311
subdir = os.path.join(monitored_dir, 'subdir')
@@ -299,11 +343,17 @@ def test_rmdir_with_parent_inode(monitored_dir, server, fact_config):
299343
]
300344
server.wait_events(deletion_events)
301345

302-
# Check metric incremented by 2 (file + subdir)
303-
count_after_subdir = get_inode_removed_count(fact_config)
304-
delta_after_subdir = count_after_subdir - initial_count
305-
assert delta_after_subdir == 2, \
306-
f"Expected 2 inodes removed (file + subdir), got {delta_after_subdir}"
346+
# Check metrics incremented (file + subdir)
347+
inode_after_subdir = get_inode_removed_count(fact_config)
348+
kernel_after_subdir = get_kernel_rmdir_processed(fact_config)
349+
350+
inode_delta_subdir = inode_after_subdir - initial_inode_removed
351+
kernel_delta_subdir = kernel_after_subdir - initial_kernel_rmdir
352+
353+
assert inode_delta_subdir == 2, \
354+
f"Expected 2 inodes removed (file + subdir), got {inode_delta_subdir}"
355+
assert kernel_delta_subdir == 1, \
356+
f"Expected 1 kernel rmdir event processed, got {kernel_delta_subdir}"
307357

308358
# Create a NEW file in the parent directory (monitored_dir)
309359
# This tests that removing the subdirectory didn't corrupt
@@ -323,8 +373,15 @@ def test_rmdir_with_parent_inode(monitored_dir, server, fact_config):
323373
file=new_file, host_path=new_file)
324374
server.wait_events([e5])
325375

326-
# Final metric check: should be 3 total (test_file, subdir, new_file)
327-
final_count = get_inode_removed_count(fact_config)
328-
total_delta = final_count - initial_count
329-
assert total_delta == 3, \
330-
f"Expected 3 inodes removed total, got {total_delta}"
376+
# Final metric check: should be 3 total inodes (test_file, subdir, new_file)
377+
# and 1 total kernel rmdir (subdir)
378+
final_inode_removed = get_inode_removed_count(fact_config)
379+
final_kernel_rmdir = get_kernel_rmdir_processed(fact_config)
380+
381+
inode_total_delta = final_inode_removed - initial_inode_removed
382+
kernel_total_delta = final_kernel_rmdir - initial_kernel_rmdir
383+
384+
assert inode_total_delta == 3, \
385+
f"Expected 3 inodes removed total, got {inode_total_delta}"
386+
assert kernel_total_delta == 1, \
387+
f"Expected 1 kernel rmdir event total, got {kernel_total_delta}"

0 commit comments

Comments
 (0)