100 lines
2.6 KiB
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))
|
|
}
|