package backupexecutor import ( "testing" "time" "github.com/syncova/syncova/packages/jobs" "github.com/syncova/syncova/packages/scheduler" ) // TestAlwaysFullForcesEveryRun haelt die dauerhafte Vollsicherung fest. func TestAlwaysFullForcesEveryRun(testInstance *testing.T) { fullJob := &jobs.Job{BackupMode: jobs.BackupModeAlwaysFull} // An jedem beliebigen Tag. for dayOffset := 0; dayOffset < 7; dayOffset++ { runTime := time.Date(2026, 8, 17, 2, 0, 0, 0, time.UTC).AddDate(0, 0, dayOffset) if !shouldForceFullBackup(fullJob, runTime) { testInstance.Errorf("am %s wurde keine Vollsicherung erzwungen", runTime.Weekday()) } } } // TestIncrementalIsTheDefault haelt fest, dass ohne Angabe nichts erzwungen wird. // // Der Standard ist das bisherige Verhalten: Liegt ein Elternbackup vor, wird // inkrementell gesichert. Ein Auftrag aus der Zeit vor dieser Einstellung darf // sich nicht ploetzlich anders verhalten. func TestIncrementalIsTheDefault(testInstance *testing.T) { if shouldForceFullBackup(&jobs.Job{}, time.Now()) { testInstance.Error("ohne Angabe wurde eine Vollsicherung erzwungen") } if shouldForceFullBackup(nil, time.Now()) { testInstance.Error("ohne Auftrag wurde eine Vollsicherung erzwungen") } } // TestFullBackupWeekdayUsesScheduleTimeZone ist der eigentliche Punkt. // // Der Wochentag muss in der Zeitzone des Zeitplans bestimmt werden. Rechnete // der Server in UTC, bekaeme ein Betreiber in Berlin seine Vollsicherung am // Donnerstagabend — und wunderte sich, warum sie freitags fehlt. func TestFullBackupWeekdayUsesScheduleTimeZone(testInstance *testing.T) { friday := time.Friday berlinJob := &jobs.Job{ FullBackupWeekday: &friday, Schedule: scheduler.Schedule{TimeZone: "Europe/Berlin"}, } // Donnerstag, 23:30 UTC — in Berlin ist es bereits Freitag, 01:30. thursdayNightUTC := time.Date(2026, 8, 20, 23, 30, 0, 0, time.UTC) if thursdayNightUTC.Weekday() != time.Thursday { testInstance.Fatalf("Testvoraussetzung falsch: %s", thursdayNightUTC.Weekday()) } if !shouldForceFullBackup(berlinJob, thursdayNightUTC) { testInstance.Error("die Zeitzone des Zeitplans wird nicht beachtet: " + "in Berlin ist Freitag, in UTC noch Donnerstag") } // Und umgekehrt: Freitag 23:30 UTC ist in Berlin schon Samstag. fridayNightUTC := time.Date(2026, 8, 21, 23, 30, 0, 0, time.UTC) if shouldForceFullBackup(berlinJob, fridayNightUTC) { testInstance.Error("es wurde am Samstag (Berliner Zeit) voll gesichert") } } // TestFullBackupWeekdayFallsBackToUTC haelt den Fall ohne Zeitzone fest. // // Ohne Angabe gilt UTC, nicht die Ortszeit des Servers — sonst liefe dieselbe // Konfiguration auf zwei Servern an verschiedenen Tagen voll. func TestFullBackupWeekdayFallsBackToUTC(testInstance *testing.T) { sunday := time.Sunday utcJob := &jobs.Job{FullBackupWeekday: &sunday} sundayUTC := time.Date(2026, 8, 16, 12, 0, 0, 0, time.UTC) if sundayUTC.Weekday() != time.Sunday { testInstance.Fatalf("Testvoraussetzung falsch: %s", sundayUTC.Weekday()) } if !shouldForceFullBackup(utcJob, sundayUTC) { testInstance.Error("am Sonntag wurde keine Vollsicherung erzwungen") } }