Author: kmoore Date: Thu Aug 15 07:21:37 2013 New Revision: 4020 URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=4020 Log: Fix the chan_sip blind transfer tests
This modifies the SIP blind transfer tests that run against chan_sip to function properly on Asterisk 12 by handling the new bridging and transfer events instead of the older ones. Review: https://reviewboard.asterisk.org/r/2758/ (closes issue ASTERISK-22215) Modified: asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test Modified: asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test?view=diff&rev=4020&r1=4019&r2=4020 ============================================================================== --- asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test (original) +++ asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_refer_only/run-test Thu Aug 15 07:21:37 2013 @@ -20,6 +20,7 @@ sys.path.append("lib/python") from asterisk.asterisk import Asterisk from asterisk.TestCase import TestCase +from asterisk.version import AsteriskVersion logger = logging.getLogger(__name__) @@ -36,6 +37,8 @@ def __init__(self): TestCase.__init__(self) self.passed = False + self.channel1 = None + self.transfer_event_received = False self.create_asterisk() def read_result(self): @@ -55,11 +58,35 @@ # start up the processes self.start_processes() - ami.registerEvent('Bridge', self.bridge_event_handler) - ami.registerEvent('Transfer', self.transfer_event_handler) + if AsteriskVersion() >= AsteriskVersion("12"): + ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler) + ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler) + else: + ami.registerEvent('Bridge', self.bridge_event_handler) + ami.registerEvent('Transfer', self.transfer_event_handler) ami.registerEvent('Hangup', self.hangup_event_handler) self.a_call_b() + + def bridge_enter_event_handler(self, ami, event): + if not self.channel1: + self.channel1 = event['channel'] + logger.debug("Received bridge enter for channel %s" % self.channel1) + return + + channel2 = event['channel'] + logger.debug("Received bridge enter for channel %s" % channel2) + + if (self.channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_b_channel) or \ + (self.channel1 == BlindTransfer.phone_b_channel and channel2 == BlindTransfer.phone_a_channel): + logger.debug("Starting transfer of Phone B to Phone C") + self.b_transfer_a_to_c() + self.channel1 = None + elif (self.channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_c_channel) or \ + (self.channel1 == BlindTransfer.phone_c_channel and channel2 == BlindTransfer.phone_a_channel): + self.ami_check_bridge() + else: + logger.warning("Unexpected bridge (%s and %s) received!" % (self.channel1, channel2)) def bridge_event_handler(self, ami, event): bridgetype = event['bridgetype'].lower() @@ -78,6 +105,13 @@ elif bridgetype != 'core' or bridgestate != 'unlink': logger.warning("Unexpected bridgetype %s or bridgestate %s received!" % (bridgetype, bridgestate)) + def blind_transfer_event_handler(self, ami, event): + if event['isexternal'].lower() != 'yes': + logger.warn("Unexpected transfer type: Internal") + else: + logger.debug("Received blind external transfer initiated by %(transfererchannel)s to %(extension)s@%(context)s" % event) + self.transfer_event_received = True + def transfer_event_handler(self, ami, event): transfertype = event['transfertype'].lower() transfermethod = event['transfermethod'].lower() @@ -102,6 +136,12 @@ logger.warn("Transfer event failed or contained incorrect data; not checking bridge results") self.passed = False self.read_result() + return + + if AsteriskVersion() >= AsteriskVersion('12'): + # the following has already been verified using bridgeenter messages so exit early + self.passed = True + self.hangup_channel_c() return logger.debug('Results %s' % str(results)) Modified: asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test?view=diff&rev=4020&r1=4019&r2=4020 ============================================================================== --- asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test (original) +++ asterisk/trunk/tests/channels/SIP/sip_blind_transfer/callee_with_reinvite/run-test Thu Aug 15 07:21:37 2013 @@ -20,6 +20,7 @@ sys.path.append("lib/python") from asterisk.asterisk import Asterisk from asterisk.TestCase import TestCase +from asterisk.version import AsteriskVersion logger = logging.getLogger(__name__) @@ -36,6 +37,8 @@ def __init__(self): TestCase.__init__(self) self.passed = False + self.channel1 = None + self.transfer_event_received = False self.create_asterisk() def read_result(self): @@ -55,11 +58,35 @@ # start up the processes self.start_processes() - ami.registerEvent('Bridge', self.bridge_event_handler) - ami.registerEvent('Transfer', self.transfer_event_handler) + if AsteriskVersion() >= AsteriskVersion("12"): + ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler) + ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler) + else: + ami.registerEvent('Bridge', self.bridge_event_handler) + ami.registerEvent('Transfer', self.transfer_event_handler) ami.registerEvent('Hangup', self.hangup_event_handler) self.a_call_b() + + def bridge_enter_event_handler(self, ami, event): + if not self.channel1: + self.channel1 = event['channel'] + logger.debug("Received bridge enter for channel %s" % self.channel1) + return + + channel2 = event['channel'] + logger.debug("Received bridge enter for channel %s" % channel2) + + if (self.channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_b_channel) or \ + (self.channel1 == BlindTransfer.phone_b_channel and channel2 == BlindTransfer.phone_a_channel): + logger.debug("Starting transfer of Phone B to Phone C") + self.b_transfer_a_to_c() + self.channel1 = None + elif (self.channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_c_channel) or \ + (self.channel1 == BlindTransfer.phone_c_channel and channel2 == BlindTransfer.phone_a_channel): + self.ami_check_bridge() + else: + logger.warning("Unexpected bridge (%s and %s) received!" % (self.channel1, channel2)) def bridge_event_handler(self, ami, event): bridgetype = event['bridgetype'].lower() @@ -78,6 +105,13 @@ elif bridgetype != 'core' or bridgestate != 'unlink': logger.warning("Unexpected bridgetype %s or bridgestate %s received!" % (bridgetype, bridgestate)) + def blind_transfer_event_handler(self, ami, event): + if event['isexternal'].lower() != 'yes': + logger.warn("Unexpected transfer type: Internal") + else: + logger.debug("Received blind external transfer initiated by %(transfererchannel)s to %(extension)s@%(context)s" % event) + self.transfer_event_received = True + def transfer_event_handler(self, ami, event): transfertype = event['transfertype'].lower() transfermethod = event['transfermethod'].lower() @@ -102,6 +136,12 @@ logger.warn("Transfer event failed or contained incorrect data; not checking bridge results") self.passed = False self.read_result() + return + + if AsteriskVersion() >= AsteriskVersion('12'): + # the following has already been verified using bridgeenter messages so exit early + self.passed = True + self.hangup_channel_c() return logger.debug('Results %s' % str(results)) Modified: asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test?view=diff&rev=4020&r1=4019&r2=4020 ============================================================================== --- asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test (original) +++ asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_refer_only/run-test Thu Aug 15 07:21:37 2013 @@ -20,6 +20,7 @@ sys.path.append("lib/python") from asterisk.asterisk import Asterisk from asterisk.TestCase import TestCase +from asterisk.version import AsteriskVersion logger = logging.getLogger(__name__) @@ -36,6 +37,7 @@ def __init__(self): TestCase.__init__(self) self.passed = False + self.channel1 = None self.transfer_event_received = False self.create_asterisk() @@ -56,11 +58,35 @@ # start up the processes self.start_processes() - ami.registerEvent('Bridge', self.bridge_event_handler) - ami.registerEvent('Transfer', self.transfer_event_handler) + if AsteriskVersion() >= AsteriskVersion("12"): + ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler) + ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler) + else: + ami.registerEvent('Bridge', self.bridge_event_handler) + ami.registerEvent('Transfer', self.transfer_event_handler) ami.registerEvent('Hangup', self.hangup_event_handler) self.a_call_b() + + def bridge_enter_event_handler(self, ami, event): + if not self.channel1: + self.channel1 = event['channel'] + logger.debug("Received bridge enter for channel %s" % self.channel1) + return + + channel2 = event['channel'] + logger.debug("Received bridge enter for channel %s" % channel2) + + if (self.channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_b_channel) or \ + (self.channel1 == BlindTransfer.phone_b_channel and channel2 == BlindTransfer.phone_a_channel): + logger.debug("Starting transfer of Phone B to Phone C") + self.a_transfer_b_to_c() + self.channel1 = None + elif (self.channel1 == BlindTransfer.phone_b_channel and channel2 == BlindTransfer.phone_c_channel) or \ + (self.channel1 == BlindTransfer.phone_c_channel and channel2 == BlindTransfer.phone_b_channel): + self.ami_check_bridge() + else: + logger.warning("Unexpected bridge (%s and %s) received!" % (self.channel1, channel2)) def bridge_event_handler(self, ami, event): bridgetype = event['bridgetype'].lower() @@ -79,6 +105,13 @@ elif bridgetype != 'core' or bridgestate != 'unlink': logger.warning("Unexpected bridgetype %s or bridgestate %s received!" % (bridgetype, bridgestate)) + def blind_transfer_event_handler(self, ami, event): + if event['isexternal'].lower() != 'yes': + logger.warn("Unexpected transfer type: Internal") + else: + logger.debug("Received blind external transfer initiated by %(transfererchannel)s to %(extension)s@%(context)s" % event) + self.transfer_event_received = True + def transfer_event_handler(self, ami, event): transfertype = event['transfertype'].lower() transfermethod = event['transfermethod'].lower() @@ -103,6 +136,12 @@ logger.warn("Transfer event failed or contained incorrect data; not checking bridge results") self.passed = False self.read_result() + return + + if AsteriskVersion() >= AsteriskVersion('12'): + # the following has already been verified using bridgeenter messages so exit early + self.passed = True + self.hangup_channel_c() return logger.debug('Results %s' % str(results)) Modified: asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test?view=diff&rev=4020&r1=4019&r2=4020 ============================================================================== --- asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test (original) +++ asterisk/trunk/tests/channels/SIP/sip_blind_transfer/caller_with_reinvite/run-test Thu Aug 15 07:21:37 2013 @@ -20,6 +20,7 @@ sys.path.append("lib/python") from asterisk.asterisk import Asterisk from asterisk.TestCase import TestCase +from asterisk.version import AsteriskVersion logger = logging.getLogger(__name__) @@ -36,6 +37,8 @@ def __init__(self): TestCase.__init__(self) self.passed = False + self.channel1 = None + self.transfer_event_received = False self.create_asterisk() def read_result(self): @@ -62,11 +65,35 @@ # start up the processes self.start_processes() - ami.registerEvent('Bridge', self.bridge_event_handler) - ami.registerEvent('Transfer', self.transfer_event_handler) + if AsteriskVersion() >= AsteriskVersion("12"): + ami.registerEvent('BridgeEnter', self.bridge_enter_event_handler) + ami.registerEvent('BlindTransfer', self.blind_transfer_event_handler) + else: + ami.registerEvent('Bridge', self.bridge_event_handler) + ami.registerEvent('Transfer', self.transfer_event_handler) ami.registerEvent('Hangup', self.hangup_event_handler) self.a_call_b() + + def bridge_enter_event_handler(self, ami, event): + if not self.channel1: + self.channel1 = event['channel'] + logger.debug("Received bridge enter for channel %s" % self.channel1) + return + + channel2 = event['channel'] + logger.debug("Received bridge enter for channel %s" % channel2) + + if (self.channel1 == BlindTransfer.phone_a_channel and channel2 == BlindTransfer.phone_b_channel) or \ + (self.channel1 == BlindTransfer.phone_b_channel and channel2 == BlindTransfer.phone_a_channel): + logger.debug("Starting transfer of Phone B to Phone C") + self.a_transfer_b_to_c() + self.channel1 = None + elif (self.channel1 == BlindTransfer.phone_b_channel and channel2 == BlindTransfer.phone_c_channel) or \ + (self.channel1 == BlindTransfer.phone_c_channel and channel2 == BlindTransfer.phone_b_channel): + self.ami_check_bridge() + else: + logger.warning("Unexpected bridge (%s and %s) received!" % (self.channel1, channel2)) def bridge_event_handler(self, ami, event): bridgetype = event['bridgetype'].lower() @@ -85,6 +112,13 @@ elif bridgetype != 'core' or bridgestate != 'unlink': logger.warning("Unexpected bridgetype %s or bridgestate %s received!" % (bridgetype, bridgestate)) + def blind_transfer_event_handler(self, ami, event): + if event['isexternal'].lower() != 'yes': + logger.warn("Unexpected transfer type: Internal") + else: + logger.debug("Received blind external transfer initiated by %(transfererchannel)s to %(extension)s@%(context)s" % event) + self.transfer_event_received = True + def transfer_event_handler(self, ami, event): transfertype = event['transfertype'].lower() transfermethod = event['transfermethod'].lower() @@ -109,6 +143,12 @@ logger.warn("Transfer event failed or contained incorrect data; not checking bridge results") self.passed = False self.read_result() + return + + if AsteriskVersion() >= AsteriskVersion('12'): + # the following has already been verified using bridgeenter messages so exit early + self.passed = True + self.hangup_channel_c() return logger.debug('Results %s' % str(results)) -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits
