src.dualinventive.com/go/dinet/rpc/msg_json_test.go

58 lines
1.6 KiB
Go

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