Files
cloud-services/services/attendant/handlers/car_update_state_test.go

114 lines
3.1 KiB
Go

package handlers_test
import (
"testing"
"github.com/fiskerinc/cloud-services/services/attendant/handlers"
"github.com/fiskerinc/cloud-services/services/attendant/services"
"github.com/fiskerinc/cloud-services/pkg/testhelper"
vconfig "github.com/fiskerinc/cloud-services/pkg/vehicleconfig"
)
func TestUpdateCarState(t *testing.T) {
setupDBMock()
setupRedisMock()
mockSap := vconfig.SAPServiceMock{}
services.SetSapService(mockSap)
type testCase struct {
Name string
VIN string
Payload string
ExpectedErr string
}
tests := []testCase{
{
Name: "Empty ECU",
VIN: "JH4KA7680RC011845",
Payload: `{"ecus": {}}`,
ExpectedErr: "Key: 'CarStateUpdate.ECUs' Error:Field validation for 'ECUs' failed on the 'min' tag",
},
{
Name: "Bad VIN and ECU",
VIN: "JH4KA7680RC01",
Payload: `{
"ecus": {
"ECU1": {
"serial_number": "AAAAA",
"hw_version": "2000",
"boot_loader_version": "3000",
"fingerprint": "0xffffffffffffffffff",
"config": "0x024000941f9fffbfffe2dd9bff5860000007dfff091fff7f",
"vendor": "A021E00029"
}
}
}`,
ExpectedErr: "Key: 'CarECU.VIN' Error:Field validation for 'VIN' failed on the 'vin' tag",
},
{
Name: "Good ECUs with/without software version",
VIN: "JH4KA7680RC011845",
Payload: `{
"ecus": {
"ECU1": {
"sw_version": "1000",
"serial_number": "AAAAA",
"hw_version": "2000",
"boot_loader_version": "3000",
"fingerprint": "0xffffffffffffffffff",
"config": "0x024000941f9fffbfffe2dd9bff5860000007dfff091fff7f",
"vendor": "A021E00029"
},
"ECU2": {
"serial_number": "BBBBBBB",
"hw_version": "2001",
"boot_loader_version": "3001",
"fingerprint": "0xffffffffffffffffff",
"config": "0x024000941f9fffbfffe2dd9bff5860000007dfff091fff7f",
"vendor": "A021E00029"
}
}
}`,
ExpectedErr: "",
},
{
Name: "bad ECU followed by a Good ECU",
VIN: "JH4KA7680RC011845",
Payload: `{
"ecus": {
"ECU1": {
"serial_number": "AAAAA",
"hw_version": "2000",
"boot_loader_version": "3000",
"fingerprint": "0xffffffffffffffffff",
"config": "0x024000941f9fffbfffe2dd9bff5860000007dfff091fff7f",
"vendor": "A021E00029",
"epoch_usec": "ABC"
},
"ECU2": {
"serial_number": "BBBBBBB",
"hw_version": "2001",
"boot_loader_version": "3001",
"fingerprint": "0xffffffffffffffffff",
"config": "0x024000941f9fffbfffe2dd9bff5860000007dfff091fff7f",
"vendor": "A021E00029"
}
}
}`,
ExpectedErr: "json: cannot unmarshal string into Go struct field CarECU.ecus.epoch_usec of type int64",
},
}
for _, test := range tests {
err := handlers.UpdateCarState(mockDB, test.VIN, []byte(test.Payload))
if err != nil && test.ExpectedErr != err.Error() {
t.Errorf(testhelper.TestErrorTemplate, test.Name, test.ExpectedErr, err.Error())
} else if err == nil && test.ExpectedErr != "" {
t.Errorf(testhelper.TestErrorTemplate, test.Name, test.ExpectedErr, err)
}
}
}