Files
cloud-services/pkg/db/queries/updatemanifests_test.go

314 lines
9.1 KiB
Go

package queries_test
import (
"fmt"
"testing"
"time"
"fiskerinc.com/modules/common"
"fiskerinc.com/modules/db"
"fiskerinc.com/modules/db/queries"
"fiskerinc.com/modules/testhelper"
)
func TestUpdatePackagesManifest(t *testing.T) {
t.Skip()
query := setupUpdateManifest(t)
manifestID := insertUpdateManifest(t, query)
if manifestID == 0 {
t.Error("setup failed")
return
}
selectUpdateManifest(t, query, manifestID)
searchUpdateManifest(t, query, manifestID)
updateUpdateManifest(t, query, manifestID)
archiveUpdateManifest(t, query, []int64{manifestID}, true)
deleteUpdateManifest(t, query, manifestID)
}
func setupUpdateManifest(t *testing.T) queries.UpdateManifestsInterface {
instance := queries.NewUpdateManifest(nil)
conn := instance.GetDBConn()
conn.AddQueryHook(db.SQLLogger{})
client := instance.GetClient()
client.InitSchema([]interface{}{
(*common.UpdateManifest)(nil),
(*common.UpdateManifestECU)(nil),
(*common.UpdateManifestFile)(nil),
(*common.MemoryRegion)(nil),
})
return instance
}
func insertUpdateManifest(t *testing.T, query queries.UpdateManifestsInterface) int64 {
expectedRows := 20
manifest := common.UpdateManifest{
Name: fmt.Sprintf("NAME %s", time.Now().String()),
Version: "VERSION",
Description: "DESCRIPTION",
ReleaseNotes: "RELEASENOTES",
RollbackEnabled: true,
Type: "standard",
Fingerprint: "10203040",
Country: "US",
PowerTrain: "MD23",
Restraint: "None",
Model: "Ocean",
Trim: "Sport",
Year: 2022,
BodyType: "truck",
ECUs: []*common.UpdateManifestECU{
{
ECU: "ECU",
Version: "VERSION",
HWVersion: "BIGBADVERSION",
HWVersions: []string{"HWVERSION"},
ConfigurationMask: "CONFIGURATIONMASK",
Mode: "D",
SelfDownload: true,
Files: []*common.UpdateManifestFile{
{
FileID: "FILEID",
URL: "URL",
Filename: "FILENAME",
FileSize: 5,
Checksum: "CHECKSUM",
FileType: "bootloader",
FileOrder: 9,
WriteRegionID: 100,
WriteRegion: common.MemoryRegion{
Offset: 101,
Length: 102,
},
EraseRegionID: 200,
EraseRegion: &common.MemoryRegion{
Offset: 201,
Length: 202,
},
},
},
},
},
}
result, err := query.Insert(&manifest)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest insert", nil, err)
return 0
}
if result.RowsAffected() != expectedRows {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest insert RowsAffected", expectedRows, result.RowsAffected())
}
if result.RowsReturned() != expectedRows {
// file insert does not return row
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest insert RowsReturned", expectedRows, result.RowsReturned())
}
return manifest.ID
}
func selectUpdateManifest(t *testing.T, query queries.UpdateManifestsInterface, manifestID int64) {
manifest := common.UpdateManifest{ID: manifestID}
err := query.Load(&manifest)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Load", nil, err)
}
if manifest.Name == "" {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Load Name", "not empty", manifest.Name)
}
manifestValues := map[string]interface{}{
"Version": "VERSION",
"Description": "DESCRIPTION",
"ReleaseNotes": "RELEASENOTES",
"RollbackEnabled": true,
"Type": "standard",
"Fingerprint": "10203040",
}
testhelper.PropsTester(t, &manifest, manifestValues)
if len(manifest.ECUs) != 1 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Load ECUs", 1, len(manifest.ECUs))
} else {
ecu := manifest.ECUs[0]
ecuValues := map[string]interface{}{
"ECU": "ECU",
"Version": "VERSION",
"HWVersion": "",
"HWVersions": []string{"HWVERSION"},
"ConfigurationMask": "CONFIGURATIONMASK",
"Mode": "D",
"SelfDownload": true,
}
testhelper.PropsTester(t, ecu, ecuValues)
if len(ecu.Files) != 1 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Load Files", 1, len(ecu.Files))
} else {
file := ecu.Files[0]
fileValues := map[string]interface{}{
"FileID": "FILEID",
"URL": "URL",
"Filename": "FILENAME",
"FileSize": uint64(5),
"Checksum": "CHECKSUM",
"FileType": "bootloader",
"FileOrder": 9,
}
testhelper.PropsTester(t, file, fileValues)
}
}
manifests, err := query.Select(&common.UpdateManifest{ID: manifestID}, nil)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Select", nil, err)
}
if len(manifests) != 1 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Select count", 1, len(manifests))
} else {
testhelper.PropsTester(t, &manifests[0], manifestValues)
}
count, err := query.Count(common.UpdateManifest{ID: manifestID})
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Count", nil, err)
}
if count != 1 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Count", 1, count)
}
}
func archiveUpdateManifest(t *testing.T, query queries.UpdateManifestsInterface, ids []int64, active bool) {
result, err := query.Archive(ids, active)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest archive", nil, err)
return
}
if result.RowsAffected() != 1 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest archive RowsAffected", 1, result.RowsAffected())
}
if result.RowsReturned() != 0 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest archive RowsReturned", 0, result.RowsReturned())
}
}
func searchUpdateManifest(t *testing.T, query queries.UpdateManifestsInterface, manifestID int64) {
manifest := common.UpdateManifest{ID: manifestID}
err := query.Load(&manifest)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Search Load", nil, err)
}
search := common.UpdateManifestSearch{
Search: manifest.Name,
}
manifests, err := query.Search(search, nil)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Search", nil, err)
}
if len(manifests) == 0 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Search len", "gt 0", len(manifests))
}
count, err := query.SearchCount(search)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest SearchCount", nil, err)
}
if count == 0 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest SearchCount count", "gt 0", count)
}
}
func updateUpdateManifest(t *testing.T, query queries.UpdateManifestsInterface, manifestID int64) {
manifest := common.UpdateManifest{ID: manifestID}
err := query.Load(&manifest)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Update Load", nil, err)
}
manifest.Type = "forced"
manifest.Name = "some very nice update"
result, err := query.Update(&manifest)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Update", nil, err)
return
}
if result.RowsAffected() != 1 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Update RowsAffected", 1, result.RowsAffected())
}
if result.RowsReturned() != 0 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Update RowsReturned", 0, result.RowsReturned())
}
manifest = common.UpdateManifest{ID: manifestID}
err = query.Load(&manifest)
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest Update Reload", nil, err)
}
if manifest.Type != "forced" && manifest.Name != "some very nice update" {
t.Errorf(
testhelper.TestErrorTemplate,
"UpdateManifest Update",
"forced, some very nice update",
fmt.Sprintf("%s, %s", manifest.Type, manifest.Name))
}
}
func deleteUpdateManifest(t *testing.T, query queries.UpdateManifestsInterface, manifestID int64) {
result, err := query.Delete(&common.UpdateManifest{ID: manifestID})
if err != nil {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest delete", nil, err)
return
}
// Used to be 15 as the delete wasn't cascaded and the count of rows deletes was the total of all the deletes being ran
if result.RowsAffected() != 1 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest delete RowsAffected", 1, result.RowsAffected())
}
if result.RowsReturned() != 0 {
t.Errorf(testhelper.TestErrorTemplate, "UpdateManifest delete RowsReturned", 0, result.RowsReturned())
}
}
// Testing to see if ECURollbakcs query works successfully on the database
func TestECURollbacks(t *testing.T) {
t.Skip()
vin := "VCF1ZBU28PG003392"
instance := queries.NewUpdateManifest(nil)
man := common.UpdateManifestECU{
ECU: "ICC",
}
res, err := instance.ECURollback(&man, vin)
if err != nil {
t.Error(err)
}
if len(res) != 1{
t.Logf("Rollback length wrong: expected 1 got %d", len(res))
t.Fail()
}
}
func TestManifestSearch(t *testing.T){
t.Skip()
filter := common.UpdateManifestSearch{}
filter.ManifestType = common.AftersalesUpdateType
paging := queries.PageQueryOptions{
Order: "id DESC",
Limit: 5,
Offset: 0,
}
query := setupUpdateManifest(t)
_, err := query.Search(filter, &paging)
if err != nil {
t.Error(err)
}
}