src.dualinventive.com/go/dinet/transport_testing_test.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())
}