perf(go): cache realtime plate lookups
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"errors"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/DATA-DOG/go-sqlmock"
|
||||
|
||||
@@ -212,6 +213,44 @@ func TestSnapshotWriterBackfillsPlateFromBindingByVIN(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSnapshotWriterCachesBindingPlateByVIN(t *testing.T) {
|
||||
exec := &recordingSnapshotExec{}
|
||||
resolver := &recordingPlateResolver{plate: "沪A12345"}
|
||||
writer := NewSnapshotWriterWithPlateResolver(exec, NewCachedPlateResolver(resolver, time.Hour))
|
||||
event := envelope.FrameEnvelope{
|
||||
Protocol: envelope.ProtocolGB32960,
|
||||
MessageID: "0x02",
|
||||
VIN: "VIN001",
|
||||
EventTimeMS: 1782918600000,
|
||||
ReceivedAtMS: 1782918601000,
|
||||
Fields: map[string]any{
|
||||
envelope.FieldLatitude: 30.590151,
|
||||
envelope.FieldLongitude: 121.069881,
|
||||
},
|
||||
}
|
||||
|
||||
if err := writer.Update(context.Background(), event); err != nil {
|
||||
t.Fatalf("first Update() error = %v", err)
|
||||
}
|
||||
event.EventTimeMS += 1000
|
||||
event.ReceivedAtMS += 1000
|
||||
if err := writer.Update(context.Background(), event); err != nil {
|
||||
t.Fatalf("second Update() error = %v", err)
|
||||
}
|
||||
|
||||
if resolver.calls != 1 {
|
||||
t.Fatalf("plate resolver calls = %d, want 1", resolver.calls)
|
||||
}
|
||||
if len(exec.calls) != 4 {
|
||||
t.Fatalf("exec calls = %d, want 4", len(exec.calls))
|
||||
}
|
||||
for _, index := range []int{0, 2} {
|
||||
if got, want := exec.calls[index].args[2], "沪A12345"; got != want {
|
||||
t.Fatalf("snapshot %d plate arg = %#v, want %q", index, got, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSnapshotWriterKeepsEventPlateWhenPresent(t *testing.T) {
|
||||
exec := &recordingSnapshotExec{}
|
||||
resolver := &recordingPlateResolver{plate: "沪B99999"}
|
||||
@@ -358,9 +397,11 @@ type recordingPlateResolver struct {
|
||||
vin string
|
||||
plate string
|
||||
err error
|
||||
calls int
|
||||
}
|
||||
|
||||
func (r *recordingPlateResolver) PlateByVIN(_ context.Context, vin string) (string, error) {
|
||||
r.calls++
|
||||
r.vin = vin
|
||||
return r.plate, r.err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user