Add depot, attendant, jetfire, optimus, ota services with kustomize overlays
This commit is contained in:
389
services/attendant/handlers/car_update_progress_func_test.go
Normal file
389
services/attendant/handlers/car_update_progress_func_test.go
Normal file
@@ -0,0 +1,389 @@
|
||||
package handlers_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/fiskerinc/cloud-services/services/attendant/handlers"
|
||||
"github.com/fiskerinc/cloud-services/services/attendant/services"
|
||||
|
||||
"github.com/fiskerinc/cloud-services/pkg/common"
|
||||
"github.com/fiskerinc/cloud-services/pkg/redis"
|
||||
"github.com/fiskerinc/cloud-services/pkg/redis/tester"
|
||||
"github.com/fiskerinc/cloud-services/pkg/testhelper"
|
||||
)
|
||||
|
||||
func TestCarUpdateProgressFunctional(t *testing.T) {
|
||||
t.Skip()
|
||||
testVIN := "WBSEH93466B798124"
|
||||
conn := tester.NewRedisMock()
|
||||
db := services.GetDB()
|
||||
manifest, carUpdateID, err := setupCarUpdateProgressFunc(db, testVIN)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer func() {
|
||||
if carUpdateID > 0 {
|
||||
db.GetCarUpdates().Delete(&common.CarUpdate{ID: carUpdateID})
|
||||
conn.Delete(redis.CarUpdateStatusTBOXHashKey(carUpdateID), redis.CarUpdateStatusHMIHashKey(carUpdateID))
|
||||
}
|
||||
if manifest != nil && manifest.ID > 0 {
|
||||
db.GetUpdateManifests().Delete(manifest)
|
||||
}
|
||||
}()
|
||||
|
||||
ka := services.NewKeepAwakeService()
|
||||
ka.SetService(&services.MockKeepAwakeImplementation{})
|
||||
|
||||
type testCase struct {
|
||||
Name string
|
||||
Device common.Device
|
||||
Payload string
|
||||
ExpectedMsg string
|
||||
ExpectInstalled int
|
||||
ExpectInstallTotal int
|
||||
ExpectDBStatus string
|
||||
ExpectDownloadCurrent uint64
|
||||
ExpectDownloadTotal uint64
|
||||
ExpectErrorCode int
|
||||
}
|
||||
|
||||
tests := []testCase{
|
||||
{
|
||||
Name: "manifest_received",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"msg": "manifest_received"
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "manifest_received",
|
||||
ExpectDBStatus: "manifest_received",
|
||||
},
|
||||
{
|
||||
Name: "install_approval_await",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"msg": "install_approval_await"
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "install_approval_await",
|
||||
ExpectDBStatus: "install_approval_await",
|
||||
},
|
||||
{
|
||||
Name: "other error",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"installed": 3,
|
||||
"total_files": 10,
|
||||
"msg": "other error",
|
||||
"err": -100
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "other error",
|
||||
ExpectDBStatus: "other error",
|
||||
ExpectInstalled: 3,
|
||||
ExpectInstallTotal: 10,
|
||||
ExpectErrorCode: -100,
|
||||
},
|
||||
{
|
||||
Name: "download_start",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"file_current": 0,
|
||||
"file_total": 100,
|
||||
"package_current": 0,
|
||||
"package_total": 100,
|
||||
"msg": "download_start",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "downloading",
|
||||
ExpectDBStatus: "package_download_start",
|
||||
ExpectDownloadCurrent: 0,
|
||||
ExpectDownloadTotal: 100,
|
||||
},
|
||||
{
|
||||
Name: "downloading",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"file_current": 0,
|
||||
"file_total": 100,
|
||||
"package_current": 30,
|
||||
"package_total": 100,
|
||||
"msg": "downloading",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "downloading",
|
||||
ExpectDBStatus: "package_download_start",
|
||||
ExpectDownloadCurrent: 30,
|
||||
ExpectDownloadTotal: 100,
|
||||
},
|
||||
{
|
||||
Name: "download_complete",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"file_current": 100,
|
||||
"file_total": 100,
|
||||
"package_current": 900,
|
||||
"package_total": 1000,
|
||||
"msg": "download_complete",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "downloading",
|
||||
ExpectDBStatus: "package_download_start",
|
||||
ExpectDownloadCurrent: 900,
|
||||
ExpectDownloadTotal: 1000,
|
||||
},
|
||||
{
|
||||
Name: "package_download_complete",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"file_current": 100,
|
||||
"file_total": 100,
|
||||
"package_current": 1000,
|
||||
"package_total": 1000,
|
||||
"msg": "download_complete",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "package_download_complete",
|
||||
ExpectDBStatus: "package_download_complete",
|
||||
ExpectDownloadCurrent: 1000,
|
||||
ExpectDownloadTotal: 1000,
|
||||
},
|
||||
{
|
||||
Name: "download_error",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"file_current": 0,
|
||||
"file_total": 100,
|
||||
"package_current": 0,
|
||||
"package_total": 1000,
|
||||
"msg": "download_error",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "download_error",
|
||||
ExpectDBStatus: "download_error",
|
||||
ExpectDownloadCurrent: 0,
|
||||
ExpectDownloadTotal: 1000,
|
||||
},
|
||||
{
|
||||
Name: "install_start",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"installed": 0,
|
||||
"total_files": 10,
|
||||
"msg": "install_start",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "installing",
|
||||
ExpectDBStatus: "package_install_start",
|
||||
ExpectInstalled: 0,
|
||||
ExpectInstallTotal: 10,
|
||||
},
|
||||
{
|
||||
Name: "installing",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"installed": 2,
|
||||
"total_files": 10,
|
||||
"msg": "installing",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "installing",
|
||||
ExpectDBStatus: "package_install_start",
|
||||
ExpectInstalled: 2,
|
||||
ExpectInstallTotal: 10,
|
||||
},
|
||||
{
|
||||
Name: "install_complete",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"installed": 9,
|
||||
"total_files": 10,
|
||||
"msg": "install_complete",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "installing",
|
||||
ExpectDBStatus: "package_install_start",
|
||||
ExpectInstalled: 9,
|
||||
ExpectInstallTotal: 10,
|
||||
},
|
||||
{
|
||||
Name: "package_install_complete",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"installed": 10,
|
||||
"total_files": 10,
|
||||
"msg": "install_complete",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "package_install_complete",
|
||||
ExpectDBStatus: "package_install_complete",
|
||||
ExpectInstalled: 10,
|
||||
ExpectInstallTotal: 10,
|
||||
},
|
||||
{
|
||||
Name: "install_error",
|
||||
Device: common.TRex,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id": %d,
|
||||
"ecu": "TEST",
|
||||
"installed": 3,
|
||||
"total_files": 10,
|
||||
"msg": "install_error",
|
||||
"err": 0
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "install_error",
|
||||
ExpectDBStatus: "install_error",
|
||||
ExpectInstalled: 3,
|
||||
ExpectInstallTotal: 10,
|
||||
},
|
||||
{
|
||||
Name: "package_download_complete",
|
||||
Device: common.HMI,
|
||||
Payload: fmt.Sprintf(`{
|
||||
"car_update_id":%d,
|
||||
"ecu":"ICC",
|
||||
"file_current":null,
|
||||
"file_total":null,
|
||||
"package_current":920639485,
|
||||
"package_total":920639485,
|
||||
"installed":null,
|
||||
"total_files":null,
|
||||
"msg":"package_download_complete",
|
||||
"err":null
|
||||
}`, carUpdateID),
|
||||
ExpectedMsg: "package_download_complete",
|
||||
ExpectDBStatus: "package_download_complete",
|
||||
ExpectInstalled: 3,
|
||||
ExpectInstallTotal: 10,
|
||||
ExpectDownloadCurrent: 920639485,
|
||||
ExpectDownloadTotal: 920639485,
|
||||
},
|
||||
}
|
||||
|
||||
keys := make([]string, 1)
|
||||
statuses := make([]interface{}, 1)
|
||||
|
||||
for _, test := range tests {
|
||||
err := handlers.CarUpdateProgressStatus(db, ka, test.Device, testVIN, []byte(test.Payload))
|
||||
if err != nil {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fmt.Sprintf("[%v] %s output error", test.Device, test.Name), nil, err)
|
||||
}
|
||||
|
||||
status := common.CarUpdateProgress{}
|
||||
keys[0] = redis.CarUpdateStatusHashKey(carUpdateID)
|
||||
statuses[0] = &status
|
||||
|
||||
err = conn.GetObjectsMulti(keys, statuses)
|
||||
if err != nil {
|
||||
t.Errorf(testhelper.TestErrorTemplate, "GetObjectsMulti", nil, err)
|
||||
return
|
||||
}
|
||||
if status.Status != test.ExpectedMsg {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fmt.Sprintf("[%v] %s Status", test.Device, test.Name), test.ExpectedMsg, status.Status)
|
||||
}
|
||||
if status.InstalledFiles != test.ExpectInstalled {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fmt.Sprintf("[%v] %s InstalledFiles", test.Device, test.Name), test.ExpectInstalled, status.InstalledFiles)
|
||||
}
|
||||
if status.TotalFiles != test.ExpectInstallTotal {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fmt.Sprintf("[%v] %s TotalFiles", test.Device, test.Name), test.ExpectInstallTotal, status.TotalFiles)
|
||||
}
|
||||
if status.PackageCurrent != test.ExpectDownloadCurrent {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fmt.Sprintf("[%v] %s PackageCurrent", test.Device, test.Name), test.ExpectDownloadCurrent, status.PackageCurrent)
|
||||
}
|
||||
if status.PackageTotal != test.ExpectDownloadTotal {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fmt.Sprintf("[%v] %s PackageTotal", test.Device, test.Name), test.ExpectDownloadTotal, status.PackageTotal)
|
||||
}
|
||||
if status.ErrorCode != test.ExpectErrorCode {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fmt.Sprintf("[%v] %s ErrorCode", test.Device, test.Name), test.ExpectErrorCode, status.ErrorCode)
|
||||
}
|
||||
|
||||
cu, err := db.GetCarUpdates().SelectByID(carUpdateID)
|
||||
if err != nil {
|
||||
t.Errorf(testhelper.TestErrorTemplate, "Get from DB", nil, err)
|
||||
return
|
||||
}
|
||||
if cu.Status != test.ExpectDBStatus {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fmt.Sprintf("[%v] %s DB Status", test.Device, test.Name), test.ExpectDBStatus, cu.Status)
|
||||
}
|
||||
if cu.ErrorCode != test.ExpectErrorCode {
|
||||
t.Errorf(testhelper.TestErrorTemplate, fmt.Sprintf("[%v] %s DB ErrorCode", test.Device, test.Name), test.ExpectErrorCode, cu.ErrorCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func setupCarUpdateProgressFunc(db *services.DB, vin string) (*common.UpdateManifest, int64, error) {
|
||||
_, err := db.GetCars().SelectOrInsert(&common.Car{
|
||||
VIN: vin,
|
||||
Model: "Ocean",
|
||||
Year: 2022,
|
||||
Trim: "Sport",
|
||||
})
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
manifest := common.UpdateManifest{
|
||||
Name: "TestCarUpdateProgressFunctional",
|
||||
Version: "1000",
|
||||
Description: "For TestCarUpdateProgressFunctional",
|
||||
ReleaseNotes: "http://releasenotes.com",
|
||||
Country: "US",
|
||||
PowerTrain: "MD23",
|
||||
Restraint: "None",
|
||||
Model: "Ocean",
|
||||
Trim: "Sport",
|
||||
Year: 2022,
|
||||
BodyType: "truck",
|
||||
}
|
||||
_, err = db.GetUpdateManifests().Insert(&manifest)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
_, err = db.GetUpdateManifests().ECUInsert(&common.UpdateManifestECU{
|
||||
UpdateManifestID: manifest.ID,
|
||||
ECU: "ICC",
|
||||
Version: "ICCVERSION",
|
||||
})
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
_, err = db.GetUpdateManifests().ECUInsert(&common.UpdateManifestECU{
|
||||
UpdateManifestID: manifest.ID,
|
||||
ECU: "ADAS",
|
||||
Version: "ADASVERSION",
|
||||
})
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
carupdate := common.CarUpdate{
|
||||
VIN: vin,
|
||||
UpdateManifestID: manifest.ID,
|
||||
}
|
||||
_, err = db.GetCarUpdates().Insert(&carupdate)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return &manifest, carupdate.ID, nil
|
||||
}
|
||||
Reference in New Issue
Block a user