From 07960781b58c55a446f2334aac2238c3af5ea890 Mon Sep 17 00:00:00 2001 From: "Dr. Matthias Ratajczak" Date: Wed, 4 May 2022 10:39:18 +0200 Subject: [PATCH] add more tests for snapshot cleaning --- test_zfs_backup.py | 108 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/test_zfs_backup.py b/test_zfs_backup.py index 517752b..d075998 100644 --- a/test_zfs_backup.py +++ b/test_zfs_backup.py @@ -183,3 +183,111 @@ class TestDataset: Snapshot, "destroy", lambda snapshot: validate_snapshot_selection(snapshot) ): dataset._clean_old_snapshots_for_interval("daily", 999) + + def test__clean_old_snapshots_for_interval_2(self): + def validate_snapshot_selection(snapshot: Snapshot): + nonlocal counter + print(snapshot) + str(snapshot).startswith("tank/ROOT@") + counter = counter + 1 + + snapshots = gen_snapshots_for_tank_ROOT() + MAX_COUNT = 30 + with mock.patch.object(Dataset, "snapshots", snapshots): + with mock.patch.object( + Snapshot, + "destroy", + lambda snapshot: validate_snapshot_selection(snapshot), + ): + ds = Dataset.from_string("tank/ROOT") + + counter = 0 + ds._clean_old_snapshots_for_interval("monthly", MAX_COUNT) + assert counter <= MAX_COUNT # not enough snapshots to reach MAX_COUNT + + counter = 0 + ds._clean_old_snapshots_for_interval("daily", MAX_COUNT) + assert counter == MAX_COUNT + + +def gen_snapshots_for_tank_ROOT() -> list[Snapshot]: + return [ + Snapshot.from_string(line) for line in SNAPSHOTS.split("\n") if line.strip() + ] + + +SNAPSHOTS = """ +tank/ROOT@znap_2021-11-30-2300_monthly +tank/ROOT@znap_2021-12-31-2300_monthly +tank/ROOT@znap_2022-01-31-2300_monthly +tank/ROOT@znap_2022-02-28-2300_monthly +tank/ROOT@znap_2022-03-13-2300_weekly +tank/ROOT@znap_2022-03-20-2300_weekly +tank/ROOT@znap_2022-03-27-2200_weekly +tank/ROOT@znap_2022-03-31-2200_monthly +tank/ROOT@znap_2022-04-03-2200_weekly +tank/ROOT@znap_2022-04-03-2200_daily +tank/ROOT@znap_2022-04-04-2200_daily +tank/ROOT@znap_2022-04-05-2200_daily +tank/ROOT@znap_2022-04-06-2200_daily +tank/ROOT@znap_2022-04-07-2200_daily +tank/ROOT@znap_2022-04-08-2200_daily +tank/ROOT@znap_2022-04-09-2200_daily +tank/ROOT@znap_2022-04-10-2200_weekly +tank/ROOT@znap_2022-04-10-2200_daily +tank/ROOT@znap_2022-04-11-2200_daily +tank/ROOT@znap_2022-04-12-2200_daily +tank/ROOT@znap_2022-04-13-2200_daily +tank/ROOT@znap_2022-04-14-2200_daily +tank/ROOT@znap_2022-04-15-2200_daily +tank/ROOT@znap_2022-04-16-2200_daily +tank/ROOT@znap_2022-04-17-2200_daily +tank/ROOT@znap_2022-04-17-2200_weekly +tank/ROOT@znap_2022-04-18-2200_daily +tank/ROOT@znap_2022-04-19-2200_daily +tank/ROOT@znap_2022-04-20-2200_daily +tank/ROOT@znap_2022-04-21-2200_daily +tank/ROOT@znap_2022-04-22-2200_daily +tank/ROOT@znap_2022-04-23-2200_daily +tank/ROOT@znap_2022-04-24-2200_daily +tank/ROOT@znap_2022-04-24-2200_weekly +tank/ROOT@znap_2022-04-25-2200_daily +tank/ROOT@znap_2022-04-26-2200_daily +tank/ROOT@znap_2022-04-27-2200_daily +tank/ROOT@znap_2022-04-28-2200_daily +tank/ROOT@znap_2022-04-29-2200_daily +tank/ROOT@znap_2022-04-30-2200_daily +tank/ROOT@znap_2022-04-30-2200_monthly +tank/ROOT@znap_2022-05-01-2200_daily +tank/ROOT@znap_2022-05-01-2200_weekly +tank/ROOT@znap_2022-05-02-2200_daily +tank/ROOT@znap_2022-05-03-0900_hourly +tank/ROOT@znap_2022-05-03-1000_hourly +tank/ROOT@znap_2022-05-03-1100_hourly +tank/ROOT@znap_2022-05-03-1200_hourly +tank/ROOT@znap_2022-05-03-1300_hourly +tank/ROOT@znap_2022-05-03-1400_hourly +tank/ROOT@znap_2022-05-03-1500_hourly +tank/ROOT@znap_2022-05-03-1600_hourly +tank/ROOT@znap_2022-05-03-1700_hourly +tank/ROOT@znap_2022-05-03-1800_hourly +tank/ROOT@znap_2022-05-03-1900_hourly +tank/ROOT@znap_2022-05-03-2000_hourly +tank/ROOT@znap_2022-05-03-2100_hourly +tank/ROOT@znap_2022-05-03-2200_hourly +tank/ROOT@znap_2022-05-03-2200_daily +tank/ROOT@znap_2022-05-03-2300_hourly +tank/ROOT@znap_2022-05-04-0000_hourly +tank/ROOT@znap_2022-05-04-0100_hourly +tank/ROOT@znap_2022-05-04-0200_hourly +tank/ROOT@znap_2022-05-04-0300_hourly +tank/ROOT@znap_2022-05-04-0400_hourly +tank/ROOT@znap_2022-05-04-0500_hourly +tank/ROOT@znap_2022-05-04-0600_hourly +tank/ROOT@znap_2022-05-04-0700_hourly +tank/ROOT@znap_2022-05-04-0715_frequent +tank/ROOT@znap_2022-05-04-0730_frequent +tank/ROOT@znap_2022-05-04-0745_frequent +tank/ROOT@znap_2022-05-04-0800_hourly +tank/ROOT@znap_2022-05-04-0800_frequent +"""