|
@@ -1,11 +1,12 @@
|
|
|
import re
|
|
|
-from datetime import datetime, timezone
|
|
|
+from datetime import datetime, timezone, timedelta
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
from ...constants import * # NOQA
|
|
|
-from ...archiver.prune_cmd import prune_split
|
|
|
+from ...archiver.prune_cmd import prune_split, prune_within
|
|
|
from . import cmd, RK_ENCRYPTION, src_dir, generate_archiver_tests
|
|
|
+from ...helpers import interval
|
|
|
|
|
|
pytest_generate_tests = lambda metafunc: generate_archiver_tests(metafunc, kinds="local,remote,binary") # NOQA
|
|
|
|
|
@@ -282,6 +283,38 @@ class MockArchive:
|
|
|
local_tz = datetime.now(tz=timezone.utc).astimezone(tz=None).tzinfo
|
|
|
|
|
|
|
|
|
+def test_prune_within():
|
|
|
+ def subset(lst, indices):
|
|
|
+ return {lst[i] for i in indices}
|
|
|
+
|
|
|
+ def dotest(test_archives, within, indices):
|
|
|
+ for ta in test_archives, reversed(test_archives):
|
|
|
+ kept_because = {}
|
|
|
+ keep = prune_within(ta, interval(within), kept_because)
|
|
|
+ assert set(keep) == subset(test_archives, indices)
|
|
|
+ assert all("within" == kept_because[a.id][0] for a in keep)
|
|
|
+
|
|
|
+ # 1 minute, 1.5 hours, 2.5 hours, 3.5 hours, 25 hours, 49 hours
|
|
|
+ test_offsets = [60, 90 * 60, 150 * 60, 210 * 60, 25 * 60 * 60, 49 * 60 * 60]
|
|
|
+ now = datetime.now(timezone.utc)
|
|
|
+ test_dates = [now - timedelta(seconds=s) for s in test_offsets]
|
|
|
+ test_archives = [MockArchive(date, i) for i, date in enumerate(test_dates)]
|
|
|
+
|
|
|
+ dotest(test_archives, "15S", [])
|
|
|
+ dotest(test_archives, "2M", [0])
|
|
|
+ dotest(test_archives, "1H", [0])
|
|
|
+ dotest(test_archives, "2H", [0, 1])
|
|
|
+ dotest(test_archives, "3H", [0, 1, 2])
|
|
|
+ dotest(test_archives, "24H", [0, 1, 2, 3])
|
|
|
+ dotest(test_archives, "26H", [0, 1, 2, 3, 4])
|
|
|
+ dotest(test_archives, "2d", [0, 1, 2, 3, 4])
|
|
|
+ dotest(test_archives, "50H", [0, 1, 2, 3, 4, 5])
|
|
|
+ dotest(test_archives, "3d", [0, 1, 2, 3, 4, 5])
|
|
|
+ dotest(test_archives, "1w", [0, 1, 2, 3, 4, 5])
|
|
|
+ dotest(test_archives, "1m", [0, 1, 2, 3, 4, 5])
|
|
|
+ dotest(test_archives, "1y", [0, 1, 2, 3, 4, 5])
|
|
|
+
|
|
|
+
|
|
|
@pytest.mark.parametrize(
|
|
|
"rule,num_to_keep,expected_ids",
|
|
|
[
|