2010-12-14 01:54:16 +00:00
|
|
|
"
|
2011-02-03 17:52:41 +00:00
|
|
|
(C) 2010-2011 by Holger Hans Peter Freyther
|
2010-12-14 01:54:16 +00:00
|
|
|
All Rights Reserved
|
|
|
|
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU Affero General Public License as
|
|
|
|
published by the Free Software Foundation, either version 3 of the
|
|
|
|
License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU Affero General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
"
|
2010-10-16 17:28:35 +00:00
|
|
|
"Test Case for Osmo-Network"
|
|
|
|
|
|
|
|
TestCase subclass: SCCPTests [
|
2013-02-23 13:00:54 +00:00
|
|
|
<category: 'OsmoNetwork-Tests'>
|
|
|
|
|
2010-10-16 17:28:35 +00:00
|
|
|
SCCPTests class >> packageNamesUnderTest [
|
|
|
|
<category: 'accessing'>
|
|
|
|
^ #('OsmoNetwork')
|
|
|
|
]
|
|
|
|
|
2010-11-20 20:24:55 +00:00
|
|
|
testPNCCreate [
|
|
|
|
| pnc |
|
|
|
|
|
|
|
|
pnc := SCCPPNC new.
|
|
|
|
pnc at: SCCPHelper pncData put: #(1 2 3) asByteArray.
|
|
|
|
self assert: pnc toMessage asByteArray = #(15 3 1 2 3 0) asByteArray.
|
|
|
|
]
|
|
|
|
|
2010-10-16 17:28:35 +00:00
|
|
|
testReleasedFormat [
|
|
|
|
| rlsd msg |
|
2010-12-15 14:59:02 +00:00
|
|
|
rlsd := SCCPConnectionReleased initWithDst: 16r401 src: 16r1F0A01 cause: 16rFE.
|
2010-11-20 00:09:50 +00:00
|
|
|
msg := rlsd toMessage asByteArray.
|
2010-10-16 17:28:35 +00:00
|
|
|
|
|
|
|
self assert: msg = #(4 1 4 0 1 16r0A 16r1F 16rFE 1 0) asByteArray
|
|
|
|
]
|
2010-10-16 18:08:47 +00:00
|
|
|
|
|
|
|
testDT1 [
|
2010-11-24 13:31:38 +00:00
|
|
|
| dt1 msg target |
|
|
|
|
target := #(6 1 4 0 0 1 4 49 50 51 52) asByteArray.
|
2010-10-16 18:08:47 +00:00
|
|
|
dt1 := SCCPConnectionData initWith: 16r401 data: '1234' asByteArray.
|
2010-11-20 00:09:50 +00:00
|
|
|
msg := dt1 toMessage asByteArray.
|
2010-10-16 18:08:47 +00:00
|
|
|
|
2010-11-24 13:31:38 +00:00
|
|
|
self assert: msg = target.
|
|
|
|
|
|
|
|
dt1 := SCCPMessage decode: target.
|
|
|
|
self assert: dt1 dst = 16r401.
|
|
|
|
self assert: dt1 data = '1234' asByteArray.
|
|
|
|
self assert: dt1 toMessage asByteArray = target.
|
2010-10-16 18:08:47 +00:00
|
|
|
]
|
2010-11-15 18:07:37 +00:00
|
|
|
|
|
|
|
testCR [
|
2010-11-20 19:21:46 +00:00
|
|
|
| cr msg target |
|
|
|
|
target := #(1 191 0 3 2 2 4 2 66 254 15 4 49 50 51 52 0) asByteArray.
|
|
|
|
|
|
|
|
"encode it"
|
2010-11-15 18:07:37 +00:00
|
|
|
cr := SCCPConnectionRequest
|
|
|
|
initWith: 16r0300BF
|
|
|
|
dest: (SCCPAddress createWith: 254)
|
|
|
|
data: '1234' asByteArray.
|
2010-11-20 00:09:50 +00:00
|
|
|
msg := cr toMessage asByteArray.
|
2010-11-15 18:07:37 +00:00
|
|
|
|
2010-11-20 19:21:46 +00:00
|
|
|
self assert: msg = target.
|
|
|
|
|
|
|
|
"now decode it"
|
|
|
|
cr := SCCPMessage decode: target.
|
|
|
|
self assert: (cr isKindOf: SCCPConnectionRequest).
|
|
|
|
self assert: cr src = 16r0300BF.
|
|
|
|
self assert: cr dest asByteArray = (SCCPAddress createWith: 254) asByteArray.
|
|
|
|
self assert: cr data = '1234' asByteArray.
|
2010-11-24 10:00:54 +00:00
|
|
|
|
|
|
|
"now encode it again"
|
|
|
|
self assert: cr toMessage asByteArray = target.
|
2010-11-15 18:07:37 +00:00
|
|
|
]
|
2010-11-15 18:36:41 +00:00
|
|
|
|
2010-11-15 19:03:49 +00:00
|
|
|
testCC [
|
|
|
|
| target cc |
|
|
|
|
|
|
|
|
target := #(2 191 0 3 1 3 176 2 1 0) asByteArray.
|
|
|
|
|
2010-11-24 13:13:09 +00:00
|
|
|
cc := SCCPConnectionConfirm
|
|
|
|
initWithSrc: 16rB00301 dst: 16r0300BF.
|
|
|
|
self assert: cc toMessage asByteArray = target.
|
2010-11-20 18:28:02 +00:00
|
|
|
|
|
|
|
cc := SCCPMessage decode: target.
|
|
|
|
self assert: (cc isKindOf: SCCPConnectionConfirm).
|
|
|
|
self assert: cc dst = 16r0300BF.
|
|
|
|
self assert: cc src = 16rB00301.
|
2010-11-24 13:13:09 +00:00
|
|
|
|
|
|
|
self assert: cc toMessage asByteArray = target.
|
2010-11-15 19:03:49 +00:00
|
|
|
]
|
|
|
|
|
2010-11-24 15:28:55 +00:00
|
|
|
testRlsd [
|
|
|
|
| target rlsd |
|
|
|
|
|
|
|
|
target := #(4 154 2 0 66 5 5 0 1 0 ) asByteArray.
|
|
|
|
rlsd := SCCPConnectionReleased
|
|
|
|
initWithDst: 16r0029A src: 16r50542
|
|
|
|
cause: 0.
|
|
|
|
self assert: rlsd toMessage asByteArray = target.
|
|
|
|
|
|
|
|
rlsd := SCCPMessage decode: target.
|
|
|
|
self assert: rlsd dst = 16r0029A.
|
|
|
|
self assert: rlsd src = 16r50542.
|
|
|
|
self assert: rlsd cause = 0.
|
|
|
|
self assert: rlsd toMessage asByteArray = target.
|
|
|
|
]
|
|
|
|
|
2013-04-01 13:00:25 +00:00
|
|
|
testCreateRLSD [
|
|
|
|
| target rlsd |
|
|
|
|
target := #(4 154 2 0 66 5 5 0 1 0 ) asByteArray.
|
|
|
|
rlsd := SCCPHelper createRLSD: 16r50542 dest: 16r0029A cause: 0.
|
|
|
|
self assert: rlsd asByteArray = target.
|
|
|
|
]
|
|
|
|
|
2010-11-28 09:41:59 +00:00
|
|
|
testRlc [
|
|
|
|
| target rlc |
|
|
|
|
|
|
|
|
target := #(5 1 8 119 62 4 5 ) asByteArray.
|
|
|
|
rlc := SCCPConnectionReleaseComplete
|
|
|
|
initWithDst: 16r770801 src: 16r05043E.
|
|
|
|
self assert: rlc toMessage asByteArray = target.
|
|
|
|
|
|
|
|
rlc := SCCPMessage decode: target.
|
|
|
|
self assert: rlc dst = 16r770801.
|
|
|
|
self assert: rlc src = 16r05043E.
|
|
|
|
self assert: rlc toMessage asByteArray = target.
|
|
|
|
]
|
|
|
|
|
2010-11-27 15:43:38 +00:00
|
|
|
testUdt [
|
|
|
|
| target udt called calling |
|
|
|
|
target := #(9 0 3 7 11 4 67 7 0 254 4 67 92 0 254 3 1 2 3) asByteArray.
|
|
|
|
|
|
|
|
called := SCCPAddress createWith: 254 poi: 7.
|
|
|
|
calling := SCCPAddress createWith: 254 poi: 92.
|
|
|
|
udt := SCCPUDT
|
|
|
|
initWith: called
|
|
|
|
calling: calling
|
|
|
|
data: #(1 2 3) asByteArray.
|
|
|
|
self assert: udt toMessage asByteArray = target.
|
|
|
|
|
|
|
|
udt := SCCPMessage decode: target.
|
|
|
|
self assert: (udt isKindOf: SCCPUDT).
|
|
|
|
self assert: udt calledAddr ssn = 254.
|
|
|
|
self assert: udt calledAddr poi = 7.
|
|
|
|
self assert: udt callingAddr ssn = 254.
|
|
|
|
self assert: udt callingAddr poi = 92.
|
|
|
|
self assert: udt toMessage asByteArray = target.
|
|
|
|
]
|
|
|
|
|
2010-12-11 06:48:56 +00:00
|
|
|
testUDTClass [
|
|
|
|
| target udt |
|
|
|
|
target := #(9 129 3 13 24 10 18 6 0 18 4 83 132 9 0 55 11 18 7 0
|
|
|
|
18 4 54 25 8 0 4 49 70 100 68 73 4 81 1 3 78 107 42
|
|
|
|
40 40 6 7 0 17 134 5 1 1 1 160 29 97 27 128 2 7 128
|
|
|
|
161 9 6 7 4 0 0 1 0 27 3 162 3 2 1 0 163 5 161 3 2 1
|
|
|
|
0 108 128 162 12 2 1 64 48 7 2 1 67 48 2 128 0 0 0) asByteArray.
|
|
|
|
|
|
|
|
udt := SCCPMessage decode: target.
|
|
|
|
self assert: udt udtClass = 1.
|
|
|
|
self assert: udt errorHandling = 8.
|
|
|
|
self assert: udt toMessage asByteArray = target.
|
|
|
|
]
|
|
|
|
|
2011-06-22 16:11:34 +00:00
|
|
|
testIT [
|
|
|
|
| target it |
|
|
|
|
target := #(16 1 3 176 191 0 3 240 36 66 239) asByteArray.
|
|
|
|
|
|
|
|
it := SCCPMessage decode: target.
|
|
|
|
self assert: it src = 16r0300BF.
|
|
|
|
self assert: it dst = 16rB00301.
|
|
|
|
self assert: it credit = 16rEF.
|
|
|
|
self assert: it seq = #(16r24 16r42) asByteArray.
|
|
|
|
self assert: it protoClass = 16rF0.
|
|
|
|
|
|
|
|
self assert: it toMessage asByteArray = target.
|
|
|
|
]
|
|
|
|
|
2010-11-15 18:36:41 +00:00
|
|
|
testAddrFromByteArray [
|
|
|
|
| byte |
|
|
|
|
byte := #(191 0 3) asByteArray.
|
|
|
|
self assert: (SCCPAddrReference fromByteArray: byte) = 16r0300BF
|
|
|
|
]
|
2010-12-11 04:17:14 +00:00
|
|
|
|
|
|
|
testAddrGTIFromByteArrray [
|
2010-12-11 05:43:56 +00:00
|
|
|
| addr parsed gti |
|
2010-12-11 04:17:14 +00:00
|
|
|
addr := #(16r0A 16r12 16r06 16r0 16r12 16r04 16r53 16r84 16r09 16r00 16r37) asByteArray.
|
|
|
|
parsed := SCCPAddress parseFrom: addr.
|
|
|
|
|
2010-12-11 06:01:40 +00:00
|
|
|
self assert: parsed ssn = SCCPAddress ssnHLR.
|
2010-12-11 05:43:56 +00:00
|
|
|
self assert: parsed asByteArray = addr.
|
|
|
|
|
|
|
|
"Now test the GTI parsing"
|
|
|
|
gti := parsed gtiAsParsed.
|
|
|
|
self assert: gti translation = 0.
|
2010-12-11 06:01:40 +00:00
|
|
|
self assert: gti plan = SCCPGTI npISDN.
|
|
|
|
self assert: gti nature = SCCPGTI naiInternationalNumber.
|
2010-12-11 05:43:56 +00:00
|
|
|
self assert: gti addr = '3548900073'.
|
|
|
|
parsed gtiFromAddr: gti.
|
|
|
|
self assert: parsed asByteArray = addr.
|
|
|
|
|
2010-12-11 04:17:14 +00:00
|
|
|
]
|
2010-10-16 17:28:35 +00:00
|
|
|
]
|
|
|
|
|
2010-11-19 23:39:06 +00:00
|
|
|
TestCase subclass: MessageBufferTest [
|
2013-02-23 13:00:54 +00:00
|
|
|
<category: 'OsmoNetwork-Tests'>
|
|
|
|
|
2010-11-19 23:39:06 +00:00
|
|
|
testAdd [
|
|
|
|
| msg1 msg2 msg3 msg_master |
|
|
|
|
msg1 := MessageBuffer new.
|
|
|
|
msg2 := MessageBuffer new.
|
|
|
|
msg3 := MessageBuffer new.
|
|
|
|
|
|
|
|
msg1 putByteArray: #(1 2 3) asByteArray.
|
|
|
|
msg2 putByteArray: #(4 5 6) asByteArray.
|
|
|
|
msg3 putByteArray: #(7 8 9) asByteArray.
|
|
|
|
|
|
|
|
msg_master := MessageBuffer new.
|
|
|
|
msg_master putByteArray: msg1.
|
|
|
|
msg_master putByteArray: msg2.
|
|
|
|
msg_master putByteArray: msg3.
|
|
|
|
|
|
|
|
self assert: msg_master size = 9.
|
|
|
|
self assert: msg_master toByteArray = #(1 2 3 4 5 6 7 8 9) asByteArray.
|
2010-11-19 23:48:52 +00:00
|
|
|
self assert: msg_master asByteArray = #(1 2 3 4 5 6 7 8 9) asByteArray.
|
2010-11-19 23:39:06 +00:00
|
|
|
]
|
2011-02-03 18:32:45 +00:00
|
|
|
|
|
|
|
testEmptyByteArray [
|
|
|
|
| msg |
|
|
|
|
msg := MessageBuffer new.
|
|
|
|
msg putByteArray: ByteArray new.
|
|
|
|
self assert: msg size = 0.
|
|
|
|
self assert: msg toByteArray = #() asByteArray.
|
|
|
|
]
|
2010-11-19 23:39:06 +00:00
|
|
|
]
|
2011-02-03 17:52:41 +00:00
|
|
|
|
|
|
|
TestCase subclass: M2UATests [
|
2013-02-23 13:00:54 +00:00
|
|
|
<category: 'OsmoNetwork-Tests'>
|
|
|
|
|
2011-02-03 17:52:41 +00:00
|
|
|
testUnique [
|
|
|
|
"This should have some sanity checks on the enum"
|
|
|
|
]
|
|
|
|
|
|
|
|
testParseTag [
|
|
|
|
| inp tag |
|
|
|
|
inp := #(16r00 16r11 16r00 16r08 16rAC 16r10 16r01 16r51) asByteArray.
|
|
|
|
tag := M2UATag fromStream: inp readStream.
|
|
|
|
|
|
|
|
self assert: tag nr = 16r11.
|
|
|
|
self assert: tag data = #(16rAC 16r10 16r01 16r51) asByteArray.
|
|
|
|
]
|
|
|
|
|
2011-02-03 18:33:55 +00:00
|
|
|
testCreateTag [
|
|
|
|
| tag exp |
|
|
|
|
tag := M2UATag initWith: 16r11 data: (ByteArray new: 3 withAll: 6).
|
|
|
|
exp := #(16r00 16r11 16r00 16r07 16r06 16r06 16r06 16r00) asByteArray.
|
|
|
|
self assert: tag toMessage asByteArray = exp.
|
|
|
|
]
|
|
|
|
|
|
|
|
testCreateMessage [
|
|
|
|
| msg data out res |
|
|
|
|
res := #(16r01 16r00 16r03 16r01 16r00 16r00 16r00 16r10
|
|
|
|
16r00 16r11 16r00 16r08 16rAC 16r10 16r01 16r51) asByteArray.
|
|
|
|
data := #(16rAC 16r10 16r01 16r51) asByteArray.
|
|
|
|
|
|
|
|
msg := M2UAMSG fromClass: M2UAConstants clsASPSM type: M2UAConstants aspsmUp.
|
|
|
|
msg addTag: (M2UATag initWith: 16r11 data: data).
|
|
|
|
out := msg toMessage asByteArray.
|
|
|
|
|
|
|
|
self assert: out = res.
|
|
|
|
]
|
|
|
|
|
|
|
|
testCreatePaddingMessage [
|
|
|
|
| msg data out res |
|
|
|
|
res := #(16r01 16r00 16r03 16r01 16r00 16r00 16r00 16r10
|
|
|
|
16r00 16r11 16r00 16r07 16rAC 16r10 16r01 16r00) asByteArray.
|
|
|
|
data := #(16rAC 16r10 16r01) asByteArray.
|
|
|
|
|
|
|
|
msg := M2UAMSG fromClass: M2UAConstants clsASPSM type: M2UAConstants aspsmUp.
|
|
|
|
msg addTag: (M2UATag initWith: 16r11 data: data).
|
|
|
|
out := msg toMessage asByteArray.
|
|
|
|
|
|
|
|
self assert: out = res.
|
|
|
|
]
|
|
|
|
|
2011-02-03 17:52:41 +00:00
|
|
|
testParseMessage [
|
|
|
|
| inp msg |
|
|
|
|
|
|
|
|
inp := #(16r01 16r00 16r03 16r01 16r00 16r00 16r00 16r10
|
|
|
|
16r00 16r11 16r00 16r08 16rAC 16r10 16r01 16r51) asByteArray.
|
|
|
|
msg := M2UAMSG parseFrom: inp.
|
|
|
|
self assert: msg msgClass = UAConstants clsASPSM.
|
|
|
|
self assert: msg msgType = UAConstants aspsmUp.
|
|
|
|
|
|
|
|
inp := #(16r01 16r00 16r06 16r01 16r00 16r00 16r00 16r2C
|
|
|
|
16r00 16r01 16r00 16r08 16r00 16r00 16r00 16r00
|
|
|
|
16r03 16r00 16r00 16r1A 16r81 16r5C 16r00 16r07
|
|
|
|
16r00 16r11 16rF0 16rAA 16rAA 16rAA 16rAA 16rAA
|
|
|
|
16rAA 16rAA 16rAA 16rAA 16rAA 16rAA 16rAA 16rAA
|
|
|
|
16rAA 16rAA 16r00 16r00) asByteArray.
|
|
|
|
msg := M2UAMSG parseFrom: inp.
|
|
|
|
self assert: msg msgClass = UAConstants clsMAUP.
|
|
|
|
self assert: msg msgType = UAConstants maupData.
|
|
|
|
]
|
|
|
|
]
|
2012-08-09 00:03:49 +00:00
|
|
|
|
|
|
|
TestCase subclass: OsmoUDPSocketTest [
|
2013-02-23 13:00:54 +00:00
|
|
|
<category: 'OsmoNetwork-Tests'>
|
|
|
|
|
2013-03-26 10:07:11 +00:00
|
|
|
createSocket [
|
|
|
|
^ Sockets.DatagramSocket new.
|
|
|
|
]
|
|
|
|
|
2012-08-09 00:03:49 +00:00
|
|
|
testSocketCreation [
|
|
|
|
| socket rx tx |
|
|
|
|
socket := OsmoUDPSocket new
|
|
|
|
name: 'Test Socket';
|
2013-03-26 10:07:11 +00:00
|
|
|
start: self createSocket;
|
2012-08-09 00:03:49 +00:00
|
|
|
yourself.
|
|
|
|
|
|
|
|
"Verify that we are in processing"
|
|
|
|
rx := socket instVarNamed: #rx.
|
|
|
|
tx := socket instVarNamed: #tx.
|
|
|
|
self deny: rx isTerminated.
|
|
|
|
self deny: tx isTerminated.
|
|
|
|
|
|
|
|
socket stop.
|
|
|
|
self assert: rx isTerminated.
|
|
|
|
self assert: tx isTerminated.
|
|
|
|
]
|
|
|
|
]
|