Content-Length: 271964 | pFad | http://github.com/miss-islington/cpython/commit/e75c1ec52b9d03744c7d459bb269fe8f445b2add

E9 gh-88352: Make TimedRotatingFileHandler tests more stable (GH-116409) · miss-islington/cpython@e75c1ec · GitHub
Skip to content

Commit

Permalink
pythongh-88352: Make TimedRotatingFileHandler tests more stable (pyth…
Browse files Browse the repository at this point in the history
…onGH-116409)

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.

Also share code between test_rollover_at_midnight and test_rollover_at_weekday.
(cherry picked from commit d8712fa)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
  • Loading branch information
serhiy-storchaka authored and miss-islington committed Mar 11, 2024
1 parent de239be commit e75c1ec
Showing 1 changed file with 17 additions and 38 deletions.
55 changes: 17 additions & 38 deletions Lib/test/test_logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -6025,46 +6025,22 @@ def test_rollover(self):
print(tf.read())
self.assertTrue(found, msg=msg)

def test_rollover_at_midnight(self):
atTime = datetime.datetime.now().time()
fmt = logging.Formatter('%(asctime)s %(message)s')
for i in range(3):
fh = logging.handlers.TimedRotatingFileHandler(
self.fn, encoding="utf-8", when='MIDNIGHT', atTime=atTime)
fh.setFormatter(fmt)
r2 = logging.makeLogRecord({'msg': f'testing1 {i}'})
fh.emit(r2)
fh.close()
self.assertLogFile(self.fn)
with open(self.fn, encoding="utf-8") as f:
for i, line in enumerate(f):
self.assertIn(f'testing1 {i}', line)

os.utime(self.fn, (time.time() - 1,)*2)
for i in range(2):
fh = logging.handlers.TimedRotatingFileHandler(
self.fn, encoding="utf-8", when='MIDNIGHT', atTime=atTime)
fh.setFormatter(fmt)
r2 = logging.makeLogRecord({'msg': f'testing2 {i}'})
fh.emit(r2)
fh.close()
rolloverDate = datetime.datetime.now() - datetime.timedelta(days=1)
otherfn = f'{self.fn}.{rolloverDate:%Y-%m-%d}'
self.assertLogFile(otherfn)
with open(self.fn, encoding="utf-8") as f:
for i, line in enumerate(f):
self.assertIn(f'testing2 {i}', line)
with open(otherfn, encoding="utf-8") as f:
for i, line in enumerate(f):
self.assertIn(f'testing1 {i}', line)

def test_rollover_at_weekday(self):
def test_rollover_at_midnight(self, weekly=False):
os_helper.unlink(self.fn)
now = datetime.datetime.now()
atTime = now.time()
if not 0.1 < atTime.microsecond/1e6 < 0.9:
# The test requires all records to be emitted within
# the range of the same whole second.
time.sleep((0.1 - atTime.microsecond/1e6) % 1.0)
now = datetime.datetime.now()
atTime = now.time()
atTime = atTime.replace(microsecond=0)
fmt = logging.Formatter('%(asctime)s %(message)s')
when = f'W{now.weekday()}' if weekly else 'MIDNIGHT'
for i in range(3):
fh = logging.handlers.TimedRotatingFileHandler(
self.fn, encoding="utf-8", when=f'W{now.weekday()}', atTime=atTime)
self.fn, encoding="utf-8", when=when, atTime=atTime)
fh.setFormatter(fmt)
r2 = logging.makeLogRecord({'msg': f'testing1 {i}'})
fh.emit(r2)
Expand All @@ -6074,15 +6050,15 @@ def test_rollover_at_weekday(self):
for i, line in enumerate(f):
self.assertIn(f'testing1 {i}', line)

os.utime(self.fn, (time.time() - 1,)*2)
os.utime(self.fn, (now.timestamp() - 1,)*2)
for i in range(2):
fh = logging.handlers.TimedRotatingFileHandler(
self.fn, encoding="utf-8", when=f'W{now.weekday()}', atTime=atTime)
self.fn, encoding="utf-8", when=when, atTime=atTime)
fh.setFormatter(fmt)
r2 = logging.makeLogRecord({'msg': f'testing2 {i}'})
fh.emit(r2)
fh.close()
rolloverDate = datetime.datetime.now() - datetime.timedelta(days=7)
rolloverDate = now - datetime.timedelta(days=7 if weekly else 1)
otherfn = f'{self.fn}.{rolloverDate:%Y-%m-%d}'
self.assertLogFile(otherfn)
with open(self.fn, encoding="utf-8") as f:
Expand All @@ -6092,6 +6068,9 @@ def test_rollover_at_weekday(self):
for i, line in enumerate(f):
self.assertIn(f'testing1 {i}', line)

def test_rollover_at_weekday(self):
self.test_rollover_at_midnight(weekly=True)

def test_invalid(self):
assertRaises = self.assertRaises
assertRaises(ValueError, logging.handlers.TimedRotatingFileHandler,
Expand Down

0 comments on commit e75c1ec

Please sign in to comment.








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: http://github.com/miss-islington/cpython/commit/e75c1ec52b9d03744c7d459bb269fe8f445b2add

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy