8000 gh-88352: Make TimedRotatingFileHandler tests more stable · serhiy-storchaka/cpython@8f7b2aa · GitHub
[go: up one dir, main page]

Skip to content

Commit 8f7b2aa

Browse files
pythongh-88352: Make TimedRotatingFileHandler tests more stable
The tests failed (with less than 1% probability) if for example the file was created at 11:46:03.999, but the record was emitted at 11:46:04.001, with atTime=11:46:04, which caused an unexpected rollover. Ensure that the tests are always run within the range of the same whole second.
1 parent eb22e2b commit 8f7b2aa

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

Lib/test/test_logging.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6081,7 +6081,16 @@ def test_rollover(self):
60816081
self.assertTrue(found, msg=msg)
60826082

60836083
def test_rollover_at_midnight(self):
6084-
atTime = datetime.datetime.now().time()
6084+
os_helper.unlink(self.fn)
6085+
now = datetime.datetime.now()
6086+
atTime = now.time()
6087+
if not 0.1 < atTime.microsecond/1e6 < 0.9:
6088+
# The test requires all records to be emitted within
6089+
# the range of the same whole second.
6090+
time.sleep((0.1 - atTime.microsecond/1e6) % 1.0)
6091+
now = datetime.datetime.now()
6092+
atTime = now.time()
6093+
atTime = atTime.replace(microsecond=0)
60856094
fmt = logging.Formatter('%(asctime)s %(message)s')
60866095
for i in range(3):
60876096
fh = logging.handlers.TimedRotatingFileHandler(
@@ -6095,15 +6104,15 @@ def test_rollover_at_midnight(self):
60956104
for i, line in enumerate(f):
60966105
self.assertIn(f'testing1 {i}', line)
60976106

6098-
os.utime(self.fn, (time.time() - 1,)*2)
6107+
os.utime(self.fn, (now.timestamp() - 1,)*2)
60996108
for i in range(2):
61006109
fh = logging.handlers.TimedRotatingFileHandler(
61016110
self.fn, encoding="utf-8", when='MIDNIGHT', atTime=atTime)
61026111
fh.setFormatter(fmt)
61036112
r2 = logging.makeLogRecord({'msg': f'testing2 {i}'})
61046113
fh.emit(r2)
61056114
fh.close()
6106-
rolloverDate = datetime.datetime.now() - datetime.timedelta(days=1)
6115+
rolloverDate = now - datetime.timedelta(days=1)
61076116
otherfn = f'{self.fn}.{rolloverDate:%Y-%m-%d}'
61086117
self.assertLogFile(otherfn)
61096118
with open(self.fn, encoding="utf-8") as f:
@@ -6114,8 +6123,16 @@ def test_rollover_at_midnight(self):
61146123
self.assertIn(f'testing1 {i}', line)
61156124

61166125
def test_rollover_at_weekday(self):
6126+
os_helper.unlink(self.fn)
61176127
now = datetime.datetime.now()
61186128
atTime = now.time()
6129+
if not 0.1 < atTime.microsecond/1e6 < 0.9:
6130+
# The test requires all records to be emitted within
6131+
# the range of the same whole second.
6132+
time.sleep((0.1 - atTime.microsecond/1e6) % 1.0)
6133+
now = datetime.datetime.now()
6134+
atTime = now.time()
6135+
atTime = atTime.replace(microsecond=0)
61196136
fmt = logging.Formatter('%(asctime)s %(message)s')
61206137
for i in range(3):
61216138
fh = logging.handlers.TimedRotatingFileHandler(
@@ -6129,15 +6146,15 @@ def test_rollover_at_weekday(self):
61296146
for i, line in enumerate(f):
61306147
self.assertIn(f'testing1 {i}', line)
61316148

6132-
os.utime(self.fn, (time.time() - 1,)*2)
6149+
os.utime(self.fn, (now.timestamp() - 1,)*2)
61336150
for i in range(2):
61346151
fh = logging.handlers.TimedRotatingFileHandler(
61356152
self.fn, encoding="utf-8", when=f'W{now.weekday()}', atTime=atTime)
61366153
fh.setFormatter(fmt)
61376154
r2 = logging.makeLogRecord({'msg': f'testing2 {i}'})
61386155
fh.emit(r2)
61396156
fh.close()
6140-
rolloverDate = datetime.datetime.now() - datetime.timedelta(days=7)
6157+
rolloverDate = now - datetime.timedelta(days=7)
61416158
otherfn = f'{self.fn}.{rolloverDate:%Y-%m-%d}'
61426159
self.assertLogFile(otherfn)
61436160
with open(self.fn, encoding="utf-8") as f:

0 commit comments

Comments
 (0)
0