102 lines
2.3 KiB
Go
102 lines
2.3 KiB
Go
package dinet
|
|
|
|
import (
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
|
|
"src.dualinventive.com/go/dinet/ditime"
|
|
"src.dualinventive.com/go/dinet/rpc"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
const tstUID = "DEADBEEFCAFEBABEDEADBEEFCAFEBABE"
|
|
|
|
func TestNotSupportedOrStubFuncs(t *testing.T) {
|
|
conn, err := NewDeviceConn(TransportTest)
|
|
require.Nil(t, err)
|
|
|
|
require.Nil(t, conn.Reconnect())
|
|
|
|
require.Nil(t, conn.DeviceHandshake("boem"))
|
|
|
|
require.Nil(t, conn.DeviceRegister("boem"))
|
|
err = conn.SetTimeout(time.Minute)
|
|
require.NotNil(t, err)
|
|
require.Equal(t, ErrNotSupported, err)
|
|
}
|
|
|
|
func TestSend(t *testing.T) {
|
|
conn, err := NewDeviceConn(TransportTest)
|
|
require.Nil(t, err)
|
|
tt := conn.(*TestTransport)
|
|
|
|
msg := rpc.Msg{Type: rpc.MsgTypeRequest, ClassMethod: rpc.ClassMethodSensorData, DeviceUID: tstUID}
|
|
erro := conn.Send(&msg)
|
|
require.NotNil(t, erro)
|
|
require.Equal(t, ErrDisconnected, erro)
|
|
|
|
err = conn.Connect("dont care")
|
|
require.Nil(t, err)
|
|
|
|
wg := &sync.WaitGroup{}
|
|
|
|
wg.Add(1)
|
|
go func() {
|
|
defer wg.Done()
|
|
err := conn.Send(&msg)
|
|
require.Nil(t, err)
|
|
}()
|
|
rx := <-tt.Read
|
|
require.Equal(t, msg.Dinetrpc, rx.Dinetrpc)
|
|
require.Equal(t, msg.ID, rx.ID)
|
|
require.Equal(t, msg.Time, rx.Time)
|
|
require.Equal(t, msg.Type, rx.Type)
|
|
require.Equal(t, msg.ClassMethod, rx.ClassMethod)
|
|
require.Equal(t, msg.DeviceUID, rx.DeviceUID)
|
|
wg.Wait()
|
|
|
|
require.Nil(t, conn.Close())
|
|
}
|
|
|
|
func TestRecv(t *testing.T) {
|
|
conn, err := NewDeviceConn(TransportTest)
|
|
require.Nil(t, err)
|
|
tt := conn.(*TestTransport)
|
|
|
|
msg := rpc.Msg{
|
|
Dinetrpc: rpc.CurrentDinetrpc,
|
|
ID: 1,
|
|
Time: ditime.Now(),
|
|
Type: rpc.MsgTypeRequest,
|
|
ClassMethod: rpc.ClassMethodSensorData,
|
|
DeviceUID: tstUID,
|
|
}
|
|
_, erro := conn.Recv()
|
|
require.NotNil(t, erro)
|
|
require.Equal(t, ErrDisconnected, erro)
|
|
|
|
err = conn.Connect("dont care")
|
|
require.Nil(t, err)
|
|
|
|
wg := &sync.WaitGroup{}
|
|
|
|
wg.Add(1)
|
|
go func() {
|
|
defer wg.Done()
|
|
rxmsg, err := conn.Recv()
|
|
require.Nil(t, err)
|
|
require.Equal(t, msg.Dinetrpc, rxmsg.Dinetrpc)
|
|
require.Equal(t, msg.ID, rxmsg.ID)
|
|
require.Equal(t, msg.Time, rxmsg.Time)
|
|
require.Equal(t, msg.Type, rxmsg.Type)
|
|
require.Equal(t, msg.ClassMethod, rxmsg.ClassMethod)
|
|
require.Equal(t, msg.DeviceUID, rxmsg.DeviceUID)
|
|
}()
|
|
tt.Write <- &msg
|
|
wg.Wait()
|
|
|
|
require.Nil(t, conn.Close())
|
|
}
|