31 lines
1.0 KiB
Go
31 lines
1.0 KiB
Go
package agent
|
|
|
|
import "testing"
|
|
|
|
func TestExplicitRetryReservesEachRequestOnlyOnce(t *testing.T) {
|
|
spool, err := NewSpool(t.TempDir(), nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
record := UploadAttempt{UploadID: "upload-a", RequestID: "first-request", Identity: "identity-a", State: "attempted"}
|
|
if err := spool.ClaimUpload(record); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, request := range []string{"second-request", "third-request"} {
|
|
if err := spool.ReserveUploadRetry(record.UploadID, request); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
for _, request := range []string{"first-request", "second-request", "third-request"} {
|
|
if err := spool.ReserveUploadRetry(record.UploadID, request); err == nil {
|
|
t.Fatalf("request %s reused", request)
|
|
}
|
|
}
|
|
if err := spool.RecordUploadResult(record.UploadID, UploadResult{SizeBytes: 4, SHA256: "checksum", StatusCode: 200}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := spool.ReserveUploadRetry(record.UploadID, "fourth-request"); err == nil {
|
|
t.Fatal("successful PUT was authorized again")
|
|
}
|
|
}
|