Files
xk-hy-transit-go/internal/hyfile/throttle_test.go
2026-05-28 16:39:51 +08:00

71 lines
1.8 KiB
Go

package hyfile
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"time"
)
func TestAcquireUploadSlot_respectsInterval(t *testing.T) {
SetUploadMinInterval(80 * time.Millisecond)
t.Cleanup(func() {
SetUploadMinInterval(defaultUploadMinInterval)
ResetUploadThrottleForTest()
})
ResetUploadThrottleForTest()
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(map[string]any{
"success": true,
"record": map[string]string{"fileId": "ok"},
})
}))
defer srv.Close()
pdf := []byte("%PDF-1.4")
token := "ak:sign:policy"
start := time.Now()
if _, err := UploadPDF(pdf, "a.pdf", srv.URL, token, ""); err != nil {
t.Fatalf("first upload: %v", err)
}
if _, err := UploadPDF(pdf, "b.pdf", srv.URL, token, ""); err != nil {
t.Fatalf("second upload: %v", err)
}
elapsed := time.Since(start)
if elapsed < 75*time.Millisecond {
t.Fatalf("expected throttle wait >= 75ms, elapsed=%s", elapsed)
}
}
func TestAcquireUploadSlot_zeroIntervalNoWait(t *testing.T) {
SetUploadMinInterval(0)
t.Cleanup(func() {
SetUploadMinInterval(defaultUploadMinInterval)
ResetUploadThrottleForTest()
})
ResetUploadThrottleForTest()
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(map[string]any{
"success": true,
"record": map[string]string{"fileId": "ok"},
})
}))
defer srv.Close()
start := time.Now()
pdf := []byte("x")
token := "ak:sign:policy"
for i := 0; i < 2; i++ {
if _, err := UploadPDF(pdf, "x.pdf", srv.URL, token, ""); err != nil {
t.Fatalf("upload %d: %v", i, err)
}
}
if time.Since(start) > 200*time.Millisecond {
t.Fatalf("zero interval should not sleep noticeably, elapsed=%s", time.Since(start))
}
}