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) } } }