package upstream import ( "testing" "time" "cmpp-platform/gateway/internal/queue" cmpp "github.com/bigwhite/gocmpp" ) func TestSubmitRequestPacketUsesCMPP2PacketForCMPP20Channel(t *testing.T) { conn := &connection{config: queue.UpstreamConfig{CMPPVersion: "2.0", Account: "ljcs02"}} cmd := submitCommandForPacketTest("2.0") parts, err := splitSubmitContent(cmd.CMPP.MsgFmt, cmd.Content) if err != nil { t.Fatalf("splitSubmitContent returned error: %v", err) } packet, ok := conn.submitRequestPacket(cmd, parts[0]).(*cmpp.Cmpp2SubmitReqPkt) if !ok { t.Fatalf("expected Cmpp2SubmitReqPkt, got %T", packet) } if packet.MsgFmt != 8 { t.Fatalf("MsgFmt = %d, want 8", packet.MsgFmt) } if packet.MsgSrc != "ljcs02" { t.Fatalf("MsgSrc = %q, want ljcs02", packet.MsgSrc) } if packet.SrcId != "1069999999" { t.Fatalf("SrcId = %q, want 1069999999", packet.SrcId) } if packet.MsgLength != uint8(len(parts[0].MsgContent)) { t.Fatalf("MsgLength = %d, want %d", packet.MsgLength, len(parts[0].MsgContent)) } if len(packet.MsgContent)%2 != 0 { t.Fatalf("CMPP2 UCS2 payload length must be even, got %d", len(packet.MsgContent)) } if packet.DestTerminalId[0] != cmd.PhoneNumber { t.Fatalf("DestTerminalId = %q, want %q", packet.DestTerminalId[0], cmd.PhoneNumber) } } func TestSubmitResultKeepsCommandSubmitID(t *testing.T) { cmd := submitCommandForPacketTest("2.0") cmd.SubmitID = "submit-attempt-2" result := submitResult(cmd, 42, "9001", "accepted", "", "") if result.SubmitID != cmd.SubmitID { t.Fatalf("SubmitID = %q, want %q", result.SubmitID, cmd.SubmitID) } if result.ChannelID != cmd.ChannelID || result.MessageID != cmd.MessageID { t.Fatalf("unexpected result envelope: %+v", result.Envelope) } } func TestSubmitRequestPacketUsesCMPP3PacketForCMPP30Channel(t *testing.T) { conn := &connection{config: queue.UpstreamConfig{CMPPVersion: "3.0", Account: "ljcs02"}} cmd := submitCommandForPacketTest("3.0") parts, err := splitSubmitContent(cmd.CMPP.MsgFmt, cmd.Content) if err != nil { t.Fatalf("splitSubmitContent returned error: %v", err) } packet, ok := conn.submitRequestPacket(cmd, parts[0]).(*cmpp.Cmpp3SubmitReqPkt) if !ok { t.Fatalf("expected Cmpp3SubmitReqPkt, got %T", packet) } if packet.MsgFmt != 8 { t.Fatalf("MsgFmt = %d, want 8", packet.MsgFmt) } if packet.MsgLength != uint8(len(parts[0].MsgContent)) { t.Fatalf("MsgLength = %d, want %d", packet.MsgLength, len(parts[0].MsgContent)) } } func submitCommandForPacketTest(cmppVersion string) queue.SubmitCommand { return queue.SubmitCommand{ Envelope: queue.Envelope{ SchemaVersion: queue.SchemaVersion, MessageType: queue.MessageTypeSubmitCommand, TraceID: "trace-1", MessageID: "message-1", ChannelID: "channel-1", CreatedAt: time.Now(), }, SubmitID: "submit-1", PhoneNumber: "18821203795", Content: "【安徽航天信息】您的验证码是070926,有效时间30分钟。", CMPP: queue.CMPP{ ServiceID: "SMS", SrcID: "1069999999", RegisteredDelivery: 1, MsgFmt: 8, }, Upstream: queue.UpstreamConfig{ Account: "ljcs02", CMPPVersion: cmppVersion, }, } }