package agent import ( "errors" "os" "testing" ) func TestUploadAttemptSurvivesRestartWithoutAnotherPUT(t *testing.T) { root := t.TempDir() spool, err := NewSpool(root, nil) if err != nil { t.Fatal(err) } record := UploadAttempt{UploadID: "upload-a", Identity: "identity-a", State: "attempted"} if err := spool.ClaimUpload(record); err != nil { t.Fatal(err) } restarted, err := NewSpool(root, nil) if err != nil { t.Fatal(err) } if err := restarted.ClaimUpload(record); !errors.Is(err, os.ErrExist) { t.Fatalf("duplicate PUT was not prevented: %v", err) } recovered, err := restarted.LoadUploadAttempt("upload-a") if err != nil { t.Fatal(err) } if recovered.State != "attempted" { t.Fatal("unknown PUT attempt lost") } result := UploadResult{SizeBytes: 10, SHA256: "checksum", StatusCode: 200} if err := restarted.RecordUploadResult("upload-a", result); err != nil { t.Fatal(err) } recovered, err = spool.LoadUploadAttempt("upload-a") if err != nil { t.Fatal(err) } if recovered.State != "uploaded" || recovered.Result != result { t.Fatal("notification recovery lost original upload result") } if err := spool.CompleteUploadNotification("upload-a"); err != nil { t.Fatal(err) } if err := spool.RecordUploadResult("upload-a", result); err == nil { t.Fatal("completed upload regressed") } }