mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-09-04 01:00:44 +02:00
52 lines
1.7 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|