src.dualinventive.com/go/dinet/device_test.go

100 lines
2.6 KiB
Go

package dinet
import (
"encoding/json"
"testing"
"time"
"github.com/stretchr/testify/require"
"src.dualinventive.com/go/dinet/rpc"
)
func TestDeviceSetClearError(t *testing.T) {
parent, _ := NewParentDeviceMock(t)
dev := NewChildDevice(&DeviceCallbacks{}, parent)
require.False(t, dev.HasError())
require.Equal(t, 0, len(dev.errors))
dev.SetError(rpc.EAgain)
require.Equal(t, 1, len(dev.errors))
require.True(t, dev.HasError())
dev.SetError(rpc.EAgain)
require.Equal(t, 1, len(dev.errors))
require.True(t, dev.HasError())
dev.SetError(rpc.EParam)
require.Equal(t, 2, len(dev.errors))
require.True(t, dev.HasError())
dev.ClearError(rpc.EAgain)
require.Equal(t, 1, len(dev.errors))
require.True(t, dev.HasError())
dev.ClearError(rpc.EParam)
require.False(t, dev.HasError())
require.Equal(t, 0, len(dev.errors))
}
func TestDeviceInfo(t *testing.T) {
parent, _ := NewParentDeviceMock(t)
callbacks := &DeviceCallbacks{}
dev := NewChildDevice(callbacks, parent)
req := rpc.Msg{}
callbacks.DevType = rpc.DeviceTypeZKL3000
callbacks.CBVersions = func() (rpc.VersionMap, rpc.ErrorCode) {
return rpc.VersionMap{
rpc.VersionKeyFwCRTM: "HALLO",
}, rpc.Ok
}
msg := dev.deviceInfo(&req)
require.False(t, msg.IsError())
datab, err := json.Marshal(msg.Result)
require.Nil(t, err)
require.JSONEq(t, `[{"type": "zkl-3000", "version": {"fw-crtm":"HALLO"}}]`, string(datab))
}
func TestConnectionInfo(t *testing.T) {
parent, _ := NewParentDeviceMock(t)
callbacks := &DeviceCallbacks{}
dev := NewChildDevice(callbacks, parent)
req := rpc.Msg{}
callbacks.CBTimeout = func() time.Duration {
return time.Hour
}
callbacks.CBTransport = func() (interface{}, rpc.ErrorCode) {
return nil, rpc.EIofailed
}
msg := dev.connectionInfo(&req)
require.Equal(t, rpc.EIofailed, msg.Error.Code)
callbacks.CBTimeout = func() time.Duration {
return time.Hour
}
callbacks.CBTransport = func() (interface{}, rpc.ErrorCode) {
return "not struct", rpc.Ok
}
msg = dev.connectionInfo(&req)
require.Equal(t, rpc.EOpnotsupp, msg.Error.Code)
callbacks.CBTimeout = func() time.Duration {
return time.Hour
}
callbacks.CBTransport = func() (interface{}, rpc.ErrorCode) {
return &rpc.ConnectionInfoService{
Endpoint: "tcp://something:8080",
}, rpc.Ok
}
msg = dev.connectionInfo(&req)
require.False(t, msg.IsError())
datab, err := json.Marshal(msg.Result)
require.Nil(t, err)
// nolint: lll
require.JSONEq(t, `[{"timeout":3600,"gateways":["fe020000000000000000f403433e1a52"],"transport":"service","service":{"endpoint":"tcp://something:8080"}}]`, string(datab))
}