~vcs-imports/shtoom/main

« back to all changes in this revision

Viewing changes to shtoom/test/test_callcontrol.py

  • Committer: anthony
  • Date: 2005-03-31 14:37:57 UTC
  • Revision ID: Arch-1:shtoom@bazaar.ubuntu.com%shtoom--trunk--0--patch-981
* ALSA handles stereo-only devices now
* Microphone samples are asynchronously pushed up by the lower layers
rather than being polled by the upper layers. On Mac, the high-precision
realtime thread is used to push microphone samples. This fixes a bug
with short reads and a bug with inaccurate polling. On ALSA, there is a
LoopingCall in the ALSA driver that polls at an appropriate interval.
* The encoder base class has a buffer to store up the appropriate
bytes of microphone data to make up a media frame. This buffer gets
flushed when the audio device closes or reopens.
* The audio device gets closed and reopened during important state
transitions, namely call start and call end. This fixes the "That jerk!"
bug, in which you could say "I have to call that jerk!" immediately
before a call connected and then the jerk in question would hear you say
it when he answered.
* Remove some extremely detailed diags that measured the number of 
packets sent per second and the number of packets received per second.
Those diags have served well and are now retired.
* The Mac audio loopback test is rewritten, and a bug involving
closing the loopback test versus closing a phone call is fixed.
* The discovery/selection of the appropriate audio device is done
before the construction of the Phone object. This makes the other
platforms' initialization process parallel to the Mac initialization
process, and also I prefer this approach. (The other approach is that
you construct the Phone object and then it discovers/selects the audio
device itself.)
* Plays ringing sounds for inbound and outbound ringing sounds
* New audio_device option for selecting a different ALSA or OSS device
* New playout algorithm

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
from twisted.internet import reactor, defer
2
2
from twisted.python import log
3
3
import twisted.trial.util
 
4
from shtoom.i18n import install as i18n_install
 
5
i18n_install()
4
6
 
5
7
#TDEBUG=True
6
8
TDEBUG=False
46
48
class TestAudio:
47
49
    def __init__(self):
48
50
        self.actions = []
 
51
 
49
52
    def selectDefaultFormat(self, fmt):
50
53
        self.actions.append('select')
51
54
        if TDEBUG: print "selecting fake audio format"
54
57
        self.actions.append('list')
55
58
        return []
56
59
 
57
 
    def reopen(self):
 
60
    def reopen(self, mediahandler):
58
61
        self.actions.append('reopen')
59
62
        if TDEBUG: print "reopening fake audio"
60
63
 
70
73
        self.actions.append('write')
71
74
        pass
72
75
 
 
76
    def play_wave_file(self, file):
 
77
        self.actions.append('wave')
 
78
        pass
 
79
 
73
80
class TestUI:
74
81
    threadedUI = False
 
82
    cookie = None
75
83
 
76
84
    def __init__(self, stopOnDisconnect=True):
77
85
        self.stopOnDisconnect = stopOnDisconnect
78
86
        self.actions = []
79
87
 
 
88
    def statusMessage(self, *args):
 
89
        pass
 
90
 
80
91
    def connectApplication(self, app):
81
92
        self.app = app
82
93
 
209
220
        self.actions.append('create')
210
221
        return defer.succeed(self.cookie)
211
222
 
212
 
    def startSendingAndReceiving(self, remote):
 
223
    def start(self, remote):
213
224
        self.actions.append('start')
214
225
        pass
215
226
 
239
250
            reactor.callLater(0, ui.dropCall)
240
251
            p.start()
241
252
            twisted.trial.util.wait(testdef)
242
 
            self.assertEquals(au.actions, ['reopen', 'close'])
 
253
            self.assertEquals(au.actions, ['close', 'select', 'reopen', 'close'])
243
254
            self.assertEquals(TestRTP.actions, ['create', 'start', 'stop'])
244
255
            actions = ui.actions
245
256
            if TDEBUG: print actions
268
279
        reactor.callLater(0.3, lambda : p.sip.dropCall(ui.cookie))
269
280
        p.start()
270
281
        twisted.trial.util.wait(testdef)
271
 
        self.assertEquals(au.actions, ['reopen', 'close'])
 
282
        self.assertEquals(au.actions, ['close', 'select', 'reopen', 'close'])
272
283
        self.assertEquals(TestRTP.actions, ['create', 'start', 'stop'])
273
284
        actions = ui.actions
274
285
        cookie = actions[0][1]
295
306
        d.addCallback(p.sip.dropFakeInbound)
296
307
        p.start()
297
308
        twisted.trial.util.wait(testdef)
298
 
        self.assertEquals(au.actions, ['reopen', 'close'])
 
309
        self.assertEquals(au.actions, ['wave', 'close', 'select', 'reopen', 'close'])
299
310
        self.assertEquals(TestRTP.actions, ['create', 'start', 'stop'])
300
311
        actions = ui.actions
301
312
        cookie = actions[0][1]