314 lines
9.2 KiB
Go
314 lines
9.2 KiB
Go
package queries_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/fiskerinc/cloud-services/pkg/common"
|
|
"github.com/fiskerinc/cloud-services/pkg/db"
|
|
"github.com/fiskerinc/cloud-services/pkg/db/queries"
|
|
"github.com/fiskerinc/cloud-services/pkg/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)
|
|
}
|
|
}
|