56 lines
1.6 KiB
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)
|
|
}
|