]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Improve metainfo.MetaInfo.Magnet interface and add tests
authorMatt Joiner <anacrolix@gmail.com>
Wed, 24 Feb 2021 01:03:16 +0000 (12:03 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Wed, 24 Feb 2021 01:11:47 +0000 (12:11 +1100)
client_test.go
cmd/torrent-magnet/main.go
metainfo/magnet_test.go
metainfo/metainfo.go
metainfo/metainfo_test.go

index 5abc83e4df4121d76d8d9ed6758d60eaffa44bda..adcd0c720d020e0d1796165c5ccfa408ab659cad 100644 (file)
@@ -672,7 +672,7 @@ func makeMagnet(t *testing.T, cl *Client, dir string, name string) string {
        require.NoError(t, err)
        mi.InfoBytes, err = bencode.Marshal(info)
        require.NoError(t, err)
-       magnet := mi.Magnet(name, mi.HashInfoBytes()).String()
+       magnet := mi.Magnet(nil, &info).String()
        tr, err := cl.AddTorrent(&mi)
        require.NoError(t, err)
        require.True(t, tr.Seeding())
index 7be1e4af7e64d7092873306f8a1d396b3b1d4842..8f04a37dbce34d6dbfb9390296bf8d5ab67763fe 100644 (file)
@@ -23,5 +23,5 @@ func main() {
                os.Exit(1)
        }
 
-       fmt.Fprintf(os.Stdout, "%s\n", mi.Magnet(info.Name, mi.HashInfoBytes()).String())
+       fmt.Fprintf(os.Stdout, "%s\n", mi.Magnet(nil, &info).String())
 }
index e11abf6e95f2aba8021124e77933b44257ff6d88..24db8fdba4b746867baaf7564f8f8649b56031cc 100644 (file)
@@ -76,7 +76,7 @@ func TestMagnetize(t *testing.T) {
 
        info, err := mi.UnmarshalInfo()
        require.NoError(t, err)
-       m := mi.Magnet(info.Name, mi.HashInfoBytes())
+       m := mi.Magnet(nil, &info)
 
        assert.EqualValues(t, "bootstrap.dat", m.DisplayName)
 
index 2e471c8acbdfbb3eb42dedc53f6f8f324cb17def..9b06ebd46f86a1219f29b214d6da877a22b8c034 100644 (file)
@@ -67,13 +67,21 @@ func (mi *MetaInfo) SetDefaults() {
        // mi.Info.PieceLength = 256 * 1024
 }
 
-// Creates a Magnet from a MetaInfo.
-func (mi *MetaInfo) Magnet(displayName string, infoHash Hash) (m Magnet) {
+// Creates a Magnet from a MetaInfo. Optional infohash and parsed info can be provided.
+func (mi *MetaInfo) Magnet(infoHash *Hash, info *Info) (m Magnet) {
        for t := range mi.UpvertedAnnounceList().DistinctValues() {
                m.Trackers = append(m.Trackers, t)
        }
-       m.DisplayName = displayName
-       m.InfoHash = infoHash
+       if info != nil {
+               m.DisplayName = info.Name
+       }
+       if infoHash != nil {
+               m.InfoHash = *infoHash
+       } else {
+               m.InfoHash = mi.HashInfoBytes()
+       }
+       //m.Params = make(url.Values)
+       //m.Params["ws"] = mi.UrlList
        return
 }
 
index e54447ae5aadeebffb25a50171f5885dd15a1e24..6aae2b4fec1a3a5cb790ae6ad30035cc5f59207c 100644 (file)
@@ -9,6 +9,7 @@ import (
        "testing"
 
        "github.com/anacrolix/missinggo"
+       qt "github.com/frankban/quicktest"
        "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
 
@@ -121,12 +122,16 @@ func TestMetainfoWithListURLList(t *testing.T) {
        mi, err := LoadFromFile("testdata/SKODAOCTAVIA336x280_archive.torrent")
        require.NoError(t, err)
        assert.Len(t, mi.UrlList, 3)
+       qt.Assert(t, mi.Magnet(nil, nil).String(), qt.ContentEquals,
+               "magnet:?xt=urn:btih:d4b197dff199aad447a9a352e31528adbbd97922&tr=http%3A%2F%2Fbt1.archive.org%3A6969%2Fannounce&tr=http%3A%2F%2Fbt2.archive.org%3A6969%2Fannounce")
 }
 
 func TestMetainfoWithStringURLList(t *testing.T) {
        mi, err := LoadFromFile("testdata/flat-url-list.torrent")
        require.NoError(t, err)
        assert.Len(t, mi.UrlList, 1)
+       qt.Assert(t, mi.Magnet(nil, nil).String(), qt.ContentEquals,
+               "magnet:?xt=urn:btih:9da24e606e4ed9c7b91c1772fb5bf98f82bd9687&tr=http%3A%2F%2Fbt1.archive.org%3A6969%2Fannounce&tr=http%3A%2F%2Fbt2.archive.org%3A6969%2Fannounce")
 }
 
 // https://github.com/anacrolix/torrent/issues/247