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  }