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

56 lines
1.6 KiB
Go

package rpc
import (
"encoding/hex"
"testing"
msgpack "gopkg.in/vmihailenco/msgpack.v4"
"src.dualinventive.com/go/dinet/ditime"
"github.com/stretchr/testify/assert"
)
func TestUnmarshal(t *testing.T) {
// Lowlevel (plain) + Msgpack encoded data:
// {
// "device:uid":"342d2d2d4c45474143592d2d0000026f",
// "dinetrpc":1,
// "pub":"device:info",
// "result":[{"type":"ZKL 3000 RC"}],
// "time":1452243176109
// }
data, _ := hex.DecodeString(`85A864696E657472706301AA6465766963653A756964D920` +
`3334326432643264346334353437343134333539326432643030` +
`303030323666A3707562AB6465766963653A696E666FA6726573` +
`756C749181A474797065AB5A4B4C2033303030205243A474696D` +
`65CF0000015220704AAD`)
msg := &Msg{}
assert.Nil(t, msgpack.Unmarshal(data, msg))
assert.Equal(t, uint(1), msg.Dinetrpc)
assert.Equal(t, "342d2d2d4c45474143592d2d0000026f", msg.DeviceUID)
assert.Len(t, msg.DeviceUID, 32)
assert.Equal(t, MsgTypePublish, msg.Type)
assert.Equal(t, ditime.Time(1452243176109), msg.Time)
assert.Equal(t, ClassMethodDeviceInfo, msg.ClassMethod)
}
func TestMarshal(t *testing.T) {
b, err := msgpack.Marshal(&Msg{
Dinetrpc: 1,
DeviceUID: "012d2d2d4c45474143592d2d0000026f",
Type: MsgTypePublish,
ClassMethod: "sensor:info",
Time: 1452243176109,
})
assert.Nil(t, err)
msg := &Msg{}
assert.Nil(t, msgpack.Unmarshal(b, msg))
assert.Equal(t, uint(1), msg.Dinetrpc)
assert.Equal(t, "012d2d2d4c45474143592d2d0000026f", msg.DeviceUID)
assert.Equal(t, MsgTypePublish, msg.Type)
assert.Equal(t, ClassMethodSensorInfo, msg.ClassMethod)
}