Merge pull request #309 from databasus/develop

FIX (tests): Fix database backups cleanup when DI does not allow to d…
This commit is contained in:
Rostislav Dugin
2026-01-27 15:39:53 +03:00
committed by GitHub
8 changed files with 72 additions and 58 deletions

View File

@@ -37,7 +37,7 @@ func Test_BackupExecuted_NotificationSent(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond) // Wait for cascading deletes
time.Sleep(50 * time.Millisecond) // Wait for cascading deletes
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -171,7 +171,7 @@ func Test_BackupSizeLimits(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond) // Wait for cascading deletes
time.Sleep(50 * time.Millisecond) // Wait for cascading deletes
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)

View File

@@ -35,7 +35,7 @@ func Test_CleanOldBackups_DeletesBackupsOlderThanStorePeriod(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -116,7 +116,7 @@ func Test_CleanOldBackups_SkipsDatabaseWithForeverStorePeriod(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -175,7 +175,7 @@ func Test_CleanExceededBackups_WhenUnderLimit_NoBackupsDeleted(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -236,7 +236,7 @@ func Test_CleanExceededBackups_WhenOverLimit_DeletesOldestBackups(t *testing.T)
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -311,7 +311,7 @@ func Test_CleanExceededBackups_SkipsInProgressBackups(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -400,7 +400,7 @@ func Test_CleanExceededBackups_WithZeroLimit_SkipsDatabase(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -461,7 +461,7 @@ func Test_GetTotalSizeByDatabase_CalculatesCorrectly(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -552,7 +552,7 @@ func Test_DeleteBackup_WhenStorageDeleteFails_BackupStillRemovedFromDatabase(t *
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
notifiers.RemoveTestNotifier(notifier)
storages.RemoveTestStorage(testStorage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)

View File

@@ -41,7 +41,7 @@ func Test_RunPendingBackups_WhenLastBackupWasYesterday_CreatesNewBackup(t *testi
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -110,7 +110,7 @@ func Test_RunPendingBackups_WhenLastBackupWasRecentlyCompleted_SkipsBackup(t *te
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -178,7 +178,7 @@ func Test_RunPendingBackups_WhenLastBackupFailedAndRetriesDisabled_SkipsBackup(t
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -250,7 +250,7 @@ func Test_RunPendingBackups_WhenLastBackupFailedAndRetriesEnabled_CreatesNewBack
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -323,7 +323,7 @@ func Test_RunPendingBackups_WhenFailedBackupsExceedMaxRetries_SkipsBackup(t *tes
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -395,7 +395,7 @@ func Test_RunPendingBackups_WhenBackupsDisabled_SkipsBackup(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -458,7 +458,7 @@ func Test_CheckDeadNodesAndFailBackups_WhenNodeDies_FailsBackupAndCleansUpRegist
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -561,7 +561,7 @@ func Test_OnBackupCompleted_WhenTaskIsNotBackup_SkipsProcessing(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -742,7 +742,7 @@ func Test_FailBackupsInProgress_WhenSchedulerStarts_CancelsBackupsAndUpdatesStat
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -857,7 +857,7 @@ func Test_StartBackup_WhenBackupCompletes_DecrementsActiveTaskCount(t *testing.T
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -953,7 +953,7 @@ func Test_StartBackup_WhenBackupFails_DecrementsActiveTaskCount(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -1054,7 +1054,7 @@ func Test_StartBackup_WhenBackupAlreadyInProgress_SkipsNewBackup(t *testing.T) {
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -1124,7 +1124,7 @@ func Test_RunPendingBackups_WhenLastBackupFailedWithIsSkipRetry_SkipsBackupEvenW
}
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)
@@ -1225,7 +1225,7 @@ func Test_StartBackup_When2BackupsStartedForDifferentDatabases_BothUseCasesAreCa
databases.RemoveTestDatabase(database1)
databases.RemoveTestDatabase(database2)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
notifiers.RemoveTestNotifier(notifier)
workspaces_testing.RemoveTestWorkspace(workspace, router)

View File

@@ -104,7 +104,7 @@ func WaitForBackupCompletion(
backups, err := backupRepository.FindByDatabaseID(databaseID)
if err != nil {
t.Logf("WaitForBackupCompletion: error finding backups: %v", err)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
continue
}
@@ -130,7 +130,7 @@ func WaitForBackupCompletion(
}
}
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
}
t.Logf("WaitForBackupCompletion: timeout waiting for backup to complete")
@@ -170,7 +170,7 @@ func StartBackuperNodeForTest(t *testing.T, backuperNode *BackuperNode) context.
}
}
}
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
}
t.Fatalf("BackuperNode failed to register in registry within timeout")
@@ -227,7 +227,7 @@ func StopBackuperNodeForTest(t *testing.T, cancel context.CancelFunc, backuperNo
return
}
}
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
}
t.Logf("BackuperNode stop completed for %s", backuperNode.nodeID)
@@ -287,7 +287,7 @@ func WaitForActiveTasksDecrease(
stats, err := backupNodesRegistry.GetBackupNodesStats()
if err != nil {
t.Logf("WaitForActiveTasksDecrease: error getting node stats: %v", err)
time.Sleep(1000 * time.Millisecond)
time.Sleep(500 * time.Millisecond)
continue
}
@@ -310,7 +310,7 @@ func WaitForActiveTasksDecrease(
}
}
time.Sleep(1000 * time.Millisecond)
time.Sleep(500 * time.Millisecond)
}
t.Logf("WaitForActiveTasksDecrease: timeout waiting for active tasks to decrease")

View File

@@ -125,7 +125,7 @@ func Test_GetBackups_PermissionsEnforced(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
})
@@ -375,7 +375,7 @@ func Test_DeleteBackup_PermissionsEnforced(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
})
@@ -421,7 +421,7 @@ func Test_DeleteBackup_AuditLogWritten(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -517,7 +517,7 @@ func Test_GenerateDownloadToken_PermissionsEnforced(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
})
@@ -559,7 +559,7 @@ func Test_DownloadBackup_WithValidToken_Success(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -584,7 +584,7 @@ func Test_DownloadBackup_WithoutToken_Unauthorized(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -609,7 +609,7 @@ func Test_DownloadBackup_WithInvalidToken_Unauthorized(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -664,7 +664,7 @@ func Test_DownloadBackup_WithExpiredToken_Unauthorized(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -710,7 +710,7 @@ func Test_DownloadBackup_TokenUsedOnce_CannotReuseToken(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -771,7 +771,7 @@ func Test_DownloadBackup_WithDifferentBackupToken_Unauthorized(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database1)
databases.RemoveTestDatabase(database2)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -828,7 +828,7 @@ func Test_DownloadBackup_AuditLogWritten(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -934,7 +934,7 @@ func Test_DownloadBackup_ProperFilenameForPostgreSQL(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
})
@@ -1032,7 +1032,7 @@ func Test_CancelBackup_InProgressBackup_SuccessfullyCancelled(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -1084,7 +1084,7 @@ func Test_ConcurrentDownloadPrevention(t *testing.T) {
downloadComplete <- true
}()
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
service := GetBackupService()
if !service.IsDownloadInProgress(owner.UserID) {
@@ -1093,7 +1093,7 @@ func Test_ConcurrentDownloadPrevention(t *testing.T) {
// Cleanup before early return
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
return
@@ -1145,7 +1145,7 @@ func Test_ConcurrentDownloadPrevention(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -1185,7 +1185,7 @@ func Test_GenerateDownloadToken_BlockedWhenDownloadInProgress(t *testing.T) {
downloadComplete <- true
}()
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
service := GetBackupService()
if !service.IsDownloadInProgress(owner.UserID) {
@@ -1194,7 +1194,7 @@ func Test_GenerateDownloadToken_BlockedWhenDownloadInProgress(t *testing.T) {
// Cleanup before early return
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
return
@@ -1239,7 +1239,7 @@ func Test_GenerateDownloadToken_BlockedWhenDownloadInProgress(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -1465,7 +1465,7 @@ func Test_BandwidthThrottling_SingleDownload_Uses75Percent(t *testing.T) {
downloadComplete <- true
}()
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
activeCount := bandwidthManager.GetActiveDownloadCount()
if activeCount > initialCount {
@@ -1478,13 +1478,13 @@ func Test_BandwidthThrottling_SingleDownload_Uses75Percent(t *testing.T) {
<-downloadStarted
}
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
finalCount := bandwidthManager.GetActiveDownloadCount()
assert.Equal(t, initialCount, finalCount, "Download should be unregistered after completion")
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -1609,7 +1609,7 @@ func Test_BandwidthThrottling_MultipleDownloads_ShareBandwidth(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}
@@ -1681,7 +1681,7 @@ func Test_BandwidthThrottling_DynamicAdjustment(t *testing.T) {
complete1 <- true
}()
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
go func() {
test_utils.MakeGetRequest(
@@ -1703,7 +1703,7 @@ func Test_BandwidthThrottling_DynamicAdjustment(t *testing.T) {
// Cleanup
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
storages.RemoveTestStorage(storage.ID)
workspaces_testing.RemoveTestWorkspace(workspace, router)
}

View File

@@ -44,7 +44,7 @@ func WaitForBackupCompletion(
backups, err := backupRepository.FindByDatabaseID(databaseID)
if err != nil {
t.Logf("WaitForBackupCompletion: error finding backups: %v", err)
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
continue
}
@@ -70,7 +70,7 @@ func WaitForBackupCompletion(
}
}
time.Sleep(100 * time.Millisecond)
time.Sleep(50 * time.Millisecond)
}
t.Logf("WaitForBackupCompletion: timeout waiting for backup to complete")

View File

@@ -773,7 +773,7 @@ func Test_TransferDatabase_PermissionsEnforced(t *testing.T) {
defer func() {
// Cleanup in correct order to avoid foreign key violations
databases.RemoveTestDatabase(database)
time.Sleep(100 * time.Millisecond) // Wait for cascade delete of backup_config
time.Sleep(50 * time.Millisecond) // Wait for cascade delete of backup_config
storages.RemoveTestStorage(targetStorage.ID)
workspaces_testing.RemoveTestWorkspace(sourceWorkspace, router)
workspaces_testing.RemoveTestWorkspace(targetWorkspace, router)

View File

@@ -10,6 +10,7 @@ import (
"databasus-backend/internal/features/databases/databases/postgresql"
"databasus-backend/internal/features/notifiers"
"databasus-backend/internal/features/storages"
"databasus-backend/internal/storage"
"databasus-backend/internal/util/tools"
"github.com/google/uuid"
@@ -104,6 +105,19 @@ func CreateTestDatabase(
}
func RemoveTestDatabase(database *Database) {
// Delete backups and backup configs associated with this database
// We hardcode SQL here because we cannot call backups feature due to DI inversion
// (databases package cannot import backups package as backups already imports databases)
db := storage.GetDb()
if err := db.Exec("DELETE FROM backups WHERE database_id = ?", database.ID).Error; err != nil {
panic(fmt.Sprintf("failed to delete backups: %v", err))
}
if err := db.Exec("DELETE FROM backup_configs WHERE database_id = ?", database.ID).Error; err != nil {
panic(fmt.Sprintf("failed to delete backup config: %v", err))
}
err := databaseRepository.Delete(database.ID)
if err != nil {
panic(err)