Files

89 lines
2.3 KiB
Go

package tracker
import (
"fmt"
"sync"
"testing"
)
func TestTrackerMapsMessageSequenceAndGatewayIDs(t *testing.T) {
tr := New()
submit := tr.TrackSubmit("msg-1", 1001)
if submit.MessageID != "msg-1" || submit.SequenceID != 1001 {
t.Fatalf("unexpected submit mapping: %+v", submit)
}
resp, err := tr.TrackSubmitResp(1001, "gw-1")
if err != nil {
t.Fatalf("track submit resp: %v", err)
}
if resp.GatewayMessageID != "gw-1" {
t.Fatalf("unexpected gateway message id: %+v", resp)
}
byGateway, err := tr.ByGatewayMessageID("gw-1")
if err != nil {
t.Fatalf("lookup by gateway id: %v", err)
}
if byGateway.MessageID != "msg-1" || byGateway.SequenceID != 1001 {
t.Fatalf("unexpected gateway lookup: %+v", byGateway)
}
}
func TestTrackerRejectsUnknownSubmitResp(t *testing.T) {
tr := New()
if _, err := tr.TrackSubmitResp(404, "gw-missing"); err == nil {
t.Fatal("expected missing mapping error")
}
}
func TestTrackerKeepsConcurrentSequenceAndGatewayMappingsSeparate(t *testing.T) {
tr := New()
var wg sync.WaitGroup
for i := 0; i < 100; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
messageID := fmt.Sprintf("msg-%03d", i)
gatewayID := fmt.Sprintf("gw-%03d", i)
sequenceID := uint32(2000 + i)
tr.TrackSubmit(messageID, sequenceID)
mapping, err := tr.TrackSubmitResp(sequenceID, gatewayID)
if err != nil {
t.Errorf("track submit resp for %s: %v", messageID, err)
return
}
if mapping.MessageID != messageID || mapping.SequenceID != sequenceID || mapping.GatewayMessageID != gatewayID {
t.Errorf("unexpected mapping: %+v", mapping)
}
}(i)
}
wg.Wait()
for i := 0; i < 100; i++ {
messageID := fmt.Sprintf("msg-%03d", i)
gatewayID := fmt.Sprintf("gw-%03d", i)
sequenceID := uint32(2000 + i)
byGateway, err := tr.ByGatewayMessageID(gatewayID)
if err != nil {
t.Fatalf("lookup gateway %s: %v", gatewayID, err)
}
if byGateway.MessageID != messageID || byGateway.SequenceID != sequenceID {
t.Fatalf("gateway lookup crossed mappings: %+v", byGateway)
}
byMessage, err := tr.ByMessageID(messageID)
if err != nil {
t.Fatalf("lookup message %s: %v", messageID, err)
}
if byMessage.GatewayMessageID != gatewayID || byMessage.SequenceID != sequenceID {
t.Fatalf("message lookup crossed mappings: %+v", byMessage)
}
}
}