]> gitweb.hhaalo.de Git - simple-backup.git/commitdiff
add test for delete old backups
authorBastian Dehn <hhaalo@arcor.de>
Sat, 8 Aug 2026 07:13:09 +0000 (09:13 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 8 Aug 2026 07:13:09 +0000 (09:13 +0200)
src/backup
tests/backup_tests.bats

index 30b85cd8a6a7985740281ec98d0c54c18c568aad..f2d175e1d6716c6edde2a1413f121612bacad6fc 100755 (executable)
@@ -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"
 }
index d0fb9ff210110eb4dddb54e23839eefae950601f..00e92845390bd2e65d796005fc048d90af575f68 100755 (executable)
@@ -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