fix(go): batch durable kafka replay

This commit is contained in:
lingniu
2026-07-02 14:01:50 +08:00
parent c939cc6b0c
commit 5a958616a3
5 changed files with 176 additions and 5 deletions

View File

@@ -64,6 +64,29 @@ func TestKafkaSinkRejectsUnknownProtocol(t *testing.T) {
}
}
func TestKafkaSinkPublishesDurableRecordsInSingleWriterCall(t *testing.T) {
writer := &recordingWriter{}
sink := newKafkaSinkWithWriter(writer, KafkaConfig{UnifiedTopic: "custom.unified"})
env := envelope.FrameEnvelope{Protocol: envelope.ProtocolJT808, Phone: "13307795425", MessageID: "0x0200"}
err := sink.PublishRecords(context.Background(), []durableRecord{
{Kind: "raw", Envelope: env},
{Kind: "unified", Envelope: env},
})
if err != nil {
t.Fatalf("PublishRecords() error = %v", err)
}
if writer.writeCalls != 1 {
t.Fatalf("WriteMessages calls = %d, want 1", writer.writeCalls)
}
if len(writer.messages) != 2 {
t.Fatalf("messages = %d, want 2", len(writer.messages))
}
if writer.messages[0].Topic != "vehicle.raw.jt808.v1" || writer.messages[1].Topic != "custom.unified" {
t.Fatalf("topics = %q, %q", writer.messages[0].Topic, writer.messages[1].Topic)
}
}
func TestNewKafkaSinkUsesProductionDeliveryGuarantees(t *testing.T) {
sink, err := NewKafkaSink(KafkaConfig{Brokers: []string{"127.0.0.1:9092"}})
if err != nil {
@@ -90,10 +113,12 @@ func TestNewKafkaSinkUsesProductionDeliveryGuarantees(t *testing.T) {
}
type recordingWriter struct {
messages []kafka.Message
messages []kafka.Message
writeCalls int
}
func (w *recordingWriter) WriteMessages(_ context.Context, messages ...kafka.Message) error {
w.writeCalls++
w.messages = append(w.messages, messages...)
return nil
}