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