50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package historyimport
|
|
|
|
import (
|
|
"context"
|
|
"net/url"
|
|
"testing"
|
|
"time"
|
|
|
|
"golang.org/x/time/rate"
|
|
)
|
|
|
|
func TestUpstreamRateLimiter_LimitsPerServer(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
limiter := newUpstreamRateLimiter(rate.Every(200*time.Millisecond), 1)
|
|
serverA, err := url.Parse("https://plex.example/library/metadata/1")
|
|
if err != nil {
|
|
t.Fatalf("Parse(serverA): %v", err)
|
|
}
|
|
serverB, err := url.Parse("https://emby.example/Users/1/Items")
|
|
if err != nil {
|
|
t.Fatalf("Parse(serverB): %v", err)
|
|
}
|
|
|
|
if err := limiter.Wait(context.Background(), serverA); err != nil {
|
|
t.Fatalf("first wait: %v", err)
|
|
}
|
|
|
|
limitedCtx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
|
|
defer cancel()
|
|
err = limiter.Wait(limitedCtx, serverA)
|
|
if err == nil {
|
|
t.Fatal("second wait succeeded, want same-server request to be limited")
|
|
}
|
|
|
|
if err := limiter.Wait(context.Background(), serverB); err != nil {
|
|
t.Fatalf("different server wait: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestHistoryImportClients_ShareServerLimiter(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
plex := NewPlexClient()
|
|
emby := NewEmbyClient()
|
|
if plex.limiter != emby.limiter {
|
|
t.Fatal("expected Plex and Emby clients to share the same upstream limiter")
|
|
}
|
|
}
|