dummies.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package internal
  2. import (
  3. "io"
  4. "github.com/pkg/errors"
  5. "gopkg.in/src-d/go-git.v4/plumbing"
  6. "gopkg.in/src-d/go-git.v4/plumbing/object"
  7. )
  8. type dummyIO struct {
  9. }
  10. func (dummyIO) Read(p []byte) (int, error) {
  11. return 0, io.EOF
  12. }
  13. func (dummyIO) Write(p []byte) (int, error) {
  14. return len(p), nil
  15. }
  16. func (dummyIO) Close() error {
  17. return nil
  18. }
  19. type dummyEncodedObject struct {
  20. FakeHash plumbing.Hash
  21. Fails bool
  22. }
  23. func (obj dummyEncodedObject) Hash() plumbing.Hash {
  24. return obj.FakeHash
  25. }
  26. func (obj dummyEncodedObject) Type() plumbing.ObjectType {
  27. return plumbing.BlobObject
  28. }
  29. func (obj dummyEncodedObject) SetType(plumbing.ObjectType) {
  30. }
  31. func (obj dummyEncodedObject) Size() int64 {
  32. return 0
  33. }
  34. func (obj dummyEncodedObject) SetSize(int64) {
  35. }
  36. func (obj dummyEncodedObject) Reader() (io.ReadCloser, error) {
  37. if !obj.Fails {
  38. return dummyIO{}, nil
  39. }
  40. return nil, errors.New("dummy failure")
  41. }
  42. func (obj dummyEncodedObject) Writer() (io.WriteCloser, error) {
  43. if !obj.Fails {
  44. return dummyIO{}, nil
  45. }
  46. return nil, errors.New("dummy failure")
  47. }
  48. // CreateDummyBlob constructs a fake object.Blob with empty contents.
  49. // Optionally returns an error if read or written.
  50. func CreateDummyBlob(hash plumbing.Hash, fails ...bool) (*object.Blob, error) {
  51. if len(fails) > 1 {
  52. panic("invalid usage of CreateDummyBlob() - this is a bug")
  53. }
  54. var realFails bool
  55. if len(fails) == 1 {
  56. realFails = fails[0]
  57. }
  58. return object.DecodeBlob(dummyEncodedObject{FakeHash: hash, Fails: realFails})
  59. }