Skip to content

Commit facff1a

Browse files
committed
Basic filemarks function test coverage reusing the overall structure from the
other unit tests.
1 parent 2a0f803 commit facff1a

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed

tests/test_mig_shared_filemarks.py

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# -*- coding: utf-8 -*-
2+
#
3+
# --- BEGIN_HEADER ---
4+
#
5+
# test_mig_shared_filemarks - unit tests for shared filemarks helpers
6+
# Copyright (C) 2003-2025 The MiG Project by the Science HPC Center at UCPH
7+
#
8+
# This file is part of MiG.
9+
#
10+
# MiG is free software: you can redistribute it and/or modify
11+
# it under the terms of the GNU General Public License as published by
12+
# the Free Software Foundation; either version 2 of the License, or
13+
# (at your option) any later version.
14+
#
15+
# MiG is distributed in the hope that it will be useful,
16+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
17+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18+
# GNU General Public License for more details.
19+
#
20+
# You should have received a copy of the GNU General Public License
21+
# along with this program; if not, write to the Free Software
22+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
23+
# USA.
24+
#
25+
# -- END_HEADER ---
26+
#
27+
28+
"""Unit tests for mig.shared.filemarks module"""
29+
30+
import os
31+
import tempfile
32+
import time
33+
import unittest
34+
35+
from mig.shared.filemarks import update_filemark, get_filemark, reset_filemark
36+
from tests.support import ensure_dirs_exist, MigTestCase, testmain
37+
38+
TEST_MARKS_DIR = 'TestMarks'
39+
TEST_MARKS_FILE = 'file.mark'
40+
41+
42+
class TestMigSharedFilemarks(MigTestCase):
43+
"""Test mig.shared.filemarks functions"""
44+
45+
def _provide_configuration(self):
46+
"""Set up isolated test configuration and logger for the tests"""
47+
return 'testconfig'
48+
49+
def before_each(self):
50+
"""Setup fake configuration and temp dir before each test."""
51+
self.marks_base = os.path.join(self.configuration.mig_system_run,
52+
TEST_MARKS_DIR)
53+
ensure_dirs_exist(os.path.dirname(self.marks_base))
54+
self.marks_path = os.path.join(self.marks_base, TEST_MARKS_FILE)
55+
56+
def test_update_filemark_create(self):
57+
"""Test update_filemark creates mark files"""
58+
timestamp = time.time()
59+
update_result = update_filemark(self.configuration, self.marks_base,
60+
TEST_MARKS_FILE, timestamp)
61+
self.assertTrue(update_result)
62+
self.assertTrue(os.path.isfile(self.marks_path))
63+
64+
def test_update_filemark_timestamp(self):
65+
"""Test update_filemark creates files with correct timestamp"""
66+
timestamp = time.time()
67+
update_filemark(self.configuration, self.marks_base,
68+
TEST_MARKS_FILE, timestamp)
69+
self.assertTrue(os.path.isfile(self.marks_path))
70+
self.assertEqual(os.path.getmtime(self.marks_path), timestamp)
71+
72+
def test_update_filemark_delete(self):
73+
"""Test update_filemark deletes mark files with negative timestamp"""
74+
update_filemark(self.configuration, self.marks_base,
75+
TEST_MARKS_FILE, time.time())
76+
delete_result = update_filemark(self.configuration, self.marks_base,
77+
TEST_MARKS_FILE, -1)
78+
self.assertTrue(delete_result)
79+
self.assertFalse(os.path.exists(self.marks_path))
80+
81+
def test_get_filemark_existing(self):
82+
"""Test get_filemark retrieves timestamp for existing mark"""
83+
timestamp = time.time()
84+
update_filemark(self.configuration, self.marks_base,
85+
TEST_MARKS_FILE, timestamp)
86+
retrieved = get_filemark(self.configuration, self.marks_base,
87+
TEST_MARKS_FILE)
88+
self.assertEqual(retrieved, timestamp)
89+
90+
def test_get_filemark_missing(self):
91+
"""Test get_filemark returns None for missing mark files"""
92+
retrieved = get_filemark(self.configuration, self.marks_base,
93+
'missing.mark')
94+
self.assertIsNone(retrieved)
95+
96+
def test_reset_filemark_single(self):
97+
"""Test reset_filemark updates single mark timestamp to 0"""
98+
update_filemark(self.configuration, self.marks_base,
99+
TEST_MARKS_FILE, time.time())
100+
reset_result = reset_filemark(self.configuration, self.marks_base,
101+
[TEST_MARKS_FILE])
102+
self.assertTrue(reset_result)
103+
retrieved = get_filemark(self.configuration, self.marks_base,
104+
TEST_MARKS_FILE)
105+
self.assertEqual(retrieved, 0)
106+
107+
def test_reset_filemark_delete(self):
108+
"""Test reset_filemark deletes marks with delete=True"""
109+
update_filemark(self.configuration, self.marks_base,
110+
TEST_MARKS_FILE, time.time())
111+
reset_result = reset_filemark(self.configuration, self.marks_base,
112+
[TEST_MARKS_FILE], delete=True)
113+
self.assertTrue(reset_result)
114+
retrieved = get_filemark(self.configuration, self.marks_base,
115+
TEST_MARKS_FILE)
116+
self.assertIsNone(retrieved)
117+
self.assertFalse(os.path.exists(self.marks_path))
118+
119+
def test_reset_filemark_all(self):
120+
"""Test reset_filemark resets all marks when mark_list=None"""
121+
marks = ['mark1', 'mark2', 'mark3']
122+
for mark in marks:
123+
update_filemark(self.configuration, self.marks_base, mark,
124+
time.time())
125+
126+
reset_result = reset_filemark(self.configuration, self.marks_base)
127+
self.assertTrue(reset_result)
128+
129+
for mark in marks:
130+
result = get_filemark(self.configuration, self.marks_base, mark)
131+
self.assertEqual(result, 0)
132+
133+
134+
if __name__ == '__main__':
135+
testmain()

0 commit comments

Comments
 (0)