messages_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package protocol
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. "reflect"
  6. "testing"
  7. "testing/quick"
  8. )
  9. func TestIndex(t *testing.T) {
  10. idx := []FileInfo{
  11. {
  12. "Foo",
  13. 0755,
  14. 1234567890,
  15. []BlockInfo{
  16. {12345678, []byte("hash hash hash")},
  17. {23456781, []byte("ash hash hashh")},
  18. {34567812, []byte("sh hash hashha")},
  19. },
  20. }, {
  21. "Quux/Quux",
  22. 0644,
  23. 2345678901,
  24. []BlockInfo{
  25. {45678123, []byte("4321 hash hash hash")},
  26. {56781234, []byte("3214 ash hash hashh")},
  27. {67812345, []byte("2143 sh hash hashha")},
  28. },
  29. },
  30. }
  31. var buf = new(bytes.Buffer)
  32. var wr = marshalWriter{buf, 0, nil}
  33. wr.writeIndex(idx)
  34. var rd = marshalReader{buf, 0, nil}
  35. var idx2 = rd.readIndex()
  36. if !reflect.DeepEqual(idx, idx2) {
  37. t.Errorf("Index marshal error:\n%#v\n%#v\n", idx, idx2)
  38. }
  39. }
  40. func TestRequest(t *testing.T) {
  41. f := func(name string, offset uint64, size uint32, hash []byte) bool {
  42. var buf = new(bytes.Buffer)
  43. var req = request{name, offset, size, hash}
  44. var wr = marshalWriter{buf, 0, nil}
  45. wr.writeRequest(req)
  46. var rd = marshalReader{buf, 0, nil}
  47. var req2 = rd.readRequest()
  48. return req.name == req2.name &&
  49. req.offset == req2.offset &&
  50. req.size == req2.size &&
  51. bytes.Compare(req.hash, req2.hash) == 0
  52. }
  53. if err := quick.Check(f, nil); err != nil {
  54. t.Error(err)
  55. }
  56. }
  57. func TestResponse(t *testing.T) {
  58. f := func(data []byte) bool {
  59. var buf = new(bytes.Buffer)
  60. var wr = marshalWriter{buf, 0, nil}
  61. wr.writeResponse(data)
  62. var rd = marshalReader{buf, 0, nil}
  63. var read = rd.readResponse()
  64. return bytes.Compare(read, data) == 0
  65. }
  66. if err := quick.Check(f, nil); err != nil {
  67. t.Error(err)
  68. }
  69. }
  70. func BenchmarkWriteIndex(b *testing.B) {
  71. idx := []FileInfo{
  72. {
  73. "Foo",
  74. 0777,
  75. 1234567890,
  76. []BlockInfo{
  77. {12345678, []byte("hash hash hash")},
  78. {23456781, []byte("ash hash hashh")},
  79. {34567812, []byte("sh hash hashha")},
  80. },
  81. }, {
  82. "Quux/Quux",
  83. 0644,
  84. 2345678901,
  85. []BlockInfo{
  86. {45678123, []byte("4321 hash hash hash")},
  87. {56781234, []byte("3214 ash hash hashh")},
  88. {67812345, []byte("2143 sh hash hashha")},
  89. },
  90. },
  91. }
  92. var wr = marshalWriter{ioutil.Discard, 0, nil}
  93. for i := 0; i < b.N; i++ {
  94. wr.writeIndex(idx)
  95. }
  96. }
  97. func BenchmarkWriteRequest(b *testing.B) {
  98. var req = request{"blah blah", 1231323, 13123123, []byte("hash hash hash")}
  99. var wr = marshalWriter{ioutil.Discard, 0, nil}
  100. for i := 0; i < b.N; i++ {
  101. wr.writeRequest(req)
  102. }
  103. }