github.com/kayoticsully/syncthing@v0.8.9-0.20140724133906-c45a2fdc03f8/xdr/xdr_test.go (about) 1 // Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file). 2 // All rights reserved. Use of this source code is governed by an MIT-style 3 // license that can be found in the LICENSE file. 4 5 package xdr 6 7 import ( 8 "bytes" 9 "testing" 10 "testing/quick" 11 ) 12 13 func TestPad(t *testing.T) { 14 tests := [][]int{ 15 {0, 0}, 16 {1, 3}, 17 {2, 2}, 18 {3, 1}, 19 {4, 0}, 20 {32, 0}, 21 {33, 3}, 22 } 23 for _, tc := range tests { 24 if p := pad(tc[0]); p != tc[1] { 25 t.Errorf("Incorrect padding for %d bytes, %d != %d", tc[0], p, tc[1]) 26 } 27 } 28 } 29 30 func TestBytesNil(t *testing.T) { 31 fn := func(bs []byte) bool { 32 var b = new(bytes.Buffer) 33 var w = NewWriter(b) 34 var r = NewReader(b) 35 w.WriteBytes(bs) 36 w.WriteBytes(bs) 37 r.ReadBytes() 38 res := r.ReadBytes() 39 return bytes.Compare(bs, res) == 0 40 } 41 if err := quick.Check(fn, nil); err != nil { 42 t.Error(err) 43 } 44 } 45 46 func TestBytesGiven(t *testing.T) { 47 fn := func(bs []byte) bool { 48 var b = new(bytes.Buffer) 49 var w = NewWriter(b) 50 var r = NewReader(b) 51 w.WriteBytes(bs) 52 w.WriteBytes(bs) 53 res := make([]byte, 12) 54 res = r.ReadBytesInto(res) 55 res = r.ReadBytesInto(res) 56 return bytes.Compare(bs, res) == 0 57 } 58 if err := quick.Check(fn, nil); err != nil { 59 t.Error(err) 60 } 61 } 62 63 func TestReadBytesMaxInto(t *testing.T) { 64 var max = 64 65 for tot := 32; tot < 128; tot++ { 66 for diff := -32; diff <= 32; diff++ { 67 var b = new(bytes.Buffer) 68 var r = NewReader(b) 69 var w = NewWriter(b) 70 71 var toWrite = make([]byte, tot) 72 w.WriteBytes(toWrite) 73 74 var buf = make([]byte, tot+diff) 75 var bs = r.ReadBytesMaxInto(max, buf) 76 77 if tot <= max { 78 if read := len(bs); read != tot { 79 t.Errorf("Incorrect read bytes, wrote=%d, buf=%d, max=%d, read=%d", tot, tot+diff, max, read) 80 } 81 } else if r.err != ErrElementSizeExceeded { 82 t.Errorf("Unexpected non-ErrElementSizeExceeded error for wrote=%d, max=%d: %v", tot, max, r.err) 83 } 84 } 85 } 86 } 87 88 func TestReadBytesMaxIntoNil(t *testing.T) { 89 for tot := 42; tot < 72; tot++ { 90 for max := 0; max < 128; max++ { 91 var b = new(bytes.Buffer) 92 var r = NewReader(b) 93 var w = NewWriter(b) 94 95 var toWrite = make([]byte, tot) 96 w.WriteBytes(toWrite) 97 98 var bs = r.ReadBytesMaxInto(max, nil) 99 var read = len(bs) 100 101 if max == 0 || tot <= max { 102 if read != tot { 103 t.Errorf("Incorrect read bytes, wrote=%d, max=%d, read=%d", tot, max, read) 104 } 105 } else if r.err != ErrElementSizeExceeded { 106 t.Errorf("Unexpected non-ErrElementSizeExceeded error for wrote=%d, max=%d, read=%d: %v", tot, max, read, r.err) 107 } 108 } 109 } 110 }