aws / aws/aws-cli

Tests of TestCLITimestampParser failing, maybe due to DST

Open
#8,644 6 comments 3 reactions 0 assignees View on GitHub
bug p2 test
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.