Ztorrent/internal/magnet/magnet_test.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)
}
}
})
}
}