func TestQuerySM(t *testing.T) { s := smpptest.NewUnstartedServer() s.Handler = func(c smpptest.Conn, p pdu.Body) { r := pdu.NewQuerySMResp() r.Header().Seq = p.Header().Seq r.Fields().Set(pdufield.MessageID, p.Fields()[pdufield.MessageID]) r.Fields().Set(pdufield.MessageState, 2) c.Write(r) } s.Start() defer s.Close() tx := &Transmitter{ Addr: s.Addr(), User: smpptest.DefaultUser, Passwd: smpptest.DefaultPasswd, } defer tx.Close() conn := <-tx.Bind() switch conn.Status() { case Connected: default: t.Fatal(conn.Error()) } qr, err := tx.QuerySM("root", "13") if err != nil { t.Fatal(err) } if qr.MsgID != "13" { t.Fatalf("unexpected msgid: want 13, have %s", qr.MsgID) } if qr.MsgState != "DELIVERED" { t.Fatalf("unexpected state: want DELIVERED, have %q", qr.MsgState) } }
func pduHandler(c smpptest.Conn, p pdu.Body) { src := p.Fields()[pdufield.SourceAddr] fail := src != nil && src.String() == "root" switch p.Header().ID { case pdu.SubmitSMID: r := pdu.NewSubmitSMResp() r.Header().Seq = p.Header().Seq if fail { r.Header().Status = 0x00000045 // submitsm failed } else { r.Fields().Set(pdufield.MessageID, "foobar") } c.Write(r) rd := p.Fields()[pdufield.RegisteredDelivery] if rd == nil || rd.Bytes()[0] == 0 { return } r = pdu.NewDeliverSM() rf := r.Fields() pf := p.Fields() rf.Set(pdufield.SourceAddr, pf[pdufield.SourceAddr]) rf.Set(pdufield.DestinationAddr, pf[pdufield.DestinationAddr]) rf.Set(pdufield.ShortMessage, "delivery receipt here") c.Write(r) case pdu.QuerySMID: r := pdu.NewQuerySMResp() r.Header().Seq = p.Header().Seq if fail { r.Header().Status = 0x00000067 // querysm failed } else { pf := p.Fields() rf := r.Fields() rf.Set(pdufield.MessageID, pf[pdufield.MessageID]) rf.Set(pdufield.MessageState, 2) // DELIVERED } c.Write(r) default: smpptest.EchoHandler(c, p) } }