xdr_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package xdr
  2. import (
  3. "bytes"
  4. "testing"
  5. "testing/quick"
  6. )
  7. func TestPad(t *testing.T) {
  8. tests := [][]int{
  9. {0, 0},
  10. {1, 3},
  11. {2, 2},
  12. {3, 1},
  13. {4, 0},
  14. {32, 0},
  15. {33, 3},
  16. }
  17. for _, tc := range tests {
  18. if p := pad(tc[0]); p != tc[1] {
  19. t.Errorf("Incorrect padding for %d bytes, %d != %d", tc[0], p, tc[1])
  20. }
  21. }
  22. }
  23. func TestBytesNil(t *testing.T) {
  24. fn := func(bs []byte) bool {
  25. var b = new(bytes.Buffer)
  26. var w = NewWriter(b)
  27. var r = NewReader(b)
  28. w.WriteBytes(bs)
  29. w.WriteBytes(bs)
  30. r.ReadBytes()
  31. res := r.ReadBytes()
  32. return bytes.Compare(bs, res) == 0
  33. }
  34. if err := quick.Check(fn, nil); err != nil {
  35. t.Error(err)
  36. }
  37. }
  38. func TestBytesGiven(t *testing.T) {
  39. fn := func(bs []byte) bool {
  40. var b = new(bytes.Buffer)
  41. var w = NewWriter(b)
  42. var r = NewReader(b)
  43. w.WriteBytes(bs)
  44. w.WriteBytes(bs)
  45. res := make([]byte, 12)
  46. res = r.ReadBytesInto(res)
  47. res = r.ReadBytesInto(res)
  48. return bytes.Compare(bs, res) == 0
  49. }
  50. if err := quick.Check(fn, nil); err != nil {
  51. t.Error(err)
  52. }
  53. }
  54. func TestReadBytesMaxInto(t *testing.T) {
  55. var max = 64
  56. for tot := 32; tot < 128; tot++ {
  57. for diff := -32; diff <= 32; diff++ {
  58. var b = new(bytes.Buffer)
  59. var r = NewReader(b)
  60. var w = NewWriter(b)
  61. var toWrite = make([]byte, tot)
  62. w.WriteBytes(toWrite)
  63. var buf = make([]byte, tot+diff)
  64. var bs = r.ReadBytesMaxInto(max, buf)
  65. if tot <= max {
  66. if read := len(bs); read != tot {
  67. t.Errorf("Incorrect read bytes, wrote=%d, buf=%d, max=%d, read=%d", tot, tot+diff, max, read)
  68. }
  69. } else if r.err != ErrElementSizeExceeded {
  70. t.Errorf("Unexpected non-ErrElementSizeExceeded error for wrote=%d, max=%d: %v", tot, max, r.err)
  71. }
  72. }
  73. }
  74. }
  75. func TestReadBytesMaxIntoNil(t *testing.T) {
  76. for tot := 42; tot < 72; tot++ {
  77. for max := 0; max < 128; max++ {
  78. var b = new(bytes.Buffer)
  79. var r = NewReader(b)
  80. var w = NewWriter(b)
  81. var toWrite = make([]byte, tot)
  82. w.WriteBytes(toWrite)
  83. var bs = r.ReadBytesMaxInto(max, nil)
  84. var read = len(bs)
  85. if max == 0 || tot <= max {
  86. if read != tot {
  87. t.Errorf("Incorrect read bytes, wrote=%d, max=%d, read=%d", tot, max, read)
  88. }
  89. } else if r.err != ErrElementSizeExceeded {
  90. t.Errorf("Unexpected non-ErrElementSizeExceeded error for wrote=%d, max=%d, read=%d: %v", tot, max, read, r.err)
  91. }
  92. }
  93. }
  94. }