From 8efb219d0a100dfbd76035c3cb9f578601b2cd2d Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 8 Aug 2026 09:13:09 +0200 Subject: [PATCH] add test for delete old backups --- src/backup | 36 +++++++++++++++++++++++++ tests/backup_tests.bats | 58 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 93 insertions(+), 1 deletion(-) diff --git a/src/backup b/src/backup index 30b85cd..f2d175e 100755 --- a/src/backup +++ b/src/backup @@ -249,6 +249,40 @@ get_backup_count() || return 0 } +cleanup_old_backups() +{ + local config="$1" + local count="$2" + local max_count= + local delete_count= + local backup_path= + local backup_name= + max_count=$(echo "$config" | jq --raw-output '.backup_count') + backup_path=$(echo "$config" | jq --raw-output '.backup_path') + backup_name=$(echo "$config" | jq --raw-output '.backup_name') + + [ "$count" -lt "$max_count" ] \ + && echo "ℹ️ INFO: no backup to cleanup" \ + && return 0 + + echo "ℹ️ INFO: current backup count $count" + delete_count=$(("$count" - "$max_count")) + echo "ℹ️ INFO: delete backup count $delete_count" + + mapfile -t backups < <(find "$backup_path" \ + -maxdepth 1 \ + -name \ + "*_${backup_name}" \ + | sort \ + | head --lines "$delete_count") + + local backup + for backup in "${backups[@]}"; do + echo "🗑️ INFO: delete ${backup##*/}" + rmdir "$backup" + done +} + main() { local CONFIG_FILE=${CONFIG_FILE:="config.yaml"} @@ -286,6 +320,8 @@ main() backup_count=$(get_backup_count "$config") \ || return $? echo "ℹ️ INFO: backup count: $backup_count" + cleanup_old_backups "$config" \ + "$backup_count" echo "✅ SUCCESS: backup" } diff --git a/tests/backup_tests.bats b/tests/backup_tests.bats index d0fb9ff..00e9284 100755 --- a/tests/backup_tests.bats +++ b/tests/backup_tests.bats @@ -185,6 +185,9 @@ teardown() { backup_machines() { : } + cleanup_old_backups() { + : + } run main @@ -207,6 +210,9 @@ teardown() { backup_machines() { : } + cleanup_old_backups() { + : + } run main @@ -227,6 +233,9 @@ teardown() { backup_machines() { : } + cleanup_old_backups() { + : + } run main @@ -248,6 +257,9 @@ teardown() { backup_machines() { : } + cleanup_old_backups() { + : + } run main @@ -267,6 +279,9 @@ teardown() { backup_machines() { : } + cleanup_old_backups() { + : + } run main @@ -286,6 +301,9 @@ teardown() { machine_backup_pathes() { : } + cleanup_old_backups() { + : + } run main @@ -310,6 +328,9 @@ teardown() { path_backup() { : } + cleanup_old_backups() { + : + } run main assert_success @@ -487,6 +508,9 @@ teardown() { } }' } + cleanup_old_backups() { + : + } run main assert_success @@ -594,5 +618,37 @@ teardown() { "build/1999-12-30_01_backup" \ "build/1999-12-31_01_backup" \ "build/2000-01-01_01_backup" - rm --recursive --force "build/2000-01-02_backup" + rm --recursive --force "build/2000-01-01_02_backup" +} + +@test "success no backup to cleanup info" { + run main + + assert_success + assert_line --index 0 "⭐ START: backup" + assert_line --partial "ℹ️ INFO: no backup to cleanup" +} + +@test "success cleanup one backup" { + local num= + for i in {1..5}; do + num=$(printf "%02d" "$i") + mkdir --parents "build/1999-10-${num}_01_backup" + mkdir --parents "build/1999-11-${num}_01_backup" + done + for i in {1..3}; do + num=$(printf "%02d" "$i") + mkdir --parents "build/1999-12-${num}_01_backup" + done + mkdir --parents "build/1999-12-16_01_backup" + mkdir --parents "build/1999-12-24_01_backup" + run main + + assert_success + assert_line --index 0 "⭐ START: backup" + assert_line --partial "ℹ️ INFO: current backup count 16" + assert_line --partial "ℹ️ INFO: delete backup count 1" + assert_line --partial "🗑️ INFO: delete 1999-10-01_01_backup" + [ ! -d build/1999-10-01_01_backup ] + rmdir build/1999-* } \ No newline at end of file -- 2.47.3