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