59 lines
2.1 KiB
Go
59 lines
2.1 KiB
Go
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)
|
|
}
|
|
}
|