fix(upload): 分片上传 - 先预留配额并原子提交容量 (#679)
Co-authored-by: ddcat666 <26564566+ddcat666@users.noreply.github.com>
This commit is contained in:
1 parent
398f8e36f5
commit
2cc53fa25c
16 files changed
+661
-36
No files matched your search
@@ -0,0 +1,58 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestChunkQuotaRejectsSingleFileLimit(t *testing.T) {
|
||||
svc := newResourceTestService(t)
|
||||
if _, err := svc.reserveChunkedUploadQuota("user-1", megabytes(defaultRuntimePolicy().Resource.ResourceUploadMB)); err == nil {
|
||||
t.Fatal("chunked upload accepted a file at the exclusive single-file limit")
|
||||
}
|
||||
}
|
||||
|
||||
func TestChunkQuotaReservedUploadConsumesOnce(t *testing.T) {
|
||||
svc := newResourceTestService(t)
|
||||
if err := svc.ReserveChunkUploadSession("user", "session", 7, time.Now().Add(time.Hour), 32); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
day := time.Now().UTC().Format("2006-01-02")
|
||||
if used, _ := svc.repo.DailyUploadBytes("user", day); used != 7 {
|
||||
t.Fatalf("quota before receiving bytes=%d", used)
|
||||
}
|
||||
resource, err := svc.UploadReservedResourceFile("user", "session", "test.txt", 7, "file", 0, 0, 0, bytes.NewReader([]byte("payload")), "logical-key")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if resource.Size != 7 {
|
||||
t.Fatalf("size=%d", resource.Size)
|
||||
}
|
||||
if used, _ := svc.repo.DailyUploadBytes("user", day); used != 7 {
|
||||
t.Fatalf("quota after completion=%d", used)
|
||||
}
|
||||
if err := svc.ReserveChunkUploadSession("user", "retry", 7, time.Now().Add(time.Hour), 32); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
reused, err := svc.UploadReservedResourceFile("user", "retry", "test.txt", 7, "file", 0, 0, 0, bytes.NewReader([]byte("payload")), "logical-key")
|
||||
if err != nil || reused.ID != resource.ID {
|
||||
t.Fatalf("retry=%v err=%v", reused, err)
|
||||
}
|
||||
if used, _ := svc.repo.DailyUploadBytes("user", day); used != 7 {
|
||||
t.Fatalf("quota after replay=%d", used)
|
||||
}
|
||||
}
|
||||
|
||||
func TestChunkQuotaFailedCompletionReleases(t *testing.T) {
|
||||
svc := newResourceTestService(t)
|
||||
if err := svc.ReserveChunkUploadSession("user", "failed", 7, time.Now().Add(time.Hour), 32); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := svc.UploadReservedResourceFile("user", "failed", "test.txt", 7, "file", 0, 0, 0, nil); err == nil {
|
||||
t.Fatal("nil file accepted")
|
||||
}
|
||||
if used, _ := svc.repo.DailyUploadBytes("user", time.Now().UTC().Format("2006-01-02")); used != 0 {
|
||||
t.Fatalf("failed upload retained quota=%d", used)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user