def testTRXServerUnbindRequestAfterSubmit(self): deferreds = [] def _serviceHandler(system_id, smpp, pdu): d = defer.Deferred() deferreds.append(d) logging.debug("%s, %s, %s", system_id, smpp, pdu) return d self.proto.dataRequestHandler = lambda *args, **kwargs: _serviceHandler(self.proto.system_id, *args, **kwargs) self._bind() pdu = operations.SubmitSM(source_addr='t1', destination_addr='1208230', short_message='HELLO', seqNum=1) self.proto.dataReceived(self.encoder.encode(pdu)) unbind_d = self.proto.unbind() print(self.tr.value()) pdu2 = operations.SubmitSM(source_addr='t1', destination_addr='1208230', short_message='HELLO2', seqNum=2) self.proto.dataReceived(self.encoder.encode(pdu)) self.assertEqual(1, len(deferreds)) self.assertEqual(self.tr.value(), b'') self.tr.clear() deferreds[-1].callback(pdu_types.CommandStatus.ESME_ROK) deferreds = deferreds[:-1] submit_resp_pdu = operations.SubmitSMResp(seqNum=1) unbind_pdu = operations.Unbind(seqNum=1) # We should have a reply here as our service handler should not be called self.assertEqual(self.tr.value(), b'%s%s' % (self.encoder.encode(submit_resp_pdu), self.encoder.encode(unbind_pdu))) self.tr.clear() pdu = operations.UnbindResp(seqNum=1) self.proto.dataReceived(self.encoder.encode(pdu))
def testTRXClientUnbindRequestAfterSubmit(self): d = defer.Deferred() def _serviceHandler(system_id, smpp, pdu): logging.debug("%s, %s, %s", system_id, smpp, pdu) return d self.proto.dataRequestHandler = lambda *args, **kwargs: _serviceHandler(self.proto.system_id, *args, **kwargs) self._bind() pdu = operations.SubmitSM(source_addr='t1', destination_addr='1208230', short_message='HELLO', seqNum=1) self.proto.dataReceived(self.encoder.encode(pdu)) pdu = operations.Unbind(seqNum = 52) self.proto.dataReceived(self.encoder.encode(pdu)) #All PDU requests should fail now. #Once we fire this we should get our Submit Resp and the unbind Resp pdu = operations.SubmitSM(source_addr='t1', destination_addr='1208230', short_message='goodbye', seqNum=5) self.proto.dataReceived(self.encoder.encode(pdu)) unbind_resp_pdu = operations.UnbindResp(seqNum=52) submit_fail_pdu = operations.SubmitSMResp(status=pdu_types.CommandStatus.ESME_RINVBNDSTS, seqNum=5) # We should have a reply here as our service handler should not be called self.assertEqual(self.tr.value(), self.encoder.encode(submit_fail_pdu)) self.tr.clear() d.callback(pdu_types.CommandStatus.ESME_ROK) #Then we should get our initial message response and the unbind response expected_pdu = operations.SubmitSMResp(seqNum=1) self.assertEqual(self.tr.value(), b'%s%s' % (self.encoder.encode(expected_pdu), self.encoder.encode(unbind_resp_pdu)))
def testTRXUnbindRequest(self): self._bind() pdu = operations.Unbind(seqNum = 346) self.proto.dataReceived(self.encoder.encode(pdu)) expected_pdu = operations.UnbindResp(seqNum=346) self.assertEqual(self.tr.value(), self.encoder.encode(expected_pdu)) connection = self.factory.getBoundConnections('userA') self.assertEqual(connection.system_id, 'userA') # Still in list of binds as the connection has not been closed yet. is removed after test tearDown self.assertEqual(connection._binds[pdu_types.CommandId.bind_transceiver][0].sessionState, SMPPSessionStates.UNBOUND)
def testRecievePduWhileUnbindPending(self): self._bind() self.proto.unbind() expected_pdu = operations.Unbind(seqNum=1) self.assertEqual(self.tr.value(), self.encoder.encode(expected_pdu)) self.tr.clear() pdu = operations.SubmitSM(source_addr='t1', destination_addr='1208230', short_message='HELLO', seqNum=6) self.proto.dataReceived(self.encoder.encode(pdu)) expected_pdu = operations.SubmitSMResp(seqNum=6) self.assertEqual(self.tr.value(), b'') pdu = operations.UnbindResp(seqNum=1) self.proto.dataReceived(self.encoder.encode(pdu))