common_test.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package protocol
  2. import (
  3. "io"
  4. "time"
  5. )
  6. type TestModel struct {
  7. data []byte
  8. repo string
  9. name string
  10. offset int64
  11. size int
  12. closedCh chan bool
  13. }
  14. func newTestModel() *TestModel {
  15. return &TestModel{
  16. closedCh: make(chan bool),
  17. }
  18. }
  19. func (t *TestModel) Index(nodeID string, repo string, files []FileInfo) {
  20. }
  21. func (t *TestModel) IndexUpdate(nodeID string, repo string, files []FileInfo) {
  22. }
  23. func (t *TestModel) Request(nodeID, repo, name string, offset int64, size int) ([]byte, error) {
  24. t.repo = repo
  25. t.name = name
  26. t.offset = offset
  27. t.size = size
  28. return t.data, nil
  29. }
  30. func (t *TestModel) Close(nodeID string, err error) {
  31. close(t.closedCh)
  32. }
  33. func (t *TestModel) ClusterConfig(nodeID string, config ClusterConfigMessage) {
  34. }
  35. func (t *TestModel) isClosed() bool {
  36. select {
  37. case <-t.closedCh:
  38. return true
  39. case <-time.After(1 * time.Second):
  40. return false // Timeout
  41. }
  42. }
  43. type ErrPipe struct {
  44. io.PipeWriter
  45. written int
  46. max int
  47. err error
  48. closed bool
  49. }
  50. func (e *ErrPipe) Write(data []byte) (int, error) {
  51. if e.closed {
  52. return 0, e.err
  53. }
  54. if e.written+len(data) > e.max {
  55. n, _ := e.PipeWriter.Write(data[:e.max-e.written])
  56. e.PipeWriter.CloseWithError(e.err)
  57. e.closed = true
  58. return n, e.err
  59. }
  60. return e.PipeWriter.Write(data)
  61. }