Files
lislgosms/gateway/internal/upstream/protocol_fields_test.go
T
hectorzhao 001d5f2cbd
CSS quality / css-quality (push) Has been cancelled
fix: 修复 CMPP 协议字段容量与版本兼容性
2026-09-20 15:49:37 +08:00

51 lines
1.8 KiB
Go

package upstream
import (
"cmpp-platform/gateway/internal/queue"
"encoding/json"
cmpp "github.com/bigwhite/gocmpp"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
)
func TestCMPP3ReceiptKeepsUnsignedFieldsAndFullDestination(t *testing.T) {
events := make(chan queue.ReceiptEvent, 1)
api := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var e queue.ReceiptEvent
if err := json.NewDecoder(r.Body).Decode(&e); err != nil {
t.Error(err)
}
events <- e
w.WriteHeader(200)
}))
defer api.Close()
receipt := cmpp.CmppReceiptPkt{MsgId: ^uint64(0), Stat: "DELIVRD", DestTerminalId: strings.Repeat("9", 32), SmscSequence: ^uint32(0)}
raw, err := receipt.PackVersion(cmpp.V30)
if err != nil {
t.Fatal(err)
}
conn := &connection{channelID: "qa", apiBaseURL: api.URL, httpClient: api.Client()}
packet := deliverPacketFromCMPP3(&cmpp.Cmpp3DeliverReqPkt{SeqId: ^uint32(0), RegisterDelivery: 1, MsgContent: string(raw)})
if err = conn.handleDeliver(packet); err != nil {
t.Fatal(err)
}
event := <-events
if event.GatewayMessageID != "18446744073709551615" || event.SequenceID != ^uint32(0) || event.PhoneNumber != receipt.DestTerminalId {
t.Fatalf("truncated callback: %+v", event)
}
packet.msgContent = string(raw[:60])
if conn.handleDeliver(packet) == nil {
t.Fatal("legacy 60-byte body silently accepted on CMPP3")
}
}
func TestUpstreamSequenceAvailabilityIncludesHeartbeatAndSubmit(t *testing.T) {
conn := &connection{pending: map[uint32]chan submitPartResponse{0: make(chan submitPartResponse)}, heartbeatPending: map[uint32]time.Time{^uint32(0): time.Now()}}
if conn.sequenceAvailable(0) || conn.sequenceAvailable(^uint32(0)) || !conn.sequenceAvailable(1) {
t.Fatal("wrapped sequence overwrites outstanding request")
}
}