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)
}
}
}
}