messages_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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. FlagInvalid & FlagDeleted & 0755,
  14. 1234567890,
  15. 142,
  16. []BlockInfo{
  17. {12345678, []byte("hash hash hash")},
  18. {23456781, []byte("ash hash hashh")},
  19. {34567812, []byte("sh hash hashha")},
  20. },
  21. }, {
  22. "Quux/Quux",
  23. 0644,
  24. 2345678901,
  25. 232323232,
  26. []BlockInfo{
  27. {45678123, []byte("4321 hash hash hash")},
  28. {56781234, []byte("3214 ash hash hashh")},
  29. {67812345, []byte("2143 sh hash hashha")},
  30. },
  31. },
  32. }
  33. var buf = new(bytes.Buffer)
  34. var wr = marshalWriter{w: buf}
  35. wr.writeIndex(idx)
  36. var rd = marshalReader{r: buf}
  37. var idx2 = rd.readIndex()
  38. if !reflect.DeepEqual(idx, idx2) {
  39. t.Errorf("Index marshal error:\n%#v\n%#v\n", idx, idx2)
  40. }
  41. }
  42. func TestRequest(t *testing.T) {
  43. f := func(name string, offset int64, size uint32, hash []byte) bool {
  44. var buf = new(bytes.Buffer)
  45. var req = request{name, offset, size, hash}
  46. var wr = marshalWriter{w: buf}
  47. wr.writeRequest(req)
  48. var rd = marshalReader{r: buf}
  49. var req2 = rd.readRequest()
  50. return req.name == req2.name &&
  51. req.offset == req2.offset &&
  52. req.size == req2.size &&
  53. bytes.Compare(req.hash, req2.hash) == 0
  54. }
  55. if err := quick.Check(f, nil); err != nil {
  56. t.Error(err)
  57. }
  58. }
  59. func TestResponse(t *testing.T) {
  60. f := func(data []byte) bool {
  61. var buf = new(bytes.Buffer)
  62. var wr = marshalWriter{w: buf}
  63. wr.writeResponse(data)
  64. var rd = marshalReader{r: buf}
  65. var read = rd.readResponse()
  66. return bytes.Compare(read, data) == 0
  67. }
  68. if err := quick.Check(f, nil); err != nil {
  69. t.Error(err)
  70. }
  71. }
  72. func BenchmarkWriteIndex(b *testing.B) {
  73. idx := []FileInfo{
  74. {
  75. "Foo",
  76. 0777,
  77. 1234567890,
  78. 424242,
  79. []BlockInfo{
  80. {12345678, []byte("hash hash hash")},
  81. {23456781, []byte("ash hash hashh")},
  82. {34567812, []byte("sh hash hashha")},
  83. },
  84. }, {
  85. "Quux/Quux",
  86. 0644,
  87. 2345678901,
  88. 323232,
  89. []BlockInfo{
  90. {45678123, []byte("4321 hash hash hash")},
  91. {56781234, []byte("3214 ash hash hashh")},
  92. {67812345, []byte("2143 sh hash hashha")},
  93. },
  94. },
  95. }
  96. var wr = marshalWriter{w: ioutil.Discard}
  97. for i := 0; i < b.N; i++ {
  98. wr.writeIndex(idx)
  99. }
  100. }
  101. func BenchmarkWriteRequest(b *testing.B) {
  102. var req = request{"blah blah", 1231323, 13123123, []byte("hash hash hash")}
  103. var wr = marshalWriter{w: ioutil.Discard}
  104. for i := 0; i < b.N; i++ {
  105. wr.writeRequest(req)
  106. }
  107. }
  108. func TestOptions(t *testing.T) {
  109. opts := map[string]string{
  110. "foo": "bar",
  111. "someKey": "otherValue",
  112. "hello": "",
  113. "": "42",
  114. }
  115. var buf = new(bytes.Buffer)
  116. var wr = marshalWriter{w: buf}
  117. wr.writeOptions(opts)
  118. var rd = marshalReader{r: buf}
  119. var ropts = rd.readOptions()
  120. if !reflect.DeepEqual(opts, ropts) {
  121. t.Error("Incorrect options marshal/demarshal")
  122. }
  123. }