Add depot, attendant, jetfire, optimus, ota services with kustomize overlays

This commit is contained in:
Chris Rai
2026-01-31 15:35:07 -05:00
parent a0ec642ca1
commit 9a5cb2f547
404 changed files with 38817 additions and 16 deletions

View File

@@ -0,0 +1,137 @@
package handlers_test
import (
"fmt"
"net/http"
"testing"
"otaupdate/handlers"
"otaupdate/utils"
th "github.com/fiskerinc/cloud-services/pkg/testhelper"
)
var testInput = firstRecord + "\n" + secondRecord + "\n" + thirdRecord + "\n" + fourthRecord + "\n" + fifthRecord + "\n" + sixthRecord
var firstRecord = `{"level":"debug","timestamp":"2023-Jan-25 22:50:49.323538","line_number":0,"filename":"dummy","msg":"vom::on_frame_() frame 0x52","received_timestamp":"2023-Jan-25 22:51:10.122482177"}`
var secondRecord = `{"level":"debug","timestamp":"2023-Jan-25 22:50:49.225069","line_number":0,"filename":"dummy","msg":"vom::on_frame_() frame 0x52","received_timestamp":"2023-Jan-25 22:51:10.122502977"}`
var thirdRecord = `{"level":"debug","timestamp":"2023-Jan-25 22:50:51.932326","line_number":0,"filename":"dummy","msg":"vom::on_frame_() frame 0x52","received_timestamp":"2023-Jan-25 22:51:10.122710681"}`
var fourthRecord = `{"level":"debug","timestamp":"2023-Jan-25 22:50:51.842027","line_number":0,"filename":"dummy","msg":"vom::on_frame_() frame 0x52","received_timestamp":"2023-Jan-25 22:51:10.122736981"}`
var fifthRecord = `{"level":"debug","timestamp":"2023-Jan-25 22:50:51.729643","line_number":0,"filename":"dummy","msg":"vom::on_frame_() frame 0x52","received_timestamp":"2023-Jan-25 22:51:10.122761582"}`
var sixthRecord = `{"level":"debug","timestamp":"2023-Jan-25 22:50:52.343492","line_number":0,"filename":"dummy","msg":"vom::on_frame_() frame 0x52","received_timestamp":"2023-Jan-25 22:51:10.122779382"}`
var (
testVin = "1G1FP87S1GN000414"
testYear = 2023
testMonth = 1
testDay = 17
testOffset = 0
testCount = 0
testReadDirection = utils.Up
)
func formatRequest(request string) string {
return fmt.Sprintf(request, testVin, testYear, testMonth, testDay, testOffset, testCount,
func() string {
if testReadDirection == utils.Up {
return "UP"
} else {
return "DOWN"
}
}())
}
func addTest(t *testing.T, name, expectectedResponse string) {
handlers.ReadAzureBlobFun = createTestReader(t, testVin, testYear, testMonth, testDay, testOffset, testCount, testReadDirection)
test := th.BasicHttpTest{
Name: name,
Request: th.MakeTestRequest(http.MethodGet,
formatRequest("http://example.com/vehicle/%s/trex-logs?&date=%d-%02d-%d&offset=%d&count=%d&direction=%s"), nil),
ExpectedStatus: http.StatusOK,
ExpectedResponse: expectectedResponse,
}
th.RunParamHttpTest(t, test, handlers.HandleTrexLogsGet, "/vehicle/:vin/trex-logs")
}
func createTestReader(t *testing.T, testVin string, testYear, testMonth, testDay, testOffset, testCount int, testReadDirection utils.Direction) func(string, string, int, int, int, int64, int64, utils.Direction) ([]byte, int64, error) {
return func(path, vin string, year, month, day int, offset, count int64, readDirection utils.Direction) ([]byte, int64, error) {
var check = func(format string, actual, expected interface{}) {
if actual != expected {
t.Fatalf(format, expected, actual)
}
}
check("expected vin: %s, got: %s", vin, testVin)
check("expected year: %d, got: %d", year, testYear)
check("expected month: %d, got: %d", month, testMonth)
check("expected day: %d, got: %d", day, testDay)
check("expected offset: %d, got: %d", offset, int64(testOffset))
check("expected count: %d, got: %d", count, int64(testCount))
check("expected direction: %d, got: %d", readDirection, testReadDirection)
//count from the end
offset = int64(len(testInput)) - offset
begin := offset
if readDirection == utils.Up {
begin -= count
}
if begin <= 0 {
begin = 0
count = offset
}
min := func(a, b int64) int64 {
if a < b {
return a
}
return b
}
max := func(a, b int64) int64 {
if a > b {
return a
}
return b
}
begin = max(0, begin)
return []byte(testInput)[begin : begin+min(count, int64(len(testInput))-begin)], int64(len(testInput)), nil
}
}
func TestTrexLogsGet(t *testing.T) {
testCount = 300
testLen := int64(len(testInput))
//expect that we read exactly 1 record
addTest(t, "Read 1 record", //+1 is for \n
fmt.Sprintf(`{"data":[%s],"RealOffset":%d,"bytesRead":%d,"blobSize":%d}`, sixthRecord, testOffset, len(sixthRecord)+1, testLen))
testCount = 100
//read nothing (100 < len(sixthRecord))
addTest(t, "Read 0 record",
fmt.Sprintf(`{"data":[],"RealOffset":%d,"bytesRead":%d,"blobSize":%d}`, testOffset, 0, testLen))
//read all
testCount = len(testInput)
addTest(t, "Read all records",
fmt.Sprintf(`{"data":[%s,%s,%s,%s,%s,%s],"RealOffset":%d,"bytesRead":%d,"blobSize":%d}`,
firstRecord, secondRecord, thirdRecord, fourthRecord, fifthRecord, sixthRecord, testOffset, testCount, testLen))
//something a little big bigger than 1 record
testCount = len(sixthRecord) + 25
testOffset = 0
//read 1 by 1 from the bottom
addTest(t, "Read sixth record", //+1 is for \n
fmt.Sprintf(`{"data":[%s],"RealOffset":%d,"bytesRead":%d,"blobSize":%d}`, sixthRecord, testOffset, len(sixthRecord)+1, testLen))
testOffset += len(sixthRecord) + 1
addTest(t, "Read fifth record", //+1 is for \n
fmt.Sprintf(`{"data":[%s],"RealOffset":%d,"bytesRead":%d,"blobSize":%d}`, fifthRecord, testOffset, len(fifthRecord)+1, testLen))
testOffset += len(fifthRecord) + 1
addTest(t, "Read fourth record", //+1 is for \n
fmt.Sprintf(`{"data":[%s],"RealOffset":%d,"bytesRead":%d,"blobSize":%d}`, fourthRecord, testOffset, len(fourthRecord)+1, testLen))
testOffset += len(fourthRecord) + 1
addTest(t, "Read third record", //+1 is for \n
fmt.Sprintf(`{"data":[%s],"RealOffset":%d,"bytesRead":%d,"blobSize":%d}`, thirdRecord, testOffset, len(thirdRecord)+1, testLen))
testOffset += len(thirdRecord) + 1
addTest(t, "Read second record", //+1 is for \n
fmt.Sprintf(`{"data":[%s],"RealOffset":%d,"bytesRead":%d,"blobSize":%d}`, secondRecord, testOffset, len(secondRecord)+1, testLen))
testOffset += len(secondRecord) + 1
addTest(t, "Read first record", //+1 is for \n
fmt.Sprintf(`{"data":[%s],"RealOffset":%d,"bytesRead":%d,"blobSize":%d}`, firstRecord, testOffset, len(firstRecord), testLen))
}