src.dualinventive.com/go/devsim/simulator/js/js_test.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())
}