|
|
|
|
@@ -18,17 +18,17 @@ func TestRawFrameRepositoryQueriesRawFramesWithFilters(t *testing.T) {
|
|
|
|
|
t.Fatalf("sqlmock.New() error = %v", err)
|
|
|
|
|
}
|
|
|
|
|
defer db.Close()
|
|
|
|
|
mock.ExpectQuery("SELECT ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes, raw_hex, raw_text, parsed_json, fields_json, parse_status, parse_error, source_endpoint, protocol, vehicle_key, vin, phone, device_id FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
mock.ExpectQuery("SELECT ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes, raw_hex, raw_text, parsed_json, parse_status, parse_error, source_endpoint, protocol, vehicle_key, vin, phone, device_id FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
WillReturnRows(sqlmock.NewRows([]string{
|
|
|
|
|
"ts", "frame_id", "event_id", "message_id", "event_time", "received_at", "raw_size_bytes",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "fields_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"protocol", "vehicle_key", "vin", "phone", "device_id",
|
|
|
|
|
}).AddRow(
|
|
|
|
|
time.Date(2026, 7, 1, 23, 25, 36, 0, time.FixedZone("Asia/Shanghai", 8*3600)),
|
|
|
|
|
"go_frame", "event-1", 0x0200,
|
|
|
|
|
time.Date(2026, 7, 1, 23, 25, 36, 0, time.FixedZone("Asia/Shanghai", 8*3600)),
|
|
|
|
|
time.Date(2026, 7, 1, 23, 25, 37, 0, time.FixedZone("Asia/Shanghai", 8*3600)),
|
|
|
|
|
64, "7E0200", "", `{"header":{"message_id":"0x0200"}}`, `{"speed_kmh":0}`,
|
|
|
|
|
64, "7E0200", "", `{"header":{"message_id":"0x0200"}}`,
|
|
|
|
|
"OK", "", "222.66.200.68:29646", "JT808", "013079963379", "LKLG7C4E3NA774736", "013079963379", "9963379",
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
@@ -65,15 +65,15 @@ func TestRawFrameRepositoryHydratesChunkedParsedJSON(t *testing.T) {
|
|
|
|
|
defer db.Close()
|
|
|
|
|
|
|
|
|
|
manifest := `{"chunked":true,"payload_kind":"parsed_json","event_id":"event-oversized","chunk_count":2}`
|
|
|
|
|
mock.ExpectQuery("SELECT ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes, raw_hex, raw_text, parsed_json, fields_json, parse_status, parse_error, source_endpoint, protocol, vehicle_key, vin, phone, device_id FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
mock.ExpectQuery("SELECT ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes, raw_hex, raw_text, parsed_json, parse_status, parse_error, source_endpoint, protocol, vehicle_key, vin, phone, device_id FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
WillReturnRows(sqlmock.NewRows([]string{
|
|
|
|
|
"ts", "frame_id", "event_id", "message_id", "event_time", "received_at", "raw_size_bytes",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "fields_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"protocol", "vehicle_key", "vin", "phone", "device_id",
|
|
|
|
|
}).AddRow(
|
|
|
|
|
"2026-07-02 10:00:00", "go_frame", "event-oversized", 2,
|
|
|
|
|
"2026-07-02 10:00:00", "2026-07-02 10:00:00", 4096,
|
|
|
|
|
"2323", "", manifest, `{"speed_kmh":0}`, "OK", "", "8.134.95.166:53702",
|
|
|
|
|
"2323", "", manifest, "OK", "", "8.134.95.166:53702",
|
|
|
|
|
"GB32960", "LB9A32A21R0LS1707", "LB9A32A21R0LS1707", "", "",
|
|
|
|
|
))
|
|
|
|
|
mock.ExpectQuery("SELECT event_id, payload_kind, chunk_index, chunk_text FROM lingniu_vehicle_ts.raw_frame_payload_chunks").
|
|
|
|
|
@@ -109,14 +109,14 @@ func TestRawFrameHandlerReturnsRawFrames(t *testing.T) {
|
|
|
|
|
defer db.Close()
|
|
|
|
|
mock.ExpectQuery("SELECT COUNT\\(\\*\\) FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
WillReturnRows(sqlmock.NewRows([]string{"total"}).AddRow(38))
|
|
|
|
|
mock.ExpectQuery("SELECT ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes, raw_hex, raw_text, parsed_json, fields_json, parse_status, parse_error, source_endpoint, protocol, vehicle_key, vin, phone, device_id FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
mock.ExpectQuery("SELECT ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes, raw_hex, raw_text, parsed_json, parse_status, parse_error, source_endpoint, protocol, vehicle_key, vin, phone, device_id FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
WillReturnRows(sqlmock.NewRows([]string{
|
|
|
|
|
"ts", "frame_id", "event_id", "message_id", "event_time", "received_at", "raw_size_bytes",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "fields_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"protocol", "vehicle_key", "vin", "phone", "device_id",
|
|
|
|
|
}).AddRow(
|
|
|
|
|
"2026-07-01 22:28:25", "go_frame", "event-2", 2, "2026-07-01 22:28:25", "2026-07-01 22:28:25",
|
|
|
|
|
128, "2323", "", `{"command":"REALTIME"}`, `{"total_mileage_km":53490.9}`,
|
|
|
|
|
128, "2323", "", `{"command":"REALTIME"}`,
|
|
|
|
|
"OK", "", "8.134.95.166:53702", "GB32960", "LB9A32A21R0LS1707", "LB9A32A21R0LS1707", "", "",
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
@@ -135,6 +135,9 @@ func TestRawFrameHandlerReturnsRawFrames(t *testing.T) {
|
|
|
|
|
t.Fatalf("response missing %s: %s", want, body)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if strings.Contains(body, "fields_json") {
|
|
|
|
|
t.Fatalf("response should not expose duplicate fields_json: %s", body)
|
|
|
|
|
}
|
|
|
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
|
|
|
t.Fatalf("sql expectations: %v", err)
|
|
|
|
|
}
|
|
|
|
|
@@ -151,11 +154,11 @@ func TestRawFrameHandlerFiltersByVehicleKey(t *testing.T) {
|
|
|
|
|
mock.ExpectQuery("vehicle_key = 'JT808:013307811350'").
|
|
|
|
|
WillReturnRows(sqlmock.NewRows([]string{
|
|
|
|
|
"ts", "frame_id", "event_id", "message_id", "event_time", "received_at", "raw_size_bytes",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "fields_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"protocol", "vehicle_key", "vin", "phone", "device_id",
|
|
|
|
|
}).AddRow(
|
|
|
|
|
"2026-07-02 00:18:22", "go_frame", "event-3", 0x0200, "2026-07-02 00:18:22", "2026-07-02 00:22:43",
|
|
|
|
|
63, "7E0200", "", `{"header":{"message_id":"0x0200"}}`, `{"total_mileage_km":8792.8}`,
|
|
|
|
|
63, "7E0200", "", `{"header":{"message_id":"0x0200"}}`,
|
|
|
|
|
"OK", "", "115.231.168.135:22170", "JT808", "JT808:013307811350", "", "013307811350", "",
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
@@ -188,11 +191,11 @@ func TestRawFrameHandlerCanSkipTotalCountForFreshnessProbe(t *testing.T) {
|
|
|
|
|
mock.ExpectQuery("ORDER BY received_at DESC LIMIT 1 OFFSET 0").
|
|
|
|
|
WillReturnRows(sqlmock.NewRows([]string{
|
|
|
|
|
"ts", "frame_id", "event_id", "message_id", "event_time", "received_at", "raw_size_bytes",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "fields_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"protocol", "vehicle_key", "vin", "phone", "device_id",
|
|
|
|
|
}).AddRow(
|
|
|
|
|
"2026-07-02 01:26:48", "go_frame", "event-4", 0x0200, "2026-07-02 01:20:46", "2026-07-02 01:26:48",
|
|
|
|
|
63, "7E0200", "", `{"header":{"message_id":"0x0200"}}`, `{"speed_kmh":0}`,
|
|
|
|
|
63, "7E0200", "", `{"header":{"message_id":"0x0200"}}`,
|
|
|
|
|
"OK", "", "115.231.168.135:22170", "JT808", "JT808:013307811254", "", "013307811254", "",
|
|
|
|
|
))
|
|
|
|
|
|
|
|
|
|
@@ -224,10 +227,10 @@ func TestRawFrameHandlerReturnsEmptyItemsArrayWhenNoRows(t *testing.T) {
|
|
|
|
|
defer db.Close()
|
|
|
|
|
mock.ExpectQuery("SELECT COUNT\\(\\*\\) FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
WillReturnRows(sqlmock.NewRows([]string{"total"}).AddRow(0))
|
|
|
|
|
mock.ExpectQuery("SELECT ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes, raw_hex, raw_text, parsed_json, fields_json, parse_status, parse_error, source_endpoint, protocol, vehicle_key, vin, phone, device_id FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
mock.ExpectQuery("SELECT ts, frame_id, event_id, message_id, event_time, received_at, raw_size_bytes, raw_hex, raw_text, parsed_json, parse_status, parse_error, source_endpoint, protocol, vehicle_key, vin, phone, device_id FROM lingniu_vehicle_ts.raw_frames").
|
|
|
|
|
WillReturnRows(sqlmock.NewRows([]string{
|
|
|
|
|
"ts", "frame_id", "event_id", "message_id", "event_time", "received_at", "raw_size_bytes",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "fields_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"raw_hex", "raw_text", "parsed_json", "parse_status", "parse_error", "source_endpoint",
|
|
|
|
|
"protocol", "vehicle_key", "vin", "phone", "device_id",
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
|