forked from linxGnu/gosmpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtransceivable_test.go
129 lines (102 loc) · 2.73 KB
/
transceivable_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package gosmpp
import (
"sync/atomic"
"testing"
"time"
"github.com/linxGnu/gosmpp/data"
"github.com/linxGnu/gosmpp/pdu"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
var (
countSubmitSMResp, countDeliverSM int32
)
func handlePDU(t *testing.T) func(pdu.PDU, bool) {
return func(p pdu.PDU, responded bool) {
switch pd := p.(type) {
case *pdu.SubmitSMResp:
require.False(t, responded)
require.EqualValues(t, data.ESME_ROK, pd.CommandStatus)
require.NotZero(t, len(pd.MessageID))
atomic.AddInt32(&countSubmitSMResp, 1)
case *pdu.GenericNack:
require.False(t, responded)
t.Fatal(pd)
case *pdu.DataSM:
require.True(t, responded)
t.Logf("%+v\n", pd)
case *pdu.DeliverSM:
require.True(t, responded)
require.EqualValues(t, data.ESME_ROK, pd.CommandStatus)
_mess, err := pd.Message.GetMessageWithEncoding(data.UCS2)
assert.Nil(t, err)
if mess == _mess {
atomic.AddInt32(&countDeliverSM, 1)
}
}
}
}
func TestTRXSubmitSM(t *testing.T) {
auth := nextAuth()
trans, err := NewSession(
TRXConnector(NonTLSDialer, auth),
Settings{
ReadTimeout: 2 * time.Second,
WriteTimeout: 3 * time.Second,
EnquireLink: 200 * time.Millisecond,
OnSubmitError: func(_ pdu.PDU, err error) {
t.Fatal(err)
},
OnReceivingError: func(err error) {
t.Log(err)
},
OnRebindingError: func(err error) {
t.Log(err)
},
OnPDU: handlePDU(t),
OnClosed: func(state State) {
t.Log(state)
},
}, 5*time.Second)
require.Nil(t, err)
require.NotNil(t, trans)
defer func() {
_ = trans.Close()
}()
require.Equal(t, "MelroseLabsSMSC", trans.Transceiver().SystemID())
// sending 20 SMS
for i := 0; i < 20; i++ {
err = trans.Transceiver().Submit(newSubmitSM(auth.SystemID))
require.Nil(t, err)
time.Sleep(50 * time.Millisecond)
}
time.Sleep(5 * time.Second)
// wait response received
require.True(t, atomic.LoadInt32(&countSubmitSMResp) >= 15)
// rebind and submit again
trans.rebind()
err = trans.Transceiver().Submit(newSubmitSM(auth.SystemID))
require.Nil(t, err)
time.Sleep(time.Second)
require.True(t, atomic.LoadInt32(&countSubmitSMResp) >= 16)
}
func newSubmitSM(systemID string) *pdu.SubmitSM {
// build up submitSM
srcAddr := pdu.NewAddress()
srcAddr.SetTon(5)
srcAddr.SetNpi(0)
_ = srcAddr.SetAddress(systemID)
destAddr := pdu.NewAddress()
destAddr.SetTon(1)
destAddr.SetNpi(1)
_ = destAddr.SetAddress("12" + systemID)
submitSM := pdu.NewSubmitSM().(*pdu.SubmitSM)
submitSM.SourceAddr = srcAddr
submitSM.DestAddr = destAddr
_ = submitSM.Message.SetMessageWithEncoding(mess, data.UCS2)
submitSM.ProtocolID = 0
submitSM.RegisteredDelivery = 1
submitSM.ReplaceIfPresentFlag = 0
submitSM.EsmClass = 0
return submitSM
}