73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package magnet
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseMagnetLink(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
uri string
|
|
wantName string
|
|
wantHash string
|
|
wantTrack int
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "valid magnet with tracker",
|
|
uri: "magnet:?xt=urn:btih:3132333435363738393031323334353637383930&dn=ubuntu.iso&tr=http%3A%2F%2Ftracker.com%2Fannounce",
|
|
wantName: "ubuntu.iso",
|
|
wantHash: "3132333435363738393031323334353637383930",
|
|
wantTrack: 1,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "valid magnet base32",
|
|
uri: "magnet:?xt=urn:btih:GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&dn=test",
|
|
wantName: "test",
|
|
wantHash: "3132333435363738393031323334353637383930",
|
|
wantTrack: 0,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "invalid prefix",
|
|
uri: "http://example.com",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "missing xt",
|
|
uri: "magnet:?dn=ubuntu.iso",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "invalid hash length",
|
|
uri: "magnet:?xt=urn:btih:1234&dn=ubuntu",
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
ml, err := Parse(tt.uri)
|
|
if (err != nil) != tt.wantErr {
|
|
t.Fatalf("Parse() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
if err == nil {
|
|
if ml.Name != tt.wantName {
|
|
t.Errorf("Parse() got name = %v, want %v", ml.Name, tt.wantName)
|
|
}
|
|
if gotHash := hex.EncodeToString(ml.InfoHash[:]); gotHash != tt.wantHash {
|
|
t.Errorf("Parse() got hash = %v, want %v", gotHash, tt.wantHash)
|
|
}
|
|
if len(ml.Trackers) != tt.wantTrack {
|
|
t.Errorf("Parse() got %v trackers, want %v", len(ml.Trackers), tt.wantTrack)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|