diff options
Diffstat (limited to 'tests/pjsua/mod_call.py')
-rw-r--r-- | tests/pjsua/mod_call.py | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/tests/pjsua/mod_call.py b/tests/pjsua/mod_call.py new file mode 100644 index 00000000..7081aed4 --- /dev/null +++ b/tests/pjsua/mod_call.py @@ -0,0 +1,226 @@ +# $Id$ +import time +import imp +import sys +import inc_const as const +from inc_cfg import * + +# Load configuration +cfg_file = imp.load_source("cfg_file", ARGS[1]) + +# Check media flow between ua1 and ua2 +def check_media(ua1, ua2): + ua1.send("#") + ua1.expect("#") + ua1.send("1122") + ua2.expect(const.RX_DTMF + "1") + ua2.expect(const.RX_DTMF + "1") + ua2.expect(const.RX_DTMF + "2") + ua2.expect(const.RX_DTMF + "2") + + +# Test body function +def test_func(t): + callee = t.process[0] + caller = t.process[1] + + # if have_reg then wait for couple of seconds for PUBLISH + # to complete (just in case pUBLISH is used) + if callee.inst_param.have_reg: + time.sleep(1) + if caller.inst_param.have_reg: + time.sleep(1) + + # Caller making call + caller.send("m") + caller.send(t.inst_params[0].uri) + caller.expect(const.STATE_CALLING) + + # Callee waits for call and answers with 180/Ringing + time.sleep(0.2) + callee.expect(const.EVENT_INCOMING_CALL) + callee.send("a") + callee.send("180") + callee.expect("SIP/2.0 180") + caller.expect("SIP/2.0 180") + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # Callee answers with 200/OK + callee.send("a") + callee.send("200") + + # Wait until call is connected in both endpoints + time.sleep(0.2) + caller.expect(const.STATE_CONFIRMED) + callee.expect(const.STATE_CONFIRMED) + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + time.sleep(0.1) + caller.sync_stdout() + callee.sync_stdout() + + # Test that media is okay + time.sleep(0.3) + check_media(caller, callee) + check_media(callee, caller) + + # Hold call by caller + caller.send("H") + caller.expect("INVITE sip:") + callee.expect("INVITE sip:") + caller.expect(const.MEDIA_HOLD) + callee.expect(const.MEDIA_HOLD) + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # Release hold + time.sleep(0.5) + caller.send("v") + caller.expect("INVITE sip:") + callee.expect("INVITE sip:") + caller.expect(const.MEDIA_ACTIVE, title="waiting for media active after call hold") + callee.expect(const.MEDIA_ACTIVE, title="waiting for media active after call hold") + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # Test that media is okay + check_media(caller, callee) + check_media(callee, caller) + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # Hold call by callee + callee.send("H") + callee.expect("INVITE sip:") + caller.expect("INVITE sip:") + caller.expect(const.MEDIA_HOLD) + callee.expect(const.MEDIA_HOLD) + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # Release hold + time.sleep(0.1) + callee.send("v") + callee.expect("INVITE sip:") + caller.expect("INVITE sip:") + callee.expect(const.MEDIA_ACTIVE, title="waiting for media active after call hold") + caller.expect(const.MEDIA_ACTIVE, title="waiting for media active after call hold") + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # Test that media is okay + # Wait for some time for ICE negotiation + time.sleep(0.6) + check_media(caller, callee) + check_media(callee, caller) + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # UPDATE (by caller) + caller.send("U") + #caller.sync_stdout() + callee.expect(const.MEDIA_ACTIVE, title="waiting for media active with UPDATE") + caller.expect(const.MEDIA_ACTIVE, title="waiting for media active with UPDATE") + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # Test that media is okay + time.sleep(0.1) + check_media(caller, callee) + check_media(callee, caller) + + # UPDATE (by callee) + callee.send("U") + callee.expect("UPDATE sip:") + caller.expect("UPDATE sip:") + caller.expect(const.MEDIA_ACTIVE, title="waiting for media active with UPDATE") + callee.expect(const.MEDIA_ACTIVE, title="waiting for media active with UPDATE") + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # Test that media is okay + time.sleep(0.1) + check_media(caller, callee) + check_media(callee, caller) + + # Synchronize stdout + caller.sync_stdout() + callee.sync_stdout() + + # Set codecs in both caller and callee so that there is + # no common codec between them. + # In caller we only enable PCMU, in callee we only enable PCMA + caller.send("Cp") + caller.expect("Enter codec") + caller.send("* 0") + caller.send("Cp") + caller.expect("Enter codec") + caller.send("pcmu 120") + + callee.send("Cp") + callee.expect("Enter codec") + callee.send("* 0") + callee.send("Cp") + callee.expect("Enter codec") + callee.send("pcma 120") + + # Test when UPDATE fails (by callee) + callee.send("U") + caller.expect("SIP/2.0 488") + callee.expect("SIP/2.0 488") + callee.sync_stdout() + caller.sync_stdout() + + # Test that media is still okay + time.sleep(0.1) + check_media(caller, callee) + check_media(callee, caller) + + # Test when UPDATE fails (by caller) + caller.send("U") + caller.expect("UPDATE sip:") + callee.expect("UPDATE sip:") + callee.expect("SIP/2.0 488") + caller.expect("SIP/2.0 488") + caller.sync_stdout() + callee.sync_stdout() + + # Test that media is still okay + time.sleep(0.1) + check_media(callee, caller) + check_media(caller, callee) + + # Hangup call + time.sleep(0.1) + caller.send("h") + + # Wait until calls are cleared in both endpoints + caller.expect(const.STATE_DISCONNECTED) + callee.expect(const.STATE_DISCONNECTED) + + +# Here where it all comes together +test = cfg_file.test_param +test.test_func = test_func + |