diff --git a/sms/SMSTest.st b/sms/SMSTest.st new file mode 100644 index 0000000..6073858 --- /dev/null +++ b/sms/SMSTest.st @@ -0,0 +1,105 @@ +" + (C) 2012 by Holger Hans Peter Freyther + 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 . +" + +PackageLoader fileInPackage: #FakeBTS. + +FakeBTS.OpenBSCTest subclass: SMSTest [ + + + SMSTest class >> cpDataRpData [ + ^ #( + 16r09 16r01 16r35 16r01 16r2A 16r07 16r91 16r44 + 16r77 16r58 16r10 16r06 16r50 16r00 16r2B 16r04 + 16r04 16r81 16r32 16r24 16r00 16r00 16r80 16r21 + 16r03 16r41 16r24 16r32 16r40 16r1F 16r41 16r26 + 16r03 16r94 16r7D 16r56 16rA5 16r20 16r28 16rF2 + 16rE9 16r2C 16r82 16r82 16rD2 16r22 16r48 16r58 + 16r64 16r3E 16r9D 16r47 16r10 16rF5 16r09 16rAA + 16r4E 16r01) asByteArray. + ] + + startTest [ + "1. Connect to the BTS" + self createAndConnectBTS: '1801/0/0'. + + self + testWrongSMSStart; + testCPTimeout. + ] + + testWrongSMSStart [ + | lchan | + + "2. Get a LCHAN" + lchan := self requireAnyChannel. + + "3. CP-DATA/RP-DATA PDU" + lchan sendGSM: self class cpDataRpData sapi: 3. + + [ + | msg | + "Read all messages until the end on SAPI=0. Ignore SAPI=3" + "If we send another SAPI=3 Release Indication we get a double + RF Channel Release from the NITB." + msg := GSM48MSG decode: lchan nextSapi0Msg readStream. + (msg isKindOf: GSM48RRChannelRelease) + ifTrue: [lchan releaseAllSapis. ^true]. + ] repeat. + + "Current origin/master will be stuck forever here." + ] + + testCPTimeout [ + | lchan cm tmsi | + + tmsi := self allocateTmsi: '901010000001111'. + + "2. Get a LCHAN" + lchan := self requireAnyChannel. + + "3. Send a CM Service Request " + cm := GSM48CMServiceReq new. + cm mi tmsi: tmsi. + lchan sendGSM: cm toMessage. + + "4. CP-DATA/RP-DATA PDU" + lchan sendGSM: self class cpDataRpData sapi: 3. + + "Wait for the channel to be released.." + [ + | msg | + "Read all messages until the end on SAPI=0. Ignore SAPI=3" + "If we send another SAPI=3 Release Indication we get a double + RF Channel Release from the NITB." + [ + msg := GSM48MSG decode: lchan nextSapi0Msg readStream. + (msg isKindOf: GSM48RRChannelRelease) + ifTrue: [lchan releaseAllSapis. ^true] + ] on: Exception do: [Transcript nextPutAll: 'GSM decoding error'; nl.]. + ] repeat. + ] +] + +Eval [ + | test | + + test := SMSTest new + startTest; + stopBts; + yourself. +]