Tests of TestCLITimestampParser failing, maybe due to DST
- Dominant language
- Python
- Stars
- 17.3k
- Forks
- 4.6k
- Avg merge
- 1d 2h
- Merged PRs (30d)
- 13
Description
### Describe the bug
Currently when running tests in England, two of them fail, expecting two timestamps to equal when they are in fact exactly one hour apart.
### Expected Behavior
All tests should pass, xfail, or be skipped.
### Current Behavior
Tests fail with the following output:
```
=========================================================================================== FAILURES ===========================================================================================
_____________________________________________________________________________ TestCLITimestampParser.test_default ______________________________________________________________________________
[gw0] linux -- Python 3.11.8 /home/asday/.cache/yay/aws-cli-v2/src/awscli-2.15.40/venv/bin/python
self =
def test_default(self):
self.driver = create_clidriver()
self.entry_point = AWSCLIEntryPoint(self.driver)
expected_time = datetime.datetime.fromtimestamp(0).replace(
tzinfo=tzlocal()).isoformat()
stdout, _, _ = self.run_cmd(self.command)
json_response = json.loads(stdout)
start_time = json_response["builds"][0]["startTime"]
> self.assertEqual(expected_time, start_time)
E AssertionError: '1970-01-01T01:00:00+00:00' != '1970-01-01T00:00:00+00:00'
E - 1970-01-01T01:00:00+00:00
E ? ^
E + 1970-01-01T00:00:00+00:00
E ? ^
tests/functional/test_timeformat.py:72: AssertionError
-------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------
DEBUG awscli.clidriver:clidriver.py:864 OrderedDict([('ids', )])
DEBUG awscli.arguments:arguments.py:454 Unpacked value of ['foo'] for parameter "ids": ['foo']
_______________________________________________________________________________ TestCLITimestampParser.test_iso ________________________________________________________________________________
[gw0] linux -- Python 3.11.8 /home/asday/.cache/yay/aws-cli-v2/src/awscli-2.15.40/venv/bin/python
self =
def test_iso(self):
self.environ['AWS_CONFIG_FILE'] = self.files.create_file(
'iso',
'[default]\ncli_timestamp_format = iso8601\n')
self.driver = create_clidriver()
self.entry_point = AWSCLIEntryPoint(self.driver)
expected_time = datetime.datetime.fromtimestamp(0).replace(
tzinfo=tzlocal()).isoformat()
stdout, _, _ = self.run_cmd(self.command)
json_response = json.loads(stdout)
start_time = json_response["builds"][0]["startTime"]
> self.assertEqual(expected_time, start_time)
E AssertionError: '1970-01-01T01:00:00+00:00' != '1970-01-01T00:00:00+00:00'
E - 1970-01-01T01:00:00+00:00
E ? ^
E + 1970-01-01T00:00:00+00:00
E ? ^
tests/functional/test_timeformat.py:48: AssertionError
-------------------------------------------------------------------------------------- Captured log call ---------------------------------------------------------------------------------------
DEBUG awscli.clidriver:clidriver.py:864 OrderedDict([('ids', )])
DEBUG awscli.arguments:arguments.py:454 Unpacked value of ['foo'] for parameter "ids": ['foo']
=================================================================================== short test summary info ====================================================================================
FAILED tests/functional/test_timeformat.py::TestCLITimestampParser::test_default - AssertionError: '1970-01-01T01:00:00+00:00' != '1970-01-01T00:00:00+00:00'
FAILED tests/functional/test_timeformat.py::TestCLITimestampParser::test_iso - AssertionError: '1970-01-01T01:00:00+00:00' != '1970-01-01T00:00:00+00:00'
==================================================================== 2 failed, 68110 passed, 7 skipped in 453.25s (0:07:33) ====================================================================
```
### Reproduction Steps
As mentioned, the timestamps are off by one hour, and I am currently in DST (against my will), so **set your timezone appropriately**. For reference, the current output of `date` is `Mon 22 Apr 00:05:23 BST 2024`.
The commands run to get here are documented in the [AUR PKGBUILD for `aws-cli-v2`](https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=aws-cli-v2), important part reproduced below:
```
# Avoid intermittent test failures, see git commit messages
ulimit -S -n 4096
cd awscli-$pkgver
export AWS_SECRET_ACCESS_KEY=fake_key
export AWS_ACCESS_KEY_ID=fake_id
export PYTHONPATH="$PWD"
# Install a temporary copy to a virtual environment, as tests/dependencies checks global site-packages
python -m venv --system-site-packages "$PWD/venv"
"$PWD/venv/bin/python" -m installer dist/*.whl
# * Use --dist=loadfile following upstream. The default --dist=load may cause test failures and is not faster
# * Disable backend tests - those tests check if aws-cli can be installed or not, and are not compatible with all kinds of environments
"$PWD/venv/bin/python" -m pytest tests -n auto --dist loadfile --ignore=tests/backends --ignore=tests/integration
```
It appears in a development environment, this would be reproducible with:
`AWS_SECRET_ACCESS_KEY=fake_key AWS_ACCESS_KEY_ID=fake_id python -m pytest tests -n auto --dist loadfile --ignore=tests/backends --ignore=tests/integration`
### Possible Solution
I haven't investigated, it's late and I hit this right as I was updating my system before bed. Generally I throw [freezegun](https://pypi.org/project/freezegun/) at these sorts of tests so they fail all the time instead of only for six months of the year, and deal with everything in UTC as much as possible.
### Additional Information/Context
_No response_
### CLI version used
2.15.40
### Environment details (OS name and version, etc.)
Arch Linux (by the way), Python 3.11.8, yay v12.3.5, pacman v6.1.0, libalpm v14.0.0.
Contributor guide
Assessment
This issue has not been assessed yet.