Add a test for starting a torrent where pieces are already complete

This commit is contained in:
Matt Joiner 2016-02-17 17:09:05 +11:00
parent 90718d086c
commit 7ab984ab52
1 changed files with 52 additions and 0 deletions

View File

@ -683,3 +683,55 @@ func TestTorrentDroppedBeforeGotInfo(t *testing.T) {
default:
}
}
func testAddTorrentPriorPieceCompletion(t *testing.T, alreadyCompleted bool) {
fileCacheDir, err := ioutil.TempDir("", "")
require.NoError(t, err)
defer os.RemoveAll(fileCacheDir)
fileCache, err := filecache.NewCache(fileCacheDir)
require.NoError(t, err)
greetingDataTempDir, greetingMetainfo := testutil.GreetingTestTorrent()
defer os.RemoveAll(greetingDataTempDir)
filePieceStore := pieceStore.New(fileCacheDataBackend.New(fileCache))
greetingData := filePieceStore.OpenTorrentData(&greetingMetainfo.Info.Info)
written, err := greetingData.WriteAt([]byte(testutil.GreetingFileContents), 0)
require.Equal(t, len(testutil.GreetingFileContents), written)
require.NoError(t, err)
for i := 0; i < greetingMetainfo.Info.NumPieces(); i++ {
// p := greetingMetainfo.Info.Piece(i)
if alreadyCompleted {
err := greetingData.PieceCompleted(i)
assert.NoError(t, err)
}
}
cfg := TestingConfig
// TODO: Disable network option?
cfg.DisableTCP = true
cfg.DisableUTP = true
cfg.TorrentDataOpener = func(mi *metainfo.Info) Data {
return filePieceStore.OpenTorrentData(mi)
}
cl, err := NewClient(&cfg)
require.NoError(t, err)
defer cl.Close()
tt, err := cl.AddTorrent(greetingMetainfo)
require.NoError(t, err)
psrs := tt.PieceStateRuns()
assert.Len(t, psrs, 1)
assert.EqualValues(t, 3, psrs[0].Length)
assert.Equal(t, alreadyCompleted, psrs[0].Complete)
if alreadyCompleted {
r := tt.NewReader()
b, err := ioutil.ReadAll(r)
assert.NoError(t, err)
assert.EqualValues(t, testutil.GreetingFileContents, b)
}
}
func TestAddTorrentPiecesAlreadyCompleted(t *testing.T) {
testAddTorrentPriorPieceCompletion(t, true)
}
func TestAddTorrentPiecesNotAlreadyCompleted(t *testing.T) {
testAddTorrentPriorPieceCompletion(t, false)
}