messages_test.go 2.9 KB

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