bad_storage.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package torrent
  2. import (
  3. "context"
  4. "errors"
  5. "math/rand"
  6. "strings"
  7. "github.com/anacrolix/torrent/internal/testutil"
  8. "github.com/anacrolix/torrent/metainfo"
  9. "github.com/anacrolix/torrent/storage"
  10. )
  11. type badStorage struct{}
  12. var _ storage.ClientImpl = badStorage{}
  13. func (bs badStorage) OpenTorrent(
  14. context.Context,
  15. *metainfo.Info,
  16. metainfo.Hash,
  17. ) (storage.TorrentImpl, error) {
  18. return storage.TorrentImpl{
  19. Piece: bs.Piece,
  20. }, nil
  21. }
  22. func (bs badStorage) Piece(p metainfo.Piece) storage.PieceImpl {
  23. return badStoragePiece{p}
  24. }
  25. type badStoragePiece struct {
  26. p metainfo.Piece
  27. }
  28. var _ storage.PieceImpl = badStoragePiece{}
  29. func (p badStoragePiece) WriteAt(b []byte, off int64) (int, error) {
  30. return 0, nil
  31. }
  32. func (p badStoragePiece) Completion() storage.Completion {
  33. return storage.Completion{Complete: true, Ok: true}
  34. }
  35. func (p badStoragePiece) MarkComplete() error {
  36. return errors.New("psyyyyyyyche")
  37. }
  38. func (p badStoragePiece) MarkNotComplete() error {
  39. return errors.New("psyyyyyyyche")
  40. }
  41. func (p badStoragePiece) randomlyTruncatedDataString() string {
  42. return testutil.GreetingFileContents[:rand.Intn(14)]
  43. }
  44. func (p badStoragePiece) ReadAt(b []byte, off int64) (n int, err error) {
  45. r := strings.NewReader(p.randomlyTruncatedDataString())
  46. return r.ReadAt(b, off+p.p.Offset())
  47. }