Test bad "completed" piece
This commit is contained in:
parent
e871dfbbce
commit
07ed952834
|
@ -3,10 +3,12 @@ package torrent
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -17,7 +19,9 @@ import (
|
||||||
|
|
||||||
"github.com/anacrolix/torrent/bencode"
|
"github.com/anacrolix/torrent/bencode"
|
||||||
"github.com/anacrolix/torrent/data/blob"
|
"github.com/anacrolix/torrent/data/blob"
|
||||||
|
"github.com/anacrolix/torrent/data"
|
||||||
"github.com/anacrolix/torrent/internal/testutil"
|
"github.com/anacrolix/torrent/internal/testutil"
|
||||||
|
"github.com/anacrolix/torrent/metainfo"
|
||||||
"github.com/anacrolix/torrent/util"
|
"github.com/anacrolix/torrent/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -31,6 +35,7 @@ var TestingConfig = Config{
|
||||||
DisableTrackers: true,
|
DisableTrackers: true,
|
||||||
NoDefaultBlocklist: true,
|
NoDefaultBlocklist: true,
|
||||||
DisableMetainfoCache: true,
|
DisableMetainfoCache: true,
|
||||||
|
DataDir: filepath.Join(os.TempDir(), "anacrolix"),
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestClientDefault(t *testing.T) {
|
func TestClientDefault(t *testing.T) {
|
||||||
|
@ -317,3 +322,68 @@ func (suite) TestMergingTrackersByAddingSpecs(c *check.C) {
|
||||||
c.Assert(T.Trackers[0][0].URL(), check.Equals, "http://a")
|
c.Assert(T.Trackers[0][0].URL(), check.Equals, "http://a")
|
||||||
c.Assert(T.Trackers[1][0].URL(), check.Equals, "udp://b")
|
c.Assert(T.Trackers[1][0].URL(), check.Equals, "udp://b")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type badData struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (me badData) WriteAt(b []byte, off int64) (int, error) {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (me badData) WriteSectionTo(w io.Writer, off, n int64) (int64, error) {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (me badData) PieceComplete(piece int) bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (me badData) PieceCompleted(piece int) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (me badData) ReadAt(b []byte, off int64) (n int, err error) {
|
||||||
|
if off >= 5 {
|
||||||
|
err = io.EOF
|
||||||
|
return
|
||||||
|
}
|
||||||
|
n = copy(b, []byte("hello")[off:])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ StatefulData = badData{}
|
||||||
|
|
||||||
|
// We read from a piece which is marked completed, but is missing data.
|
||||||
|
func TestCompletedPieceWrongSize(t *testing.T) {
|
||||||
|
cfg := TestingConfig
|
||||||
|
cfg.TorrentDataOpener = func(*metainfo.Info) data.Data {
|
||||||
|
return badData{}
|
||||||
|
}
|
||||||
|
cl, _ := NewClient(&cfg)
|
||||||
|
defer cl.Close()
|
||||||
|
tt, new, err := cl.AddTorrentSpec(&TorrentSpec{
|
||||||
|
Info: &metainfo.InfoEx{
|
||||||
|
Info: metainfo.Info{
|
||||||
|
PieceLength: 15,
|
||||||
|
Pieces: make([]byte, 20),
|
||||||
|
Files: []metainfo.FileInfo{
|
||||||
|
metainfo.FileInfo{Path: []string{"greeting"}, Length: 13},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if !new {
|
||||||
|
t.Fatal("expected new")
|
||||||
|
}
|
||||||
|
r := tt.NewReader()
|
||||||
|
defer r.Close()
|
||||||
|
b := make([]byte, 20)
|
||||||
|
n, err := io.ReadFull(r, b)
|
||||||
|
if n != 5 || err != io.ErrUnexpectedEOF {
|
||||||
|
t.Fatal(n, err)
|
||||||
|
}
|
||||||
|
defer tt.Drop()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue