8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
11 "github.com/anacrolix/torrent"
12 "github.com/anacrolix/torrent/internal/testutil"
13 "github.com/anacrolix/torrent/metainfo"
14 "github.com/anacrolix/torrent/storage"
17 func TestReceiveChunkStorageFailure(t *testing.T) {
18 seederDataDir, metainfo := testutil.GreetingTestTorrent()
19 defer os.RemoveAll(seederDataDir)
20 seederClientConfig := torrent.TestingConfig()
21 seederClientConfig.Debug = true
22 seederClientStorage := storage.NewMMap(seederDataDir)
23 defer seederClientStorage.Close()
24 seederClientConfig.DefaultStorage = seederClientStorage
25 seederClientConfig.Seed = true
26 seederClientConfig.Debug = true
27 seederClient, err := torrent.NewClient(seederClientConfig)
28 require.NoError(t, err)
29 defer testutil.ExportStatusWriter(seederClient, "s")()
30 leecherClientConfig := torrent.TestingConfig()
31 leecherClientConfig.Debug = true
32 leecherClient, err := torrent.NewClient(leecherClientConfig)
33 require.NoError(t, err)
34 defer testutil.ExportStatusWriter(leecherClient, "l")()
35 leecherTorrent, new, err := leecherClient.AddTorrentSpec(&torrent.TorrentSpec{
36 InfoHash: metainfo.HashInfoBytes(),
37 Storage: diskFullStorage{},
39 require.NoError(t, err)
41 seederTorrent, err := seederClient.AddTorrent(metainfo)
42 require.NoError(t, err)
43 // Tell the seeder to find the leecher. Is it guaranteed seeders will always try to do this?
44 seederTorrent.AddClientPeer(leecherClient)
45 //leecherTorrent.AddClientPeer(seederClient)
46 <-leecherTorrent.GotInfo()
47 assertReadAllGreeting(t, leecherTorrent.NewReader())
50 type diskFullStorage struct{}
52 func (me diskFullStorage) ReadAt(p []byte, off int64) (n int, err error) {
56 func (me diskFullStorage) WriteAt(p []byte, off int64) (n int, err error) {
57 return 1, errors.New("disk full")
60 func (me diskFullStorage) MarkComplete() error {
64 func (me diskFullStorage) MarkNotComplete() error {
68 func (me diskFullStorage) Completion() storage.Completion {
69 return storage.Completion{
75 func (me diskFullStorage) Piece(metainfo.Piece) storage.PieceImpl {
79 func (me diskFullStorage) Close() error {
83 func (d diskFullStorage) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (storage.TorrentImpl, error) {