mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-08 09:30:27 +00:00
57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
package download
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/GopeedLab/gopeed/pkg/base"
|
|
)
|
|
|
|
func TestDownloader_Extension_MagnetMatch(t *testing.T) {
|
|
const magnetURL = "magnet:?xt=urn:btih:0123456789abcdef0123456789abcdef01234567"
|
|
for _, pattern := range []string{"magnet:*", "magnet:?*"} {
|
|
t.Run(pattern, func(t *testing.T) {
|
|
d := NewDownloader(&DownloaderConfig{
|
|
Storage: NewMemStorage(),
|
|
StorageDir: t.TempDir(),
|
|
TempDir: t.TempDir(),
|
|
})
|
|
if err := d.Setup(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer d.Clear()
|
|
|
|
extDir := t.TempDir()
|
|
manifest := fmt.Sprintf(`{"name":"magnet-match","author":"test","title":"Magnet match","version":"1.0.0","scripts":[{"event":"onResolve","match":{"urls":[%q]},"entry":"index.js"}]}`, pattern)
|
|
script := `gopeed.events.onResolve(ctx => {
|
|
ctx.res = {files: [{name: "resolved.txt", size: 1, req: {url: "https://example.com/resolved.txt"}}]};
|
|
});`
|
|
for name, content := range map[string]string{"manifest.json": manifest, "index.js": script} {
|
|
if err := os.WriteFile(filepath.Join(extDir, name), []byte(content), 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
if _, err := d.InstallExtensionByFolder(extDir, true); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
for _, req := range []*base.Request{
|
|
{URL: magnetURL},
|
|
{URL: "https://example.com/rewritten", RawURL: magnetURL},
|
|
} {
|
|
// Exercise extension activation without falling back to a live
|
|
// BitTorrent metadata lookup when the pattern fails to match.
|
|
res, err := d.triggerOnResolve(req)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if res == nil || len(res.Files) != 1 || res.Files[0].Name != "resolved.txt" {
|
|
t.Fatalf("magnet extension did not resolve request %+v: %+v", req, res)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|