TestCase subclass: GSM0808Test [ testLAI [ | lai res | res := #(16r72 16rF4 16r80) asByteArray. lai := LAI generateLAI: 274 mnc: 8. self assert: lai = res. ] testCellIE [ | ie res msg | res := #(5 8 0 114 244 128 32 18 117 48) asByteArray. msg := Osmo.MessageBuffer new. ie := GSMCellIdentifier initWith: 274 mnc: 8 lac: 8210 ci: 30000. ie writeOn: msg. self assert: msg asByteArray = res. ie := GSMCellIdentifier parseFrom: res. self assert: ie mcc = 274. self assert: ie mnc = 8. self assert: ie lac = 8210. self assert: ie ci = 30000. ] testLayer3IE [ | ie res msg | res := #(23 3 1 2 3) asByteArray. msg := Osmo.MessageBuffer new. ie := GSMLayer3Info initWith: #(1 2 3) asByteArray. ie writeOn: msg. self assert: msg asByteArray = res. ie := GSMLayer3Info parseFrom: res. self assert: ie data = #(1 2 3) asByteArray. ] testComplL3 [ | msg buf ie res | msg := IEMessage initWith: GSM0808Helper msgComplL3. msg addIe: (GSMCellIdentifier initWith: 274 mnc: 8 lac: 8210 ci: 30000). msg addIe: (GSMLayer3Info initWith: #(1 2 3) asByteArray). buf := Osmo.MessageBuffer new. msg writeOn: buf. res := #(16r57 16r05 16r08 16r00 16r72 16rF4 16r80 16r20 16r12 16r75 16r30 16r17 16r03 16r01 16r02 16r03) asByteArray. self assert: buf asByteArray = res ] testCuaseIE [ | buf ie res | res := #(4 1 32) asByteArray. ie := GSMCauseIE initWith: 32. buf := ie toMessage asByteArray. self assert: buf = res. ie := GSMCauseIE parseFrom: res. self assert: ie cause = 32. ] testIEDecoding [ | inp res | inp := #(16r57 16r05 16r08 16r00 16r72 16rF4 16r80 16r20 16r12 16r75 16r30 16r17 16r03 16r01 16r02 16r03) asByteArray. res := IEMessage decode: inp with: GSM0808IE. self assert: res type = GSM0808Helper msgComplL3. self assert: res ies size = 2. ] ] TestCase subclass: BSSAPTest [ testPrependManagment [ | msg | msg := Osmo.MessageBuffer new. msg putByteArray: #(1 2 3) asByteArray. BSSAPHelper prependManagement: msg. self assert: msg asByteArray = #(0 3 1 2 3) asByteArray. ] testManagment [ | man | man := BSSAPManagement initWith: #(1 2 3) asByteArray. self assert: man toMessage asByteArray = #(0 3 1 2 3) asByteArray. ] testParseManagement [ | man | man := BSSAPMessage decode: #(0 3 1 2 3) asByteArray. self assert: (man isKindOf: BSSAPManagement). self assert: man data = #(1 2 3) asByteArray. ] testPrependDTAP [ | msg | msg := Osmo.MessageBuffer new. msg putByteArray: #(1 2 3) asByteArray. BSSAPHelper prependDTAP: msg dlci: 0. self assert: msg asByteArray = #(1 0 3 1 2 3) asByteArray. ] ] TestCase subclass: GSM48Test [ testKeySeqLu [ | gsm msg res | res := #(16r70) asByteArray. msg := Osmo.MessageBuffer new. gsm := GSM48KeySeqLuType createDefault. gsm writeOnDirect: msg. self assert: msg asByteArray = res. self assert: (GSM48KeySeqLuType length: res) = 1. gsm := GSM48KeySeqLuType parseFrom: res. self assert: gsm val = 16r70. ] testLai [ | gsm msg res | res := #(16r02 16rF2 16r50 16rFF 16rFE) asByteArray. msg := Osmo.MessageBuffer new. gsm := GSM48Lai createDefault. gsm mcc: 202; mnc: 5; lac: 65534. gsm writeOnDirect: msg. self assert: msg asByteArray = res. self assert: (GSM48Lai length: res) = res size. gsm := GSM48Lai parseFrom: res. self assert: gsm mcc = 202. self assert: gsm mnc = 5. self assert: gsm lac = 65534. ] testCM1 [ | gsm msg res | res := #(16r33) asByteArray. msg := Osmo.MessageBuffer new. gsm := GSM48Classmark1 createDefault. gsm writeOnDirect: msg. self assert: msg asByteArray = res. self assert: (GSM48Classmark1 length: res) = res size. gsm := GSM48Classmark1 parseFrom: res. self assert: gsm cm1 = 16r33. ] testMI [ | gsm msg res imsi | res := #(8 41 71 128 0 0 0 116 8) asByteArray. imsi := '274080000004780'. msg := Osmo.MessageBuffer new. gsm := GSM48MIdentity createDefault. gsm imsi: imsi. gsm writeOnDirect: msg. self assert: msg asByteArray = res. self assert: (GSM48MIdentity length: res) = res size. gsm := GSM48MIdentity parseFrom: res. self assert: gsm imsi = imsi. ] testRejectCause [ | rej msg target | target := #(11) asByteArray. msg := Osmo.MessageBuffer new. rej := GSM48RejectCause createDefault. rej writeOnDirect: msg. self assert: msg asByteArray = target. self assert: (GSM48RejectCause length: target) = 1. rej := GSM48RejectCause parseFrom: target. self assert: rej cause = 11. ] testLU [ | gsm msg res | res := #(5 8 112 2 242 80 255 254 51 8 105 102 1 69 0 114 131 136) asByteArray. msg := Osmo.MessageBuffer new. gsm := LocationUpdatingRequest new. (gsm lai) mcc: 202; mnc: 5; lac: 65534. (gsm mi) imsi: '666105400273888'. gsm writeOn: msg. self assert: msg asByteArray = res ] ] TestCase subclass: TestMessages [ testLU [ | sccp handler | handler := SCCPHandler new. sccp := MessageTests createLU: handler. self assert: sccp asByteArray = #(1 154 2 0 2 2 4 2 66 254 15 32 0 30 87 5 8 0 114 244 128 16 3 156 64 23 17 5 8 112 0 240 0 0 0 51 7 97 102 102 102 102 102 246 0 ) asByteArray. ] testMsgParser [ | msg bssap bssmap ies l3 gsm48 inp | inp := #(1 154 2 0 2 2 4 2 66 254 15 32 0 30 87 5 8 0 114 244 128 16 3 156 64 23 17 5 8 112 0 240 0 0 0 51 7 97 102 102 102 102 102 246 0 ) asByteArray. msg := MSGParser parse: inp. self assert: (msg isKindOf: Osmo.SCCPConnectionRequest). bssap := msg data. self assert: (bssap isKindOf: BSSAPManagement). bssmap := bssap data. self assert: (bssmap isKindOf: IEMessage). ies := bssmap ies. self assert: ies size = 2. l3 := bssmap findIE: (GSMLayer3Info elementId) ifAbsent: [ self assert: false. ]. self assert: (l3 isKindOf: GSMLayer3Info). gsm48 := l3 data. self assert: (gsm48 isKindOf: LocationUpdatingRequest). self assert: gsm48 mi imsi = '666666666666'. self assert: msg toMessage asByteArray = inp. ] testMsgParserDt1 [ | inp msg bssap gsm48 | inp := #(6 154 2 0 0 1 6 1 0 3 5 4 11 ) asByteArray. msg := MSGParser parse: inp. self assert: (msg isKindOf: Osmo.SCCPConnectionData). bssap := msg data. self assert: (bssap isKindOf: BSSAPDTAP). gsm48 := bssap data. self assert: (gsm48 isKindOf: LocationUpdatingReject). self assert: msg toMessage asByteArray = inp. ] testMsgparserDt1Clear [ | inp msg bssap bssmap | inp := #(6 154 2 0 0 1 6 0 4 32 4 1 32) asByteArray. msg := MSGParser parse: inp. self assert: (msg isKindOf: Osmo.SCCPConnectionData). bssap := msg data. self assert: (bssap isKindOf: BSSAPManagement). bssmap := bssap data. self assert: (bssmap isKindOf: IEMessage). self assert: msg toMessage asByteArray = inp. ] testRandomMessages [ | inp msg | "This only tests some parsing... it does not verify the content" inp := #(6 1 8 101 0 1 3 0 1 33 ) asByteArray. msg := MSGParser parse: inp. self assert: msg toMessage asByteArray = inp. inp := #(6 48 4 5 0 1 22 1 0 19 5 18 1 83 3 123 16 155 119 176 138 215 28 107 26 47 193 59 248 ) asByteArray. msg := MSGParser parse: inp. self assert: msg toMessage asByteArray = inp. inp := #(6 1 8 104 0 1 9 1 0 6 5 84 253 230 198 47) asByteArray. msg := MSGParser parse: inp. self assert: msg toMessage asByteArray = inp. inp := #(6 46 4 5 0 1 20 1 0 17 5 2 114 244 128 16 3 23 8 41 34 1 96 16 85 37 115) asByteArray. msg := MSGParser parse: inp. self assert: msg toMessage asByteArray = inp. ] ]