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