classification
Title: test_email: test_localtime_daylight_false_dst_true() fails depending on the timezone
Type: Stage: resolved
Components: email, Tests Versions: Python 3.8, Python 3.7, Python 3.6
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: barry, miss-islington, p-ganssle, r.david.murray, schwab, vstinner, xtreak
Priority: normal Keywords: patch

Created on 2018-11-26 14:53 by vstinner, last changed 2019-01-24 11:00 by schwab. This issue is now closed.

Files
File name Uploaded Description Edit
mktime_bug.py vstinner, 2018-11-26 15:02
mktime_bug.c vstinner, 2018-11-26 15:26
Pull Requests
URL Status Linked Edit
PR 10721 merged vstinner, 2018-11-26 15:55
PR 10741 merged miss-islington, 2018-11-27 11:41
PR 10742 merged miss-islington, 2018-11-27 11:41
Messages (12)
msg330435 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-11-26 14:53
The two following tests fail on glibc-2.28.9000-19.fc30.x86_64 on Fedora Rawhide depending on the timezone.

Australia/Lord_Howe: ok
EDT4: fail
EST+05EDT,M3.2.0,M11.1.0: ok
Europe/Kiev: ok
Europe/Minsk: ok
MSK-03: fail
MST+07MDT,M4.1.0,M10.5.0: ok
STD-1DST,M3.2.0,M11.1.0: ok
STD-1DST,M4.1.0,M10.1.0: ok
UTC: fail

<mock-chroot> sh-4.4# TZ=UTC ./python -m test test_email -m 'test_localtime_daylight_*'  -v
== CPython 3.7.1 (default, Nov 26 2018, 15:33:31) [GCC 8.2.1 20181105 (Red Hat 8.2.1-5)]
== Linux-4.19.2-301.fc29.x86_64-x86_64-with-fedora-30-Rawhide little-endian
== cwd: /builddir/Python-3.7.1/build/test_python_9582
== CPU count: 8
== encodings: locale=UTF-8, FS=utf-8
Run tests sequentially
0:00:00 load avg: 0.33 [1/1] test_email
test_localtime_daylight_false_dst_false (test.test_email.test_utils.LocaltimeTests) ... ok
test_localtime_daylight_false_dst_true (test.test_email.test_utils.LocaltimeTests) ... ERROR
test_localtime_daylight_true_dst_false (test.test_email.test_utils.LocaltimeTests) ... ok
test_localtime_daylight_true_dst_true (test.test_email.test_utils.LocaltimeTests) ... ERROR

======================================================================
ERROR: test_localtime_daylight_false_dst_true (test.test_email.test_utils.LocaltimeTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/Python-3.7.1/Lib/test/test_email/test_utils.py", line 88, in test_localtime_daylight_false_dst_true
    t1 = utils.localtime(t0, isdst=1)
  File "/builddir/Python-3.7.1/Lib/email/utils.py", line 361, in localtime
    seconds = time.mktime(tm)
OverflowError: mktime argument out of range

======================================================================
ERROR: test_localtime_daylight_true_dst_true (test.test_email.test_utils.LocaltimeTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/builddir/Python-3.7.1/Lib/test/test_email/test_utils.py", line 81, in test_localtime_daylight_true_dst_true
    t1 = utils.localtime(t0, isdst=1)
  File "/builddir/Python-3.7.1/Lib/email/utils.py", line 361, in localtime
    seconds = time.mktime(tm)
OverflowError: mktime argument out of range

----------------------------------------------------------------------

Ran 4 tests in 0.007s

FAILED (errors=2)
test test_email failed
test_email failed

== Tests result: FAILURE ==

1 test failed:
    test_email

Total duration: 259 ms
Tests result: FAILURE

<mock-chroot> sh-4.4# rpm -q glibc
glibc-2.28.9000-19.fc30.x86_64
<mock-chroot> sh-4.4# cat /etc/fedora-release 
Fedora release 30 (Rawhide)
<mock-chroot> sh-4.4# date
lun. nov. 26 14:53:14 UTC 2018
msg330436 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-11-26 15:02
mktime_bug.py: script to reproduce the bug.
msg330437 - (view) Author: Karthikeyan Singaravelan (xtreak) * (Python triager) Date: 2018-11-26 15:04
I remember some related issues raised in the past about the same test failing on freebsd machines : issue31628 and issue15750 (some more detail on msg168747)
msg330438 - (view) Author: Miro Hrončok (hroncok) * Date: 2018-11-26 15:20
I found a C reproducer and reported to Fedora glibc tracker: https://bugzilla.redhat.com/show_bug.cgi?id=1653340
msg330439 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-11-26 15:26
Miro Hrončok:
> I found a C reproducer and reported to Fedora glibc tracker: https://bugzilla.redhat.com/show_bug.cgi?id=1653340

Nice, I wrote almost the same one :-) See attached mktime_bug.c:

$ gcc mktime_bug.c -o mktime_bug
$ ./mktime_bug 
TZ=CET: mktime() -> 1331506860, errno=0
TZ=UTC: mktime() -> 1331514060, errno=0

$ ./mktime_bug
TZ=CET: mktime() -> 1331506860, errno=0
TZ=UTC: mktime() -> -1, errno=75
msg330441 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-11-26 15:48
I'm able to reproduce the issue on FreeBSD 12.0-RC2:

vstinner@freebsd$ TZ=CET ./python -m test test_email -m 'test_localtime_daylight_*'  -v
(...)
Tests result: SUCCESS

vstinner@freebsd$ TZ=UTC ./python -m test test_email -m 'test_localtime_daylight_*'  -v
(...)
======================================================================
ERROR: test_localtime_daylight_false_dst_true (test.test_email.test_utils.LocaltimeTests)
----------------------------------------------------------------------
(...)
  File "/usr/home/vstinner/prog/python/master/Lib/email/utils.py", line 361, in localtime
    seconds = time.mktime(tm)
OverflowError: mktime argument out of range

======================================================================
ERROR: test_localtime_daylight_true_dst_true (test.test_email.test_utils.LocaltimeTests)
----------------------------------------------------------------------
(...)
  File "/usr/home/vstinner/prog/python/master/Lib/email/utils.py", line 361, in localtime
    seconds = time.mktime(tm)
OverflowError: mktime argument out of range
msg330443 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-11-26 15:50
Oh, the tests fail since 2012 at least on FreeBSD:

https://bugs.python.org/issue15750#msg168741

"""
On the FreeBSD 8.2 build slave:

======================================================================
ERROR: test_localtime_daylight_false_dst_true (test_utils.LocaltimeTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  (...)
    seconds = time.mktime(tm)
OverflowError: mktime argument out of range

======================================================================
ERROR: test_localtime_daylight_true_dst_true (test_utils.LocaltimeTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  (...)
    seconds = time.mktime(tm)
OverflowError: mktime argument out of range
"""

bpo-15750 even contains a reproducer in C.
msg330509 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-11-27 11:40
New changeset cfaafda8e3e19764682abb4bd4c574accb784c42 by Victor Stinner in branch 'master':
bpo-35317: Fix mktime() error in test_email (GH-10721)
https://github.com/python/cpython/commit/cfaafda8e3e19764682abb4bd4c574accb784c42
msg330514 - (view) Author: miss-islington (miss-islington) Date: 2018-11-27 11:58
New changeset d669154ee52048f98ac63ba177f3fd1cf62f0174 by Miss Islington (bot) in branch '3.7':
bpo-35317: Fix mktime() error in test_email (GH-10721)
https://github.com/python/cpython/commit/d669154ee52048f98ac63ba177f3fd1cf62f0174
msg330515 - (view) Author: miss-islington (miss-islington) Date: 2018-11-27 12:01
New changeset b59fc311609aadaafaae68240127b4997b85859d by Miss Islington (bot) in branch '3.6':
bpo-35317: Fix mktime() error in test_email (GH-10721)
https://github.com/python/cpython/commit/b59fc311609aadaafaae68240127b4997b85859d
msg330554 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2018-11-27 20:30
Python 2.7 doesn't seem to be affected:

$ TZ=UTC ./python -m test -v test_email
Tests result: SUCCESS
msg334291 - (view) Author: Andreas Schwab (schwab) * Date: 2019-01-24 11:00
The test still fails if the timezone database is not available.
History
Date User Action Args
2019-01-24 11:00:27schwabsetnosy: + schwab
messages: + msg334291
2018-11-27 20:30:08vstinnersetstatus: open -> closed
versions: + Python 3.6, Python 3.7
messages: + msg330554

resolution: fixed
stage: patch review -> resolved
2018-11-27 12:01:04miss-islingtonsetmessages: + msg330515
2018-11-27 11:58:00miss-islingtonsetnosy: + miss-islington
messages: + msg330514
2018-11-27 11:41:12miss-islingtonsetpull_requests: + pull_request9989
2018-11-27 11:41:01miss-islingtonsetpull_requests: + pull_request9988
2018-11-27 11:40:54vstinnersetmessages: + msg330509
2018-11-26 20:21:50p-gansslesetnosy: + p-ganssle
2018-11-26 15:55:18vstinnersetkeywords: + patch
stage: patch review
pull_requests: + pull_request9969
2018-11-26 15:50:45vstinnersetmessages: + msg330443
2018-11-26 15:49:11vstinnerlinkissue15750 superseder
2018-11-26 15:48:18vstinnersetmessages: + msg330441
2018-11-26 15:47:04vstinnerlinkissue31628 superseder
2018-11-26 15:26:01vstinnersetfiles: + mktime_bug.c
nosy: - hroncok
messages: + msg330439

2018-11-26 15:20:57hroncoksetnosy: + hroncok
messages: + msg330438
2018-11-26 15:04:41xtreaksetnosy: + xtreak
messages: + msg330437
2018-11-26 15:02:13vstinnersetfiles: + mktime_bug.py

messages: + msg330436
2018-11-26 14:53:28vstinnercreate