Files
SpotiFLAC-Mobile/go_backend/extension_transfer_policy_test.go
T

52 lines
1.7 KiB
Go

package gobackend
import (
"testing"
"time"
)
func TestDownloadTransferPolicyParsesAndBoundsManifestCapability(t *testing.T) {
manifest := &ExtensionManifest{Capabilities: map[string]any{
"downloadTransfer": map[string]any{
"maxAttempts": float64(20),
"initialRetryDelayMs": float64(25),
"maxRetryDelayMs": float64(50),
"resumePolicy": "validated",
"persistentCheckpoint": true,
"refreshStreamOnStatus": []any{float64(401), float64(410)},
"maxParallelSegments": float64(99),
"maxConcurrentDownloads": float64(99),
},
}}
policy := manifest.DownloadTransferPolicy()
if policy.MaxAttempts != 8 || policy.InitialRetryDelay != 100*time.Millisecond ||
policy.MaxRetryDelay != 100*time.Millisecond || policy.ResumePolicy != "validated" ||
!policy.PersistentCheckpoint || !policy.RefreshStreamOnStatus[401] ||
!policy.RefreshStreamOnStatus[410] || policy.MaxParallelSegments != 8 ||
policy.MaxConcurrentDownloads != 3 {
t.Fatalf("unexpected policy: %#v", policy)
}
}
func TestDownloadTransferCapabilityValidation(t *testing.T) {
valid := map[string]any{"downloadTransfer": map[string]any{
"resumePolicy": "validated",
"persistentCheckpoint": true,
}}
if err := validateDownloadTransferCapability(valid); err != nil {
t.Fatalf("valid capability rejected: %v", err)
}
invalid := []map[string]any{
{"downloadTransfer": "yes"},
{"downloadTransfer": map[string]any{"resumePolicy": "unsafe"}},
{"downloadTransfer": map[string]any{"persistentCheckpoint": "yes"}},
}
for _, capabilities := range invalid {
if err := validateDownloadTransferCapability(capabilities); err == nil {
t.Fatalf("invalid capability accepted: %#v", capabilities)
}
}
}