2023-10-16 09:18:40 +00:00
|
|
|
package vfs
|
2020-09-27 19:23:47 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/anacrolix/torrent"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
const testMagnet = "magnet:?xt=urn:btih:a88fda5954e89178c372716a6a78b8180ed4dad3&dn=The+WIRED+CD+-+Rip.+Sample.+Mash.+Share&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fwired-cd.torrent"
|
|
|
|
|
2021-11-29 10:07:54 +00:00
|
|
|
var Cli *torrent.Client
|
2020-09-27 19:23:47 +00:00
|
|
|
|
2021-11-29 10:07:54 +00:00
|
|
|
func TestMain(m *testing.M) {
|
2020-09-27 19:23:47 +00:00
|
|
|
cfg := torrent.NewDefaultClientConfig()
|
|
|
|
cfg.DataDir = os.TempDir()
|
|
|
|
|
2021-12-18 07:28:35 +00:00
|
|
|
// disable webseeds to avoid a panic when closing client on tests
|
|
|
|
cfg.DisableWebseeds = true
|
|
|
|
|
2020-09-27 19:23:47 +00:00
|
|
|
client, err := torrent.NewClient(cfg)
|
2021-11-29 10:07:54 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
Cli = client
|
|
|
|
|
|
|
|
exitVal := m.Run()
|
|
|
|
|
|
|
|
client.Close()
|
2020-09-27 19:23:47 +00:00
|
|
|
|
2021-11-29 10:07:54 +00:00
|
|
|
os.Exit(exitVal)
|
|
|
|
}
|
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// func TestTorrentFilesystem(t *testing.T) {
|
|
|
|
// require := require.New(t)
|
2021-11-29 10:07:54 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// to, err := Cli.AddMagnet(testMagnet)
|
|
|
|
// require.NoError(err)
|
2020-09-27 19:23:47 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// tfs := NewTorrentFs(600)
|
|
|
|
// tfs.AddTorrent(to)
|
2020-09-27 19:23:47 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// files, err := tfs.ReadDir("/")
|
|
|
|
// require.NoError(err)
|
|
|
|
// require.Len(files, 1)
|
|
|
|
// require.Contains(files, "The WIRED CD - Rip. Sample. Mash. Share")
|
2020-09-27 19:23:47 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// files, err = tfs.ReadDir("/The WIRED CD - Rip. Sample. Mash. Share")
|
|
|
|
// require.NoError(err)
|
|
|
|
// require.Len(files, 18)
|
2020-09-27 19:23:47 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// f, err := tfs.Open("/The WIRED CD - Rip. Sample. Mash. Share/not_existing_file.txt")
|
|
|
|
// require.Equal(os.ErrNotExist, err)
|
|
|
|
// require.Nil(f)
|
2020-09-27 19:23:47 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// f, err = tfs.Open("/The WIRED CD - Rip. Sample. Mash. Share/01 - Beastie Boys - Now Get Busy.mp3")
|
|
|
|
// require.NoError(err)
|
|
|
|
// require.NotNil(f)
|
|
|
|
// require.Equal(f.Size(), int64(1964275))
|
2021-04-25 09:00:27 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// b := make([]byte, 10)
|
2021-04-25 09:00:27 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// n, err := f.Read(b)
|
|
|
|
// require.NoError(err)
|
|
|
|
// require.Equal(10, n)
|
|
|
|
// require.Equal([]byte{0x49, 0x44, 0x33, 0x3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x76}, b)
|
2021-04-25 09:00:27 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// n, err = f.ReadAt(b, 10)
|
|
|
|
// require.NoError(err)
|
|
|
|
// require.Equal(10, n)
|
2021-04-25 09:00:27 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// n, err = f.ReadAt(b, 10000)
|
|
|
|
// require.NoError(err)
|
|
|
|
// require.Equal(10, n)
|
2021-04-25 09:00:27 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// tfs.RemoveTorrent(to.InfoHash().String())
|
|
|
|
// files, err = tfs.ReadDir("/")
|
|
|
|
// require.NoError(err)
|
|
|
|
// require.Len(files, 0)
|
2021-11-29 10:07:54 +00:00
|
|
|
|
2023-10-16 09:18:40 +00:00
|
|
|
// require.NoError(f.Close())
|
|
|
|
// }
|
2021-11-29 10:07:54 +00:00
|
|
|
|
2021-12-01 18:59:21 +00:00
|
|
|
func TestReadAtTorrent(t *testing.T) {
|
2021-11-29 10:07:54 +00:00
|
|
|
require := require.New(t)
|
|
|
|
|
|
|
|
to, err := Cli.AddMagnet(testMagnet)
|
|
|
|
require.NoError(err)
|
|
|
|
|
|
|
|
<-to.GotInfo()
|
|
|
|
torrFile := to.Files()[0]
|
|
|
|
|
|
|
|
tf := torrentFile{
|
2021-12-01 18:59:21 +00:00
|
|
|
readerFunc: torrFile.NewReader,
|
|
|
|
len: torrFile.Length(),
|
|
|
|
timeout: 500,
|
2021-11-29 10:07:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
defer tf.Close()
|
|
|
|
|
|
|
|
toRead := make([]byte, 5)
|
|
|
|
n, err := tf.ReadAt(toRead, 6)
|
|
|
|
require.NoError(err)
|
|
|
|
require.Equal(5, n)
|
|
|
|
require.Equal([]byte{0x0, 0x0, 0x1f, 0x76, 0x54}, toRead)
|
|
|
|
|
|
|
|
n, err = tf.ReadAt(toRead, 0)
|
|
|
|
require.NoError(err)
|
|
|
|
require.Equal(5, n)
|
|
|
|
require.Equal([]byte{0x49, 0x44, 0x33, 0x3, 0x0}, toRead)
|
|
|
|
}
|
2021-12-01 18:59:21 +00:00
|
|
|
|
|
|
|
func TestReadAtWrapper(t *testing.T) {
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
require := require.New(t)
|
|
|
|
|
|
|
|
to, err := Cli.AddMagnet(testMagnet)
|
|
|
|
require.NoError(err)
|
|
|
|
|
|
|
|
<-to.GotInfo()
|
|
|
|
torrFile := to.Files()[0]
|
|
|
|
|
|
|
|
r := newReadAtWrapper(torrFile.NewReader(), 10)
|
|
|
|
defer r.Close()
|
|
|
|
|
|
|
|
toRead := make([]byte, 5)
|
|
|
|
n, err := r.ReadAt(toRead, 6)
|
|
|
|
require.NoError(err)
|
|
|
|
require.Equal(5, n)
|
|
|
|
require.Equal([]byte{0x0, 0x0, 0x1f, 0x76, 0x54}, toRead)
|
|
|
|
|
|
|
|
n, err = r.ReadAt(toRead, 0)
|
|
|
|
require.NoError(err)
|
|
|
|
require.Equal(5, n)
|
|
|
|
require.Equal([]byte{0x49, 0x44, 0x33, 0x3, 0x0}, toRead)
|
|
|
|
}
|