parent
c855c7a366
commit
b16118ee18
85
test/issue377_test.go
Normal file
85
test/issue377_test.go
Normal file
@ -0,0 +1,85 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/anacrolix/torrent"
|
||||
"github.com/anacrolix/torrent/internal/testutil"
|
||||
"github.com/anacrolix/torrent/metainfo"
|
||||
"github.com/anacrolix/torrent/storage"
|
||||
)
|
||||
|
||||
func TestReceiveChunkStorageFailure(t *testing.T) {
|
||||
seederDataDir, metainfo := testutil.GreetingTestTorrent()
|
||||
defer os.RemoveAll(seederDataDir)
|
||||
seederClientConfig := torrent.TestingConfig()
|
||||
seederClientConfig.Debug = true
|
||||
seederClientStorage := storage.NewMMap(seederDataDir)
|
||||
defer seederClientStorage.Close()
|
||||
seederClientConfig.DefaultStorage = seederClientStorage
|
||||
seederClientConfig.Seed = true
|
||||
seederClientConfig.Debug = true
|
||||
seederClient, err := torrent.NewClient(seederClientConfig)
|
||||
require.NoError(t, err)
|
||||
defer testutil.ExportStatusWriter(seederClient, "s")()
|
||||
leecherClientConfig := torrent.TestingConfig()
|
||||
leecherClientConfig.Debug = true
|
||||
leecherClient, err := torrent.NewClient(leecherClientConfig)
|
||||
require.NoError(t, err)
|
||||
defer testutil.ExportStatusWriter(leecherClient, "l")()
|
||||
leecherTorrent, new, err := leecherClient.AddTorrentSpec(&torrent.TorrentSpec{
|
||||
InfoHash: metainfo.HashInfoBytes(),
|
||||
Storage: diskFullStorage{},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.True(t, new)
|
||||
seederTorrent, err := seederClient.AddTorrent(metainfo)
|
||||
require.NoError(t, err)
|
||||
// Tell the seeder to find the leecher. Is it guaranteed seeders will always try to do this?
|
||||
seederTorrent.AddClientPeer(leecherClient)
|
||||
//leecherTorrent.AddClientPeer(seederClient)
|
||||
<-leecherTorrent.GotInfo()
|
||||
assertReadAllGreeting(t, leecherTorrent.NewReader())
|
||||
}
|
||||
|
||||
type diskFullStorage struct{}
|
||||
|
||||
func (me diskFullStorage) ReadAt(p []byte, off int64) (n int, err error) {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (me diskFullStorage) WriteAt(p []byte, off int64) (n int, err error) {
|
||||
return 1, errors.New("disk full")
|
||||
}
|
||||
|
||||
func (me diskFullStorage) MarkComplete() error {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (me diskFullStorage) MarkNotComplete() error {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (me diskFullStorage) Completion() storage.Completion {
|
||||
return storage.Completion{
|
||||
Complete: false,
|
||||
Ok: true,
|
||||
}
|
||||
}
|
||||
|
||||
func (me diskFullStorage) Piece(metainfo.Piece) storage.PieceImpl {
|
||||
return me
|
||||
}
|
||||
|
||||
func (me diskFullStorage) Close() error {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (d diskFullStorage) OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (storage.TorrentImpl, error) {
|
||||
return d, nil
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user