286 lines
6.7 KiB
Go
286 lines
6.7 KiB
Go
package gateway
|
|
|
|
import (
|
|
"github.com/cyrilix/robocar-protobuf/go/events"
|
|
"github.com/cyrilix/robocar-simulator/pkg/simulator"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
|
|
func TestGateway_Start(t *testing.T) {
|
|
|
|
simulatorMock := Gw2SimMock{}
|
|
err := simulatorMock.listen()
|
|
if err != nil {
|
|
t.Errorf("unable to start mock gw: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := simulatorMock.Close(); err != nil {
|
|
t.Errorf("unable to stop simulator mock: %v", err)
|
|
}
|
|
}()
|
|
|
|
carConfig := simulator.CarConfigMsg{
|
|
MsgType: simulator.MsgTypeCarConfig,
|
|
BodyStyle: simulator.CarConfigBodyStyleCar01,
|
|
CarName: "car-test",
|
|
}
|
|
camConfig :=simulator.CamConfigMsg{
|
|
MsgType: simulator.MsgTypeCameraConfig,
|
|
Fov: "0",
|
|
FishEyeX: "0",
|
|
FishEyeY: "0",
|
|
ImgW: "120",
|
|
ImgH: "50",
|
|
ImgD: "0",
|
|
ImgEnc: simulator.CameraImageEncJpeg,
|
|
OffsetX: "0",
|
|
OffsetY: "0",
|
|
OffsetZ: "0",
|
|
RotX: "0",
|
|
}
|
|
gw, err := New(simulatorMock.Addr(),
|
|
&carConfig,
|
|
&simulator.RacerBioMsg{},
|
|
&camConfig,
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("unable to init simulator gateway: %v", err)
|
|
}
|
|
go gw.Start()
|
|
defer gw.Close()
|
|
|
|
carNotify := simulatorMock.NotifyCar()
|
|
select {
|
|
case <- time.Tick(500 * time.Millisecond):
|
|
t.Errorf("a car configuration message should be send")
|
|
case msg := <-carNotify:
|
|
if *msg != carConfig {
|
|
t.Errorf("[carConfig] invalid car config: %v, wants %v", &msg, carConfig)
|
|
}
|
|
}
|
|
camNotify := simulatorMock.NotifyCamera()
|
|
select {
|
|
case <- time.Tick(500 * time.Millisecond):
|
|
t.Errorf("a camera configuration message should be send")
|
|
case msg := <-camNotify:
|
|
if *msg != camConfig {
|
|
t.Errorf("[carConfig] invalid camera config: %v, wants %v", &msg, camConfig)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
func TestGateway_WriteSteering(t *testing.T) {
|
|
|
|
cases := []struct {
|
|
name string
|
|
msg *events.SteeringMessage
|
|
previousMsg *simulator.ControlMsg
|
|
expectedMsg simulator.ControlMsg
|
|
}{
|
|
{"First Message",
|
|
&events.SteeringMessage{Steering: 0.5, Confidence: 1},
|
|
nil,
|
|
simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.50",
|
|
Throttle: "0.0",
|
|
Brake: "0.0",
|
|
}},
|
|
{"Update steering",
|
|
&events.SteeringMessage{Steering: -0.5, Confidence: 1},
|
|
&simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.0",
|
|
Brake: "0.0",
|
|
},
|
|
simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "-0.50",
|
|
Throttle: "0.0",
|
|
Brake: "0.0",
|
|
}},
|
|
{"Update steering shouldn't erase throttle value",
|
|
&events.SteeringMessage{Steering: -0.3, Confidence: 1},
|
|
&simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.6",
|
|
Brake: "0.1",
|
|
},
|
|
simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "-0.30",
|
|
Throttle: "0.6",
|
|
Brake: "0.1",
|
|
}},
|
|
}
|
|
|
|
simulatorMock := Gw2SimMock{}
|
|
err := simulatorMock.listen()
|
|
if err != nil {
|
|
t.Errorf("unable to start mock gw: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := simulatorMock.Close(); err != nil {
|
|
t.Errorf("unable to stop simulator mock: %v", err)
|
|
}
|
|
}()
|
|
|
|
gw, err := New(simulatorMock.Addr(),
|
|
&simulator.CarConfigMsg{MsgType: simulator.MsgTypeCarConfig},
|
|
&simulator.RacerBioMsg{},
|
|
&simulator.CamConfigMsg{
|
|
ImgH: "128",
|
|
ImgW: "160",
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("unable to init simulator gateway: %v", err)
|
|
}
|
|
//go gw.Start()
|
|
//defer gw.Close()
|
|
//<- simulatorMock.NotifyCar()
|
|
//<- simulatorMock.NotifyCamera()
|
|
|
|
for _, c := range cases {
|
|
gw.lastControl = c.previousMsg
|
|
|
|
gw.WriteSteering(c.msg)
|
|
|
|
ctrlMsg := <-simulatorMock.NotifyCtrl()
|
|
if *ctrlMsg != c.expectedMsg {
|
|
t.Errorf("[%v] bad messge received: %#v, wants %#v", c.name, ctrlMsg, c.expectedMsg)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGateway_WriteThrottle(t *testing.T) {
|
|
|
|
cases := []struct {
|
|
name string
|
|
msg *events.ThrottleMessage
|
|
previousMsg *simulator.ControlMsg
|
|
expectedMsg simulator.ControlMsg
|
|
}{
|
|
{"First Message",
|
|
&events.ThrottleMessage{Throttle: 0.5, Confidence: 1},
|
|
nil,
|
|
simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.0",
|
|
Throttle: "0.50",
|
|
Brake: "0.0",
|
|
}},
|
|
{"Update Throttle",
|
|
&events.ThrottleMessage{Throttle: 0.6, Confidence: 1},
|
|
&simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0",
|
|
Throttle: "0.4",
|
|
Brake: "0",
|
|
},
|
|
simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0",
|
|
Throttle: "0.60",
|
|
Brake: "0.0",
|
|
}},
|
|
{"Update steering shouldn't erase throttle value",
|
|
&events.ThrottleMessage{Throttle: 0.3, Confidence: 1},
|
|
&simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.6",
|
|
Brake: "0.0",
|
|
},
|
|
simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.30",
|
|
Brake: "0.0",
|
|
}},
|
|
{"Throttle to brake",
|
|
&events.ThrottleMessage{Throttle: -0.7, Confidence: 1},
|
|
&simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.6",
|
|
Brake: "0.0",
|
|
},
|
|
simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.0",
|
|
Brake: "0.70",
|
|
}},
|
|
{"Update brake",
|
|
&events.ThrottleMessage{Throttle: -0.2, Confidence: 1},
|
|
&simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.0",
|
|
Brake: "0.5",
|
|
},
|
|
simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.0",
|
|
Brake: "0.20",
|
|
}},
|
|
{"Brake to throttle",
|
|
&events.ThrottleMessage{Throttle: 0.9, Confidence: 1},
|
|
&simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.0",
|
|
Brake: "0.4",
|
|
},
|
|
simulator.ControlMsg{
|
|
MsgType: simulator.MsgTypeControl,
|
|
Steering: "0.2",
|
|
Throttle: "0.90",
|
|
Brake: "0.0",
|
|
}},
|
|
}
|
|
|
|
simulatorMock := Gw2SimMock{}
|
|
err := simulatorMock.listen()
|
|
if err != nil {
|
|
t.Errorf("unable to start mock gw: %v", err)
|
|
}
|
|
defer func() {
|
|
if err := simulatorMock.Close(); err != nil {
|
|
t.Errorf("unable to stop simulator mock: %v", err)
|
|
}
|
|
}()
|
|
|
|
gw, err := New(simulatorMock.Addr(), &simulator.CarConfigMsg{MsgType: simulator.MsgTypeCarConfig},
|
|
&simulator.RacerBioMsg{},
|
|
&simulator.CamConfigMsg{
|
|
ImgH: "128",
|
|
ImgW: "160",
|
|
})
|
|
|
|
if err != nil {
|
|
t.Fatalf("unable to init simulator gateway: %v", err)
|
|
}
|
|
//go gw.Start()
|
|
|
|
//<- simulatorMock.NotifyCar()
|
|
//<- simulatorMock.NotifyCamera()
|
|
|
|
for _, c := range cases {
|
|
gw.lastControl = c.previousMsg
|
|
|
|
gw.WriteThrottle(c.msg)
|
|
|
|
ctrlMsg := <-simulatorMock.NotifyCtrl()
|
|
if *ctrlMsg != c.expectedMsg {
|
|
t.Errorf("[%v] bad messge received: %#v, wants %#v", c.name, ctrlMsg, c.expectedMsg)
|
|
}
|
|
}
|
|
}
|