114 lines
3.1 KiB
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)
|
|
}
|
|
}
|
|
}
|