From: Matt Joiner Date: Wed, 17 Feb 2016 06:09:05 +0000 (+1100) Subject: Add a test for starting a torrent where pieces are already complete X-Git-Tag: v1.0.0~888 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=7ab984ab5298501d54b582ed02edb9e78b077f09;p=btrtrc.git Add a test for starting a torrent where pieces are already complete --- diff --git a/client_test.go b/client_test.go index 9e8f1c50..20efe8b0 100644 --- a/client_test.go +++ b/client_test.go @@ -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) +}