73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package js
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"src.dualinventive.com/go/devsim/simulator"
|
|
"src.dualinventive.com/go/devsim/simulator/testdata"
|
|
"src.dualinventive.com/go/devsim/storage"
|
|
"src.dualinventive.com/go/devsim/transport"
|
|
"src.dualinventive.com/go/dinet/rpc"
|
|
"src.dualinventive.com/go/lib/dilog"
|
|
"src.dualinventive.com/go/lib/kv"
|
|
)
|
|
|
|
const testDeviceUID = "ff000000000000000000000000000001"
|
|
|
|
func model(t *testing.T) (simulator.Model, *transport.TestTransport) {
|
|
k, err := storage.NewKV(testDeviceUID, kv.TypeRAM, "")
|
|
require.Nil(t, err)
|
|
|
|
d := transport.NewTestTransport(10, 10)
|
|
require.NotNil(t, d)
|
|
|
|
return simulator.NewModel(dilog.NewTestLogger(t), k, d), d
|
|
}
|
|
|
|
// Test simple Start/Stop interface which does nothing
|
|
func TestStartStop(t *testing.T) {
|
|
m, _ := model(t)
|
|
s, err := newSimulator(m, &testdata.Info{IPath: "testdata/startstop"})
|
|
require.Nil(t, err)
|
|
s.Start()
|
|
s.Stop()
|
|
}
|
|
|
|
// Test device:ping request routed to javascript and back
|
|
func TestRequestDevicePing(t *testing.T) {
|
|
m, tt := model(t)
|
|
s, err := newSimulator(m, &testdata.Info{IPath: "testdata/request"})
|
|
require.Nil(t, err)
|
|
|
|
req := &rpc.Msg{
|
|
ID: 1234,
|
|
DeviceUID: testDeviceUID,
|
|
ClassMethod: rpc.ClassMethodDevicePing,
|
|
}
|
|
require.Nil(t, tt.Queue(req))
|
|
|
|
s.Start()
|
|
defer s.Stop()
|
|
|
|
rep, err := tt.Dequeue(context.Background())
|
|
require.Nil(t, err)
|
|
require.NotNil(t, rep)
|
|
require.Nil(t, rep.Error)
|
|
// TODO is not nil due to rpc deferredDecoder... require.Nil(t, rep.Params)
|
|
// TODO is not nil due to rpc deferredDecoder... require.Nil(t, rep.Result)
|
|
require.Equal(t, req.ID, rep.ID)
|
|
require.Equal(t, req.DeviceUID, rep.DeviceUID)
|
|
require.Equal(t, req.ClassMethod, rep.ClassMethod)
|
|
}
|
|
|
|
// Test the example template
|
|
func TestExample(t *testing.T) {
|
|
m, _ := model(t)
|
|
s, err := newSimulator(m, &testdata.Info{IPath: "testdata/example"})
|
|
require.Nil(t, err)
|
|
require.Nil(t, s.Start())
|
|
require.Nil(t, s.Stop())
|
|
}
|