package rpc import ( "encoding/json" "testing" "github.com/stretchr/testify/assert" ) func TestUnmarshalCorrectHeader(t *testing.T) { msg := &Msg{} assert.Nil(t, json.Unmarshal([]byte(`{"dinetrpc":1, "rt" : true, "rt:seqnr" : 666, "device:uid":"012d2d2d4c45474143592d2d0000026f", "time":1337,"req":"device:info","id":1234}`), msg)) assert.Equal(t, uint(1), msg.Dinetrpc) assert.True(t, msg.Rt) assert.Equal(t, uint16(666), msg.RtSeqnr) assert.Equal(t, "012d2d2d4c45474143592d2d0000026f", msg.DeviceUID) assert.Equal(t, MsgTypeRequest, msg.Type) assert.Equal(t, uint32(1234), msg.ID) } func TestMarshalCorrectHeader(t *testing.T) { const msgExp = `{"dinetrpc":1,"time":1337,"id":5678, "device:uid":"012d2d2d4c45474143592d2d0000026f","req":"device:info"}` msg := &Msg{ Dinetrpc: 1, DeviceUID: "012d2d2d4c45474143592d2d0000026f", Time: 1337, ID: 5678, Type: MsgTypeRequest, ClassMethod: "device:info"} data, err := json.Marshal(msg) assert.Nil(t, err) assert.JSONEq(t, msgExp, string(data)) } func TestMarshalErrorProperty(t *testing.T) { const msgExp = `{ "dinetrpc":1, "time":1337, "device:uid":"012d2d2d4c45474143592d2d0000026f", "error":{"code":1, "descr":"Invalid parameter"}}` msg := &Msg{Dinetrpc: 1, DeviceUID: "012d2d2d4c45474143592d2d0000026f", Time: 1337} msg.SetError(EParam) data, err := json.Marshal(msg) assert.Nil(t, err) assert.JSONEq(t, msgExp, string(data)) // Check if msg.Bytes() is the same as what came out of json.Marshal assert.JSONEq(t, string(data), string(msg.Bytes())) assert.JSONEq(t, msgExp, string(msg.Bytes())) }