51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
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")
|
|
}
|
|
}
|