package rpc import ( "bytes" "testing" ) type encoderTest struct { b *bytes.Buffer enc *Encoder vs Vars h []byte } var protoBuf = bytes.NewBuffer([]byte{}) var protoEncoderTest = &encoderTest{ b: protoBuf, enc: NewEncoder(protoBuf), vs: protoVars, h: []byte{157, 157, 0, 0, 0}, } var infoBuf = bytes.NewBuffer([]byte{}) var infoEncoderTest = &encoderTest{ b: infoBuf, enc: NewEncoder(infoBuf), vs: infoVars, h: []byte{184, 184, 0, 0, 0}, } var encoderTests = []*encoderTest{ protoEncoderTest, infoEncoderTest, } func TestHeader(t *testing.T) { for _, et := range encoderTests { et.b.Reset() d, _ := et.vs.MarshalBinary() et.b.Write(d) h := et.enc.header(et.b.Len()) for i, e := range et.h { if (*h)[i] != e { t.Errorf("Expected header of %+v to be %+v got %+v", et.vs, et.h, h) } } } } func TestEncode(t *testing.T) { /* Testing the header and its position aswell as length should be fine, MarshalBinary is already tested in var_test.go */ for _, et := range encoderTests { et.b.Reset() err := et.enc.Encode(et.vs) if err != nil { t.Errorf("Expected nil error encoding %+v, got %s", et.vs, err) } bout := make([]byte, 0x1fffffff) et.b.Read(bout) for i, e := range bout { if i >= 5 { break } if bout[i] != e { t.Errorf("Expected encoder output of %+v to start %+v got %+v", et.vs, et.h, bout) } } } }