blob: 7081aed4f9cde2ba74eb1a212cafe021ba7be3d6 [file] [log] [blame]
Nanang Izzuddinf810f952008-06-18 21:04:14 +00001# $Id$
Benny Prijonocc1ada52008-06-15 19:43:43 +00002import time
3import imp
4import sys
5import inc_const as const
Benny Prijono62a969c2008-06-26 13:29:29 +00006from inc_cfg import *
Benny Prijonocc1ada52008-06-15 19:43:43 +00007
8# Load configuration
Nanang Izzuddina680bd62008-06-27 21:12:12 +00009cfg_file = imp.load_source("cfg_file", ARGS[1])
Benny Prijonocc1ada52008-06-15 19:43:43 +000010
Benny Prijono62a969c2008-06-26 13:29:29 +000011# Check media flow between ua1 and ua2
12def check_media(ua1, ua2):
13 ua1.send("#")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +000014 ua1.expect("#")
Benny Prijono62a969c2008-06-26 13:29:29 +000015 ua1.send("1122")
16 ua2.expect(const.RX_DTMF + "1")
17 ua2.expect(const.RX_DTMF + "1")
18 ua2.expect(const.RX_DTMF + "2")
19 ua2.expect(const.RX_DTMF + "2")
20
Benny Prijonocc1ada52008-06-15 19:43:43 +000021
22# Test body function
Nanang Izzuddina680bd62008-06-27 21:12:12 +000023def test_func(t):
Benny Prijonocc1ada52008-06-15 19:43:43 +000024 callee = t.process[0]
25 caller = t.process[1]
26
Benny Prijono62a969c2008-06-26 13:29:29 +000027 # if have_reg then wait for couple of seconds for PUBLISH
28 # to complete (just in case pUBLISH is used)
29 if callee.inst_param.have_reg:
30 time.sleep(1)
31 if caller.inst_param.have_reg:
32 time.sleep(1)
33
Benny Prijonocc1ada52008-06-15 19:43:43 +000034 # Caller making call
35 caller.send("m")
36 caller.send(t.inst_params[0].uri)
37 caller.expect(const.STATE_CALLING)
38
Benny Prijono62a969c2008-06-26 13:29:29 +000039 # Callee waits for call and answers with 180/Ringing
Benny Prijono4d0da3a2008-06-26 20:23:47 +000040 time.sleep(0.2)
Benny Prijonocc1ada52008-06-15 19:43:43 +000041 callee.expect(const.EVENT_INCOMING_CALL)
42 callee.send("a")
Benny Prijono62a969c2008-06-26 13:29:29 +000043 callee.send("180")
44 callee.expect("SIP/2.0 180")
45 caller.expect("SIP/2.0 180")
46
47 # Synchronize stdout
48 caller.sync_stdout()
49 callee.sync_stdout()
50
51 # Callee answers with 200/OK
52 callee.send("a")
Benny Prijonocc1ada52008-06-15 19:43:43 +000053 callee.send("200")
54
55 # Wait until call is connected in both endpoints
Benny Prijono4d0da3a2008-06-26 20:23:47 +000056 time.sleep(0.2)
Benny Prijonocc1ada52008-06-15 19:43:43 +000057 caller.expect(const.STATE_CONFIRMED)
Benny Prijono62a969c2008-06-26 13:29:29 +000058 callee.expect(const.STATE_CONFIRMED)
Benny Prijonocc1ada52008-06-15 19:43:43 +000059
60 # Synchronize stdout
Benny Prijono62a969c2008-06-26 13:29:29 +000061 caller.sync_stdout()
62 callee.sync_stdout()
Benny Prijono4d0da3a2008-06-26 20:23:47 +000063 time.sleep(0.1)
Benny Prijono62a969c2008-06-26 13:29:29 +000064 caller.sync_stdout()
65 callee.sync_stdout()
Benny Prijonocc1ada52008-06-15 19:43:43 +000066
Benny Prijono62a969c2008-06-26 13:29:29 +000067 # Test that media is okay
Benny Prijono4d0da3a2008-06-26 20:23:47 +000068 time.sleep(0.3)
Benny Prijono62a969c2008-06-26 13:29:29 +000069 check_media(caller, callee)
70 check_media(callee, caller)
Benny Prijonocc1ada52008-06-15 19:43:43 +000071
Benny Prijono62a969c2008-06-26 13:29:29 +000072 # Hold call by caller
Benny Prijonocc1ada52008-06-15 19:43:43 +000073 caller.send("H")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +000074 caller.expect("INVITE sip:")
75 callee.expect("INVITE sip:")
Benny Prijonocc1ada52008-06-15 19:43:43 +000076 caller.expect(const.MEDIA_HOLD)
77 callee.expect(const.MEDIA_HOLD)
78
Benny Prijono62a969c2008-06-26 13:29:29 +000079 # Synchronize stdout
80 caller.sync_stdout()
81 callee.sync_stdout()
82
Benny Prijonocc1ada52008-06-15 19:43:43 +000083 # Release hold
Benny Prijono4d0da3a2008-06-26 20:23:47 +000084 time.sleep(0.5)
Benny Prijonocc1ada52008-06-15 19:43:43 +000085 caller.send("v")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +000086 caller.expect("INVITE sip:")
87 callee.expect("INVITE sip:")
Benny Prijono5242a422008-06-26 16:27:17 +000088 caller.expect(const.MEDIA_ACTIVE, title="waiting for media active after call hold")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +000089 callee.expect(const.MEDIA_ACTIVE, title="waiting for media active after call hold")
Benny Prijono62a969c2008-06-26 13:29:29 +000090
91 # Synchronize stdout
92 caller.sync_stdout()
93 callee.sync_stdout()
94
95 # Test that media is okay
96 check_media(caller, callee)
97 check_media(callee, caller)
98
99 # Synchronize stdout
100 caller.sync_stdout()
101 callee.sync_stdout()
102
103 # Hold call by callee
104 callee.send("H")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000105 callee.expect("INVITE sip:")
106 caller.expect("INVITE sip:")
Benny Prijono62a969c2008-06-26 13:29:29 +0000107 caller.expect(const.MEDIA_HOLD)
108 callee.expect(const.MEDIA_HOLD)
109
110 # Synchronize stdout
111 caller.sync_stdout()
112 callee.sync_stdout()
113
114 # Release hold
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000115 time.sleep(0.1)
Benny Prijono62a969c2008-06-26 13:29:29 +0000116 callee.send("v")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000117 callee.expect("INVITE sip:")
118 caller.expect("INVITE sip:")
Benny Prijono5242a422008-06-26 16:27:17 +0000119 callee.expect(const.MEDIA_ACTIVE, title="waiting for media active after call hold")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000120 caller.expect(const.MEDIA_ACTIVE, title="waiting for media active after call hold")
Benny Prijonocc1ada52008-06-15 19:43:43 +0000121
122 # Synchronize stdout
Benny Prijono62a969c2008-06-26 13:29:29 +0000123 caller.sync_stdout()
124 callee.sync_stdout()
Benny Prijonocc1ada52008-06-15 19:43:43 +0000125
Benny Prijono62a969c2008-06-26 13:29:29 +0000126 # Test that media is okay
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000127 # Wait for some time for ICE negotiation
128 time.sleep(0.6)
Benny Prijono62a969c2008-06-26 13:29:29 +0000129 check_media(caller, callee)
130 check_media(callee, caller)
Benny Prijonocc1ada52008-06-15 19:43:43 +0000131
132 # Synchronize stdout
Benny Prijono62a969c2008-06-26 13:29:29 +0000133 caller.sync_stdout()
134 callee.sync_stdout()
Benny Prijonocc1ada52008-06-15 19:43:43 +0000135
136 # UPDATE (by caller)
137 caller.send("U")
Benny Prijono5242a422008-06-26 16:27:17 +0000138 #caller.sync_stdout()
139 callee.expect(const.MEDIA_ACTIVE, title="waiting for media active with UPDATE")
140 caller.expect(const.MEDIA_ACTIVE, title="waiting for media active with UPDATE")
Benny Prijonocc1ada52008-06-15 19:43:43 +0000141
142 # Synchronize stdout
Benny Prijono62a969c2008-06-26 13:29:29 +0000143 caller.sync_stdout()
144 callee.sync_stdout()
Benny Prijonocc1ada52008-06-15 19:43:43 +0000145
Benny Prijono62a969c2008-06-26 13:29:29 +0000146 # Test that media is okay
Benny Prijono4d0da3a2008-06-26 20:23:47 +0000147 time.sleep(0.1)
Benny Prijono62a969c2008-06-26 13:29:29 +0000148 check_media(caller, callee)
149 check_media(callee, caller)
Benny Prijonocc1ada52008-06-15 19:43:43 +0000150
151 # UPDATE (by callee)
152 callee.send("U")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000153 callee.expect("UPDATE sip:")
154 caller.expect("UPDATE sip:")
Benny Prijono5242a422008-06-26 16:27:17 +0000155 caller.expect(const.MEDIA_ACTIVE, title="waiting for media active with UPDATE")
156 callee.expect(const.MEDIA_ACTIVE, title="waiting for media active with UPDATE")
Benny Prijonocc1ada52008-06-15 19:43:43 +0000157
158 # Synchronize stdout
Benny Prijono62a969c2008-06-26 13:29:29 +0000159 caller.sync_stdout()
160 callee.sync_stdout()
Benny Prijonocc1ada52008-06-15 19:43:43 +0000161
Benny Prijono62a969c2008-06-26 13:29:29 +0000162 # Test that media is okay
Benny Prijono4d0da3a2008-06-26 20:23:47 +0000163 time.sleep(0.1)
Benny Prijono62a969c2008-06-26 13:29:29 +0000164 check_media(caller, callee)
165 check_media(callee, caller)
Benny Prijonocc1ada52008-06-15 19:43:43 +0000166
Benny Prijono5242a422008-06-26 16:27:17 +0000167 # Synchronize stdout
168 caller.sync_stdout()
169 callee.sync_stdout()
170
171 # Set codecs in both caller and callee so that there is
172 # no common codec between them.
173 # In caller we only enable PCMU, in callee we only enable PCMA
174 caller.send("Cp")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000175 caller.expect("Enter codec")
Benny Prijono5242a422008-06-26 16:27:17 +0000176 caller.send("* 0")
177 caller.send("Cp")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000178 caller.expect("Enter codec")
Benny Prijono5242a422008-06-26 16:27:17 +0000179 caller.send("pcmu 120")
180
181 callee.send("Cp")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000182 callee.expect("Enter codec")
Benny Prijono5242a422008-06-26 16:27:17 +0000183 callee.send("* 0")
184 callee.send("Cp")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000185 callee.expect("Enter codec")
Benny Prijono5242a422008-06-26 16:27:17 +0000186 callee.send("pcma 120")
187
188 # Test when UPDATE fails (by callee)
189 callee.send("U")
190 caller.expect("SIP/2.0 488")
191 callee.expect("SIP/2.0 488")
192 callee.sync_stdout()
193 caller.sync_stdout()
194
195 # Test that media is still okay
Benny Prijono4d0da3a2008-06-26 20:23:47 +0000196 time.sleep(0.1)
Benny Prijono5242a422008-06-26 16:27:17 +0000197 check_media(caller, callee)
198 check_media(callee, caller)
199
200 # Test when UPDATE fails (by caller)
201 caller.send("U")
Benny Prijonoe4ddeec2008-06-27 08:51:55 +0000202 caller.expect("UPDATE sip:")
203 callee.expect("UPDATE sip:")
Benny Prijono5242a422008-06-26 16:27:17 +0000204 callee.expect("SIP/2.0 488")
205 caller.expect("SIP/2.0 488")
206 caller.sync_stdout()
207 callee.sync_stdout()
208
209 # Test that media is still okay
Benny Prijono4d0da3a2008-06-26 20:23:47 +0000210 time.sleep(0.1)
Benny Prijono5242a422008-06-26 16:27:17 +0000211 check_media(callee, caller)
212 check_media(caller, callee)
213
Benny Prijonocc1ada52008-06-15 19:43:43 +0000214 # Hangup call
Benny Prijono4d0da3a2008-06-26 20:23:47 +0000215 time.sleep(0.1)
Benny Prijonocc1ada52008-06-15 19:43:43 +0000216 caller.send("h")
217
218 # Wait until calls are cleared in both endpoints
219 caller.expect(const.STATE_DISCONNECTED)
220 callee.expect(const.STATE_DISCONNECTED)
221
222
223# Here where it all comes together
224test = cfg_file.test_param
225test.test_func = test_func
226