feat(go): add realtime kv projection
This commit is contained in:
@@ -271,6 +271,48 @@ func TestRepositoryCollapsesGB32960VendorStackFragmentsIntoSingleRealtimeSummary
|
||||
}
|
||||
}
|
||||
|
||||
func TestRepositoryWritesRealtimeKVHashes(t *testing.T) {
|
||||
repo, closeFn := newTestRepository(t)
|
||||
defer closeFn()
|
||||
ctx := context.Background()
|
||||
|
||||
if err := repo.Update(ctx, envelope.FrameEnvelope{
|
||||
Protocol: envelope.ProtocolGB32960,
|
||||
VIN: "VIN001",
|
||||
EventTimeMS: 1000,
|
||||
ReceivedAtMS: 1100,
|
||||
Parsed: map[string]any{
|
||||
"data_units": []any{
|
||||
map[string]any{"type": "0x01", "name": "vehicle", "value": map[string]any{"soc_percent": 88.0}},
|
||||
map[string]any{"type": "0x30", "name": "gd_fc_stack", "value": map[string]any{
|
||||
"stack_count": 1,
|
||||
"summaries": []any{map[string]any{"stack_water_outlet_temp_c": 63}},
|
||||
}},
|
||||
},
|
||||
},
|
||||
}); err != nil {
|
||||
t.Fatalf("Update() error = %v", err)
|
||||
}
|
||||
|
||||
vehicleKV, err := repo.client.HGetAll(ctx, "vehicle:rt-kv:GB32960:VIN001:vehicle").Result()
|
||||
if err != nil {
|
||||
t.Fatalf("vehicle kv HGetAll error = %v", err)
|
||||
}
|
||||
if vehicleKV["soc_percent"] != "88" || vehicleKV["_event_id"] == "" || vehicleKV["_event_time_ms"] != "1000" {
|
||||
t.Fatalf("vehicle kv = %#v", vehicleKV)
|
||||
}
|
||||
stackKV, err := repo.client.HGetAll(ctx, "vehicle:rt-kv:GB32960:VIN001:gd_fc_stack").Result()
|
||||
if err != nil {
|
||||
t.Fatalf("stack kv HGetAll error = %v", err)
|
||||
}
|
||||
if stackKV["stack_water_outlet_temp_c"] != "63" {
|
||||
t.Fatalf("stack kv = %#v", stackKV)
|
||||
}
|
||||
if ttl := repo.client.TTL(ctx, "vehicle:rt-kv:GB32960:VIN001:vehicle").Val(); ttl <= 0 {
|
||||
t.Fatalf("kv ttl should be set, got %v", ttl)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRepositoryReplacesJT808LocationWhenUpdatingRealtimeRaw(t *testing.T) {
|
||||
repo, closeFn := newTestRepository(t)
|
||||
defer closeFn()
|
||||
|
||||
Reference in New Issue
Block a user