|
11 | 11 | CacheDownloader,
|
12 | 12 | FailedDownloadError,
|
13 | 13 | _cache_hit,
|
| 14 | + _lastmod_from_response, |
14 | 15 | url_to_cache_filename,
|
15 | 16 | )
|
16 | 17 |
|
17 | 18 | DEFAULT_RESPONSE_URL = "https://example.com/schema1.json"
|
| 19 | +DEFAULT_LASTMOD = "Sun, 01 Jan 2000 00:00:01 GMT" |
18 | 20 |
|
19 | 21 |
|
20 | 22 | def add_default_response():
|
21 | 23 | responses.add(
|
22 | 24 | "GET",
|
23 | 25 | DEFAULT_RESPONSE_URL,
|
24 |
| - headers={"Last-Modified": "Sun, 01 Jan 2000 00:00:01 GMT"}, |
| 26 | + headers={"Last-Modified": DEFAULT_LASTMOD}, |
25 | 27 | json={},
|
26 | 28 | match_querystring=None,
|
27 | 29 | )
|
@@ -274,10 +276,10 @@ def test_cachedownloader_handles_bad_lastmod_header(
|
274 | 276 | elif failure_mode == "time_overflow":
|
275 | 277 | add_default_response()
|
276 | 278 |
|
277 |
| - def fake_mktime(*args): |
| 279 | + def fake_timegm(*args): |
278 | 280 | raise OverflowError("uh-oh")
|
279 | 281 |
|
280 |
| - monkeypatch.setattr("time.mktime", fake_mktime) |
| 282 | + monkeypatch.setattr("calendar.timegm", fake_timegm) |
281 | 283 | else:
|
282 | 284 | raise NotImplementedError
|
283 | 285 |
|
@@ -341,3 +343,37 @@ def dummy_validate_bytes(data):
|
341 | 343 | assert fp.read() == b"{}"
|
342 | 344 | # assert that the validator was not run
|
343 | 345 | assert validator_ran is False
|
| 346 | + |
| 347 | + |
| 348 | +def test_lastmod_from_header_uses_gmtime(request, monkeypatch, default_response): |
| 349 | + """ |
| 350 | + Regression test for https://github.com/python-jsonschema/check-jsonschema/pull/565 |
| 351 | +
|
| 352 | + The time was converted in local time, when UTC/GMT was desired. |
| 353 | + """ |
| 354 | + |
| 355 | + def final_tzset(): |
| 356 | + time.tzset() |
| 357 | + |
| 358 | + request.addfinalizer(final_tzset) |
| 359 | + |
| 360 | + response = requests.get(DEFAULT_RESPONSE_URL, stream=True) |
| 361 | + |
| 362 | + with monkeypatch.context() as m: |
| 363 | + m.setenv("TZ", "GMT0") |
| 364 | + time.tzset() |
| 365 | + gmt_parsed_time = _lastmod_from_response(response) |
| 366 | + |
| 367 | + with monkeypatch.context() as m: |
| 368 | + m.setenv("TZ", "EST5") |
| 369 | + time.tzset() |
| 370 | + est_parsed_time = _lastmod_from_response(response) |
| 371 | + |
| 372 | + with monkeypatch.context() as m: |
| 373 | + m.setenv("TZ", "UTC0") |
| 374 | + time.tzset() |
| 375 | + utc_parsed_time = _lastmod_from_response(response) |
| 376 | + |
| 377 | + # assert that they all match |
| 378 | + assert gmt_parsed_time == utc_parsed_time |
| 379 | + assert gmt_parsed_time == est_parsed_time |
0 commit comments