Mercurial > libervia-backend
annotate src/test/test_plugin_misc_radiocol.py @ 1422:be1fccf4854d
tmp (wokkel): licenses fixes:
the licenses headers were wrong, it was fixed: original work from Adrien Cossa is directly under AGPL v3 (with his agreement), work derivated from Wokkel is sublicensed to AGPL v3 as allowed by the original license, to stay consistent with the rest of the code base.
Theses files (and only these ones) can be relicensed again to fill Wokkel license if Ralph plan to merge them upstream...
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 23 Apr 2015 10:57:40 +0200 |
parents | 979210da778a |
children | 0681d69cbe0a |
rev | line source |
---|---|
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
1 #!/usr/bin/python |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
3 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
4 # SAT: a jabber client |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013 Jérôme Poisson (goffi@goffi.org) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
6 # Copyright (C) 2013 Adrien Cossa (souliane@mailoo.org) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
7 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
8 # This program is free software: you can redistribute it and/or modify |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
9 # it under the terms of the GNU Affero General Public License as published by |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
10 # the Free Software Foundation, either version 3 of the License, or |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
11 # (at your option) any later version. |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
12 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
13 # This program is distributed in the hope that it will be useful, |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
16 # GNU Affero General Public License for more details. |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
17 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
18 # You should have received a copy of the GNU Affero General Public License |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
20 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
21 """ Tests for the plugin radiocol """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
22 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
23 from sat.core import exceptions |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
24 from sat.core.log import getLogger |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 from sat.test import helpers, helpers_plugins |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 from sat.plugins import plugin_misc_radiocol as plugin |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
27 from sat.plugins import plugin_misc_room_game as plugin_room_game |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
28 from constants import Const |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
29 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
30 from twisted.words.protocols.jabber.jid import JID |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
31 from twisted.words.xish import domish |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
32 from twisted.internet import reactor |
849
c5a8f602662b
plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents:
830
diff
changeset
|
33 from twisted.internet import defer |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
34 from twisted.python.failure import Failure |
861
4d091738275c
test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
35 from twisted.trial.unittest import SkipTest |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
36 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
37 from mutagen.oggvorbis import OggVorbis |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
38 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
39 import uuid |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
40 import os |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
41 import copy |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
42 import shutil |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
43 from logging import WARNING |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
44 |
1412 | 45 ROOM_JID = JID(Const.MUC_STR[0]) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
46 PROFILE = Const.PROFILE[0] |
1412 | 47 REFEREE_FULL = JID(ROOM_JID.userhost() + '/' + Const.JID[0].user) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
48 PLAYERS_INDICES = [0, 1, 3] # referee included |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
49 OTHER_PROFILES = [Const.PROFILE[1], Const.PROFILE[3]] |
1412 | 50 OTHER_PLAYERS = [Const.JID[1], Const.JID[3]] |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
51 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
52 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
53 class RadiocolTest(helpers.SatTestCase): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
54 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
55 def setUp(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
56 self.host = helpers.FakeSAT() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
57 |
1271 | 58 def reinit(self): |
59 self.host.reinit() | |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
60 self.host.plugins['ROOM-GAME'] = plugin_room_game.RoomGame(self.host) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
61 self.plugin = plugin.Radiocol(self.host) # must be init after ROOM-GAME |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
62 self.plugin.testing = True |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
63 self.plugin_0045 = self.host.plugins['XEP-0045'] = helpers_plugins.FakeXEP_0045(self.host) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
64 self.plugin_0249 = self.host.plugins['XEP-0249'] = helpers_plugins.FakeXEP_0249(self.host) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
65 for profile in Const.PROFILE: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
66 self.host.getClient(profile) # init self.host.profiles[profile] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
67 self.songs = [] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
68 self.playlist = [] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
69 self.sound_dir = self.host.memory.getConfig('', 'media_dir') + '/test/sound/' |
861
4d091738275c
test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
70 try: |
4d091738275c
test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
71 for filename in os.listdir(self.sound_dir): |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
72 if filename.endswith('.ogg') or filename.endswith('.mp3'): |
861
4d091738275c
test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
73 self.songs.append(filename) |
4d091738275c
test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
74 except OSError: |
4d091738275c
test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
75 raise SkipTest('The sound samples in sat_media/test/sound were not found') |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
76 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
77 def _buildPlayers(self, players=[]): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
78 """@return: the "started" content built with the given players""" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
79 content = "<started" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
80 if not players: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
81 content += "/>" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
82 else: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
83 content += ">" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
84 for i in xrange(0, len(players)): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
85 content += "<player index='%s'>%s</player>" % (i, players[i]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
86 content += "</started>" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
87 return content |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
88 |
1412 | 89 def _expectedMessage(self, to_jid, type_, content): |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
90 """ |
1412 | 91 @param to_jid: recipient full jid |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
92 @param type_: message type ('normal' or 'groupchat') |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
93 @param content: content as unicode or list of domish elements |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
94 @return: the message XML built from the given recipient, message type and content |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
95 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
96 if isinstance(content, list): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
97 new_content = copy.deepcopy(content) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
98 for element in new_content: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
99 if not element.hasAttribute('xmlns'): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
100 element['xmlns'] = '' |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
101 content = "".join([element.toXml() for element in new_content]) |
1412 | 102 return "<message to='%s' type='%s'><%s xmlns='%s'>%s</%s></message>" % (to_jid.full(), type_, plugin.RADIOC_TAG, plugin.NC_RADIOCOL, content, plugin.RADIOC_TAG) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
103 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
104 def _rejectSongCb(self, profile_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
105 """Check if the message "song_rejected" has been sent by the referee |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
106 and process the command with the profile of the uploader |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
107 @param profile_index: uploader's profile""" |
1271 | 108 sent = self.host.getSentMessage(0) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
109 content = "<song_rejected xmlns='' reason='Too many songs in queue'/>" |
1412 | 110 self.assertEqualXML(sent.toXml(), self._expectedMessage(JID(ROOM_JID.userhost() + '/' + self.plugin_0045.getNick(0, profile_index), 'normal', content))) |
111 self._roomGameCmd(sent, ['radiocolSongRejected', ROOM_JID.full(), 'Too many songs in queue']) | |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
112 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
113 def _noUploadCb(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
114 """Check if the message "no_upload" has been sent by the referee |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
115 and process the command with the profiles of each room users""" |
1271 | 116 sent = self.host.getSentMessage(0) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
117 content = "<no_upload xmlns=''/>" |
1412 | 118 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content)) |
119 self._roomGameCmd(sent, ['radiocolNoUpload', ROOM_JID.full()]) | |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
120 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
121 def _uploadOkCb(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
122 """Check if the message "upload_ok" has been sent by the referee |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
123 and process the command with the profiles of each room users""" |
1271 | 124 sent = self.host.getSentMessage(0) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
125 content = "<upload_ok xmlns=''/>" |
1412 | 126 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content)) |
127 self._roomGameCmd(sent, ['radiocolUploadOk', ROOM_JID.full()]) | |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
128 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
129 def _preloadCb(self, attrs, profile_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
130 """Check if the message "preload" has been sent by the referee |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
131 and process the command with the profiles of each room users |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
132 @param attrs: information dict about the song |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
133 @param profile_index: profile index of the uploader |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
134 """ |
1271 | 135 sent = self.host.getSentMessage(0) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
136 attrs['sender'] = self.plugin_0045.getNick(0, profile_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
137 radiocol_elt = domish.generateElementsNamed(sent.elements(), 'radiocol').next() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
138 preload_elt = domish.generateElementsNamed(radiocol_elt.elements(), 'preload').next() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
139 attrs['timestamp'] = preload_elt['timestamp'] # we could not guess it... |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
140 content = "<preload xmlns='' %s/>" % " ".join(["%s='%s'" % (attr, attrs[attr]) for attr in attrs]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
141 if sent.hasAttribute('from'): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
142 del sent['from'] |
1412 | 143 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content)) |
144 self._roomGameCmd(sent, ['radiocolPreload', ROOM_JID.full(), attrs['timestamp'], attrs['filename'], attrs['title'], attrs['artist'], attrs['album'], attrs['sender']]) | |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
145 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
146 def _playNextSongCb(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
147 """Check if the message "play" has been sent by the referee |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
148 and process the command with the profiles of each room users""" |
1271 | 149 sent = self.host.getSentMessage(0) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
150 filename = self.playlist.pop(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
151 content = "<play xmlns='' filename='%s' />" % filename |
1412 | 152 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content)) |
153 self._roomGameCmd(sent, ['radiocolPlay', ROOM_JID.full(), filename]) | |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
154 |
1412 | 155 game_data = self.plugin.games[ROOM_JID] |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
156 if len(game_data['queue']) == plugin.QUEUE_LIMIT - 1: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
157 self._uploadOkCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
158 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
159 def _addSongCb(self, d, filepath, profile_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
160 """Check if the message "song_added" has been sent by the uploader |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
161 and process the command with the profile of the referee |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
162 @param d: deferred value or failure got from self.plugin.radiocolSongAdded |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
163 @param filepath: full path to the sound file |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
164 @param profile_index: the profile index of the uploader |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
165 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
166 if isinstance(d, Failure): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
167 self.fail("OGG song could not be added!") |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
168 |
1412 | 169 game_data = self.plugin.games[ROOM_JID] |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
170 song = OggVorbis(filepath) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
171 attrs = {'filename': os.path.basename(filepath), |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
172 'title': song.get("title", ["Unknown"])[0], |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
173 'artist': song.get("artist", ["Unknown"])[0], |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
174 'album': song.get("album", ["Unknown"])[0], |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
175 'length': str(song.info.length) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
176 } |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
177 self.assertEqual(game_data['to_delete'][attrs['filename']], filepath) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
178 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
179 content = "<song_added xmlns='' %s/>" % " ".join(["%s='%s'" % (attr, attrs[attr]) for attr in attrs]) |
1271 | 180 sent = self.host.getSentMessage(profile_index) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
181 self.assertEqualXML(sent.toXml(), self._expectedMessage(REFEREE_FULL, 'normal', content)) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
182 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
183 reject_song = len(game_data['queue']) >= plugin.QUEUE_LIMIT |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
184 no_upload = len(game_data['queue']) + 1 >= plugin.QUEUE_LIMIT |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
185 play_next = not game_data['playing'] and len(game_data['queue']) + 1 == plugin.QUEUE_TO_START |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
186 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
187 self._roomGameCmd(sent, profile_index) # queue unchanged or +1 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
188 if reject_song: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
189 self._rejectSongCb(profile_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
190 return |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
191 if no_upload: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
192 self._noUploadCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
193 self._preloadCb(attrs, profile_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
194 self.playlist.append(attrs['filename']) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
195 if play_next: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
196 self._playNextSongCb() # queue -1 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
197 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
198 def _roomGameCmd(self, sent, from_index=0, call=[]): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
199 """Process a command. It is also possible to call this method as |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
200 _roomGameCmd(sent, call) instead of _roomGameCmd(sent, from_index, call). |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
201 If from index is a list, it is assumed that it is containing the value |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
202 for call and from_index will take its default value. |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
203 @param sent: the sent message that we need to process |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
204 @param from_index: index of the message sender |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
205 @param call: list containing the name of the expected bridge call |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
206 followed by its arguments, or empty list if no call is expected |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
207 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
208 if isinstance(from_index, list): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
209 call = from_index |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
210 from_index = 0 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
211 |
1412 | 212 sent['from'] = ROOM_JID.full() + '/' + self.plugin_0045.getNick(0, from_index) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
213 recipient = JID(sent['to']).resource |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
214 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
215 # The message could have been sent to a room user (room_jid + '/' + nick), |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
216 # but when it is received, the 'to' attribute of the message has been |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
217 # changed to the recipient own JID. We need to simulate that here. |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
218 if recipient: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
219 room = self.plugin_0045.getRoom(0, 0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
220 sent['to'] = Const.JID_STR[0] if recipient == room.nick else room.roster[recipient].entity.full() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
221 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
222 for index in xrange(0, len(Const.PROFILE)): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
223 nick = self.plugin_0045.getNick(0, index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
224 if nick: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
225 if not recipient or nick == recipient: |
1412 | 226 if call and (self.plugin.isPlayer(ROOM_JID, nick) or call[0] == 'radiocolStarted'): |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
227 args = copy.deepcopy(call) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
228 args.append(Const.PROFILE[index]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
229 self.host.bridge.expectCall(*args) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
230 self.plugin.room_game_cmd(sent, Const.PROFILE[index]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
231 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
232 def _syncCb(self, sync_data, profile_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
233 """Synchronize one player when he joins a running game. |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
234 @param sync_data: result from self.plugin.getSyncData |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
235 @param profile_index: index of the profile to be synchronized |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
236 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
237 for nick in sync_data: |
1412 | 238 expected = self._expectedMessage(JID(ROOM_JID.userhost() + '/' + nick), 'normal', sync_data[nick]) |
1271 | 239 sent = self.host.getSentMessage(0) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
240 self.assertEqualXML(sent.toXml(), expected) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
241 for elt in sync_data[nick]: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
242 if elt.name == 'preload': |
1412 | 243 self.host.bridge.expectCall('radiocolPreload', ROOM_JID.full(), elt['timestamp'], elt['filename'], elt['title'], elt['artist'], elt['album'], elt['sender'], Const.PROFILE[profile_index]) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
244 elif elt.name == 'play': |
1412 | 245 self.host.bridge.expectCall('radiocolPlay', ROOM_JID.full(), elt['filename'], Const.PROFILE[profile_index]) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
246 elif elt.name == 'no_upload': |
1412 | 247 self.host.bridge.expectCall('radiocolNoUpload', ROOM_JID.full(), Const.PROFILE[profile_index]) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
248 sync_data[nick] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
249 self._roomGameCmd(sent, []) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
250 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
251 def _joinRoom(self, room, nicks, player_index, sync=True): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
252 """Make a player join a room and update the list of nicks |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
253 @param room: wokkel.muc.Room instance from the referee perspective |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
254 @param nicks: list of the players which will be updated |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
255 @param player_index: profile index of the new player |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
256 @param sync: set to True to synchronize data |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
257 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
258 user_nick = self.plugin_0045.joinRoom(0, player_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
259 self.plugin.userJoinedTrigger(room, room.roster[user_nick], PROFILE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
260 if player_index not in PLAYERS_INDICES: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
261 # this user is actually not a player |
1412 | 262 self.assertFalse(self.plugin.isPlayer(ROOM_JID, user_nick)) |
263 to_jid, type_ = (JID(ROOM_JID.userhost() + '/' + user_nick), 'normal') | |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
264 else: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
265 # this user is a player |
1412 | 266 self.assertTrue(self.plugin.isPlayer(ROOM_JID, user_nick)) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
267 nicks.append(user_nick) |
1412 | 268 to_jid, type_ = (ROOM_JID, 'groupchat') |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
269 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
270 # Check that the message "players" has been sent by the referee |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
271 expected = self._expectedMessage(to_jid, type_, self._buildPlayers(nicks)) |
1271 | 272 sent = self.host.getSentMessage(0) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
273 self.assertEqualXML(sent.toXml(), expected) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
274 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
275 # Process the command with the profiles of each room users |
1412 | 276 self._roomGameCmd(sent, ['radiocolStarted', ROOM_JID.full(), REFEREE_FULL.full(), nicks, [plugin.QUEUE_TO_START, plugin.QUEUE_LIMIT]]) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
277 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
278 if sync: |
1412 | 279 self._syncCb(self.plugin._getSyncData(ROOM_JID, [user_nick]), player_index) |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
280 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
281 def _leaveRoom(self, room, nicks, player_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
282 """Make a player leave a room and update the list of nicks |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
283 @param room: wokkel.muc.Room instance from the referee perspective |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
284 @param nicks: list of the players which will be updated |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
285 @param player_index: profile index of the new player |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
286 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
287 user_nick = self.plugin_0045.getNick(0, player_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
288 user = room.roster[user_nick] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
289 self.plugin_0045.leaveRoom(0, player_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
290 self.plugin.userLeftTrigger(room, user, PROFILE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
291 nicks.remove(user_nick) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
292 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
293 def _uploadSong(self, song_index, profile_index, ext='ogg'): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
294 """Upload the song of index song_index (modulo self.songs size) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
295 from the profile of index profile_index. All the songs in self.songs |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
296 are OGG, but you can set ext to a value different than 'ogg' or 'mp3': |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
297 - 'xxx' to test non existent files |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
298 @param song_index: index of the song |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
299 @param profile_index: index of the uploader's profile |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
300 @param new_ext: change the extension from "ogg" to this value |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
301 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
302 song_index = song_index % len(self.songs) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
303 src_filename = self.songs[song_index] |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
304 if ext not in ('ogg', 'mp3'): |
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
305 src_filename = os.path.splitext(src_filename)[0] + '.' + ext |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
306 dst_filepath = '/tmp/%s.%s' % (uuid.uuid1(), ext) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
307 expect_io_error = ext == 'xxx' |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
308 if not expect_io_error: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
309 shutil.copy(self.sound_dir + src_filename, dst_filepath) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
310 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
311 try: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
312 d = self.plugin.radiocolSongAdded(REFEREE_FULL, dst_filepath, Const.PROFILE[profile_index]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
313 except IOError: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
314 self.assertTrue(expect_io_error) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
315 return |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
316 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
317 self.assertFalse(expect_io_error) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
318 cb = lambda defer: self._addSongCb(defer, dst_filepath, profile_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
319 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
320 def eb(failure): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
321 if not isinstance(failure, Failure): |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
322 self.fail("Adding a song which is not OGG nor MP3 should fail!") |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
323 self.assertEqual(failure.value.__class__, exceptions.DataError) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
324 |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
325 if self.songs[song_index].endswith('.ogg') or self.songs[song_index].endswith('.mp3'): |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
326 d.addCallbacks(cb, cb) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
327 else: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
328 d.addCallbacks(eb, eb) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
329 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
330 def test_init(self): |
1271 | 331 self.reinit() |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
332 self.assertEqual(self.plugin.invite_mode, self.plugin.FROM_PLAYERS) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
333 self.assertEqual(self.plugin.wait_mode, self.plugin.FOR_NONE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
334 self.assertEqual(self.plugin.join_mode, self.plugin.INVITED) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
335 self.assertEqual(self.plugin.ready_mode, self.plugin.FORCE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
336 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
337 def test_game(self): |
1271 | 338 self.reinit() |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
339 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
340 # create game |
1412 | 341 self.plugin.prepareRoom(OTHER_PLAYERS, ROOM_JID, PROFILE) |
342 self.assertTrue(self.plugin._gameExists(ROOM_JID, True)) | |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
343 room = self.plugin_0045.getRoom(0, 0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
344 nicks = [self.plugin_0045.getNick(0, 0)] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
345 |
1271 | 346 sent = self.host.getSentMessage(0) |
1412 | 347 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', self._buildPlayers(nicks))) |
348 self._roomGameCmd(sent, ['radiocolStarted', ROOM_JID.full(), REFEREE_FULL.full(), nicks, [plugin.QUEUE_TO_START, plugin.QUEUE_LIMIT]]) | |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
349 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
350 self._joinRoom(room, nicks, 1) # player joins |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
351 self._joinRoom(room, nicks, 4) # user not playing joins |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
352 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
353 song_index = 0 |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
354 self._uploadSong(song_index, 0) # ogg or mp3 file should exist in sat_media/test/song |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
355 self._uploadSong(song_index, 0, 'xxx') # file should not exist |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
356 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
357 # another songs are added by Const.JID[1] until the radio starts + 1 to fill the queue |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
358 # when the first song starts + 1 to be rejected because the queue is full |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
359 for song_index in xrange(1, plugin.QUEUE_TO_START + 1): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
360 self._uploadSong(song_index, 1) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
361 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
362 self.plugin.playNext(Const.MUC[0], PROFILE) # simulate the end of the first song |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
363 self._playNextSongCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
364 self._uploadSong(song_index, 1) # now the song is accepted and the queue is full again |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
365 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
366 self._joinRoom(room, nicks, 3) # new player joins |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
367 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
368 self.plugin.playNext(Const.MUC[0], PROFILE) # the second song finishes |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
369 self._playNextSongCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
370 self._uploadSong(0, 3) # the player who recently joined re-upload the first file |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
371 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
372 self._leaveRoom(room, nicks, 1) # one player leaves |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
373 self._joinRoom(room, nicks, 1) # and join again |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
374 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
375 self.plugin.playNext(Const.MUC[0], PROFILE) # empty the queue |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
376 self._playNextSongCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
377 self.plugin.playNext(Const.MUC[0], PROFILE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
378 self._playNextSongCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
379 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
380 for filename in self.playlist: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
381 self.plugin.deleteFile('/tmp/' + filename) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
382 |
849
c5a8f602662b
plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents:
830
diff
changeset
|
383 return defer.succeed(None) |
c5a8f602662b
plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents:
830
diff
changeset
|
384 |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
385 def tearDown(self, *args, **kwargs): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
386 """Clean the reactor""" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
387 helpers.SatTestCase.tearDown(self, *args, **kwargs) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
388 for delayed_call in reactor.getDelayedCalls(): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
389 delayed_call.cancel() |