fix: harden DynDNS recovery and publish v1.5.1
This commit is contained in:
1 parent
3383b91e49
commit
81def77e3c
37 files changed
+2415
-250
No files matched your search
@@ -14,6 +14,49 @@ import (
|
||||
"github.com/root-kdw12/hetzner-api-dyndns-records-webinterface/internal/secure"
|
||||
)
|
||||
|
||||
func TestRunCompletionIsAtomicAndInterruptedRunsRecover(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
database, err := Open(ctx, filepath.Join(t.TempDir(), "app.db"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer database.Close()
|
||||
id, err := database.CreateUpdateRun(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := database.db.Exec(`CREATE TRIGGER reject_state BEFORE UPDATE ON settings BEGIN SELECT RAISE(FAIL, 'storage failure'); END`); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := database.CompleteUpdateRun(ctx, id, "ok", "198.51.100.42", "", "completed"); err == nil {
|
||||
t.Fatal("storage failure silently ignored")
|
||||
}
|
||||
runs, err := database.RecentRuns(ctx, 1)
|
||||
if err != nil || runs[0].Status != "running" {
|
||||
t.Fatalf("partially committed run: %#v %v", runs, err)
|
||||
}
|
||||
if _, err := database.db.Exec(`DROP TRIGGER reject_state`); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := database.CompleteUpdateRun(ctx, id, "ok", "198.51.100.42", "", "completed"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := database.CreateUpdateRun(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := database.RecoverInterruptedRuns(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
runs, err = database.RecentRuns(ctx, 10)
|
||||
if err != nil || len(runs) != 2 || runs[0].Status != "error" || runs[0].FinishedAt.IsZero() || runs[1].Status != "ok" {
|
||||
t.Fatalf("incorrect restart recovery: %#v %v", runs, err)
|
||||
}
|
||||
settings, err := database.GetSettings(ctx)
|
||||
if err != nil || settings.LastIPv4 != "198.51.100.42" || settings.LastRunStatus != "error" {
|
||||
t.Fatalf("restart corrupted state: %#v %v", settings, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMigrateAppliesEveryIntermediateSchemaFromV1(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := context.Background()
|
||||
|
||||
Reference in new issue
Block a user