tests: fix prune_split tests by giving the timestamps in local timezone

Guess this fixes issues like #5535.

I tested this with TZ=:
- UTC
- UTC+12
- UTC-12
- UTC+14
- UTC-14
This commit is contained in:
Thomas Waldmann 2023-01-19 00:13:45 +01:00
parent 8a2fd39212
commit 0e577452c2
No known key found for this signature in database
GPG Key ID: 243ACFA951F78E01
1 changed files with 28 additions and 17 deletions

View File

@ -405,6 +405,17 @@ class MockArchive:
return f"{self.id}: {self.ts.isoformat()}" return f"{self.id}: {self.ts.isoformat()}"
# This is the local timezone of the system running the tests.
# We need this e.g. to construct archive timestamps for the prune tests,
# because borg prune operates in the local timezone (it first converts the
# archive timestamp to the local timezone). So, if we want the y/m/d/h/m/s
# values which prune uses to be exactly the ones we give [and NOT shift them
# by tzoffset], we need to give the timestamps in the same local timezone.
# Please note that the timestamps in a real borg archive or manifest are
# stored in UTC timezone.
local_tz = datetime.now(tz=timezone.utc).astimezone(tz=None).tzinfo
@pytest.mark.parametrize( @pytest.mark.parametrize(
"rule,num_to_keep,expected_ids", "rule,num_to_keep,expected_ids",
[ [
@ -424,23 +435,23 @@ def test_prune_split(rule, num_to_keep, expected_ids):
archives = [ archives = [
# years apart # years apart
MockArchive(datetime(2015, 1, 1, 10, 0, 0, tzinfo=timezone.utc), 1), MockArchive(datetime(2015, 1, 1, 10, 0, 0, tzinfo=local_tz), 1),
MockArchive(datetime(2016, 1, 1, 10, 0, 0, tzinfo=timezone.utc), 2), MockArchive(datetime(2016, 1, 1, 10, 0, 0, tzinfo=local_tz), 2),
MockArchive(datetime(2017, 1, 1, 10, 0, 0, tzinfo=timezone.utc), 3), MockArchive(datetime(2017, 1, 1, 10, 0, 0, tzinfo=local_tz), 3),
# months apart # months apart
MockArchive(datetime(2017, 2, 1, 10, 0, 0, tzinfo=timezone.utc), 4), MockArchive(datetime(2017, 2, 1, 10, 0, 0, tzinfo=local_tz), 4),
MockArchive(datetime(2017, 3, 1, 10, 0, 0, tzinfo=timezone.utc), 5), MockArchive(datetime(2017, 3, 1, 10, 0, 0, tzinfo=local_tz), 5),
# days apart # days apart
MockArchive(datetime(2017, 3, 2, 10, 0, 0, tzinfo=timezone.utc), 6), MockArchive(datetime(2017, 3, 2, 10, 0, 0, tzinfo=local_tz), 6),
MockArchive(datetime(2017, 3, 3, 10, 0, 0, tzinfo=timezone.utc), 7), MockArchive(datetime(2017, 3, 3, 10, 0, 0, tzinfo=local_tz), 7),
MockArchive(datetime(2017, 3, 4, 10, 0, 0, tzinfo=timezone.utc), 8), MockArchive(datetime(2017, 3, 4, 10, 0, 0, tzinfo=local_tz), 8),
# minutes apart # minutes apart
MockArchive(datetime(2017, 10, 1, 9, 45, 0, tzinfo=timezone.utc), 9), MockArchive(datetime(2017, 10, 1, 9, 45, 0, tzinfo=local_tz), 9),
MockArchive(datetime(2017, 10, 1, 9, 55, 0, tzinfo=timezone.utc), 10), MockArchive(datetime(2017, 10, 1, 9, 55, 0, tzinfo=local_tz), 10),
# seconds apart # seconds apart
MockArchive(datetime(2017, 10, 1, 10, 0, 1, tzinfo=timezone.utc), 11), MockArchive(datetime(2017, 10, 1, 10, 0, 1, tzinfo=local_tz), 11),
MockArchive(datetime(2017, 10, 1, 10, 0, 3, tzinfo=timezone.utc), 12), MockArchive(datetime(2017, 10, 1, 10, 0, 3, tzinfo=local_tz), 12),
MockArchive(datetime(2017, 10, 1, 10, 0, 5, tzinfo=timezone.utc), 13), MockArchive(datetime(2017, 10, 1, 10, 0, 5, tzinfo=local_tz), 13),
] ]
kept_because = {} kept_because = {}
keep = prune_split(archives, rule, num_to_keep, kept_because) keep = prune_split(archives, rule, num_to_keep, kept_because)
@ -456,12 +467,12 @@ def test_prune_split_keep_oldest():
archives = [ archives = [
# oldest backup, but not last in its year # oldest backup, but not last in its year
MockArchive(datetime(2018, 1, 1, 10, 0, 0, tzinfo=timezone.utc), 1), MockArchive(datetime(2018, 1, 1, 10, 0, 0, tzinfo=local_tz), 1),
# an interim backup # an interim backup
MockArchive(datetime(2018, 12, 30, 10, 0, 0, tzinfo=timezone.utc), 2), MockArchive(datetime(2018, 12, 30, 10, 0, 0, tzinfo=local_tz), 2),
# year end backups # year end backups
MockArchive(datetime(2018, 12, 31, 10, 0, 0, tzinfo=timezone.utc), 3), MockArchive(datetime(2018, 12, 31, 10, 0, 0, tzinfo=local_tz), 3),
MockArchive(datetime(2019, 12, 31, 10, 0, 0, tzinfo=timezone.utc), 4), MockArchive(datetime(2019, 12, 31, 10, 0, 0, tzinfo=local_tz), 4),
] ]
# Keep oldest when retention target can't otherwise be met # Keep oldest when retention target can't otherwise be met