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