Mercurial > libervia-backend
annotate src/test/test_plugin_misc_radiocol.py @ 1005:b4af31a8a4f2
core (logs): added formatting, name filter and outputs management:
- formatting is inspired from, and use when possible, standard logging. "message", "levelname", and "name" are the only format managed, depending on backend more can be managed (standard backend formats are specified in official python logging doc)
- name filter use regular expressions. It's possible to log only plugins with SAT_LOG_LOGGER="^sat.plugins". To log only XEPs 96 & 65, we can use SAT_LOG_LOGGER='(xep_0095|xep_0065)'
- output management use a particular syntax:
- output handler are name with "//", so far there are "//default" (most of time stderr), "//memory" and "//file"
- options can be specified in parenthesis, e.g. "//memory(50)" mean a 50 lines memory buffer (50 is the current default, so that's equivalent to "//memory")
- several handlers can be specified: "//file(/tmp/sat.log)//default" will use the default logging + a the /tmp/sat.log file
- if there is only one handler, it use the file handler: "/tmp/sat.log" is the same as "//file(/tmp/sat.log)"
- not finished, need more work for twisted and basic backends
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 05 May 2014 18:58:34 +0200 |
parents | b3f383ab39da |
children | 2308f8405ffb |
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 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
45 ROOM_JID_S = Const.MUC_STR[0] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
46 PROFILE = Const.PROFILE[0] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
47 REFEREE_FULL = ROOM_JID_S + '/' + Const.JID[0].user |
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]] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
50 OTHER_PLAYERS = [Const.JID_STR[1], Const.JID_STR[3]] |
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 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
58 def init(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
59 self.host.init() |
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) |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
65 logger = getLogger() |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
66 level = logger.getEffectiveLevel() |
997
b3f383ab39da
test: configuration/use of new logging system
Goffi <goffi@goffi.org>
parents:
993
diff
changeset
|
67 logger.setLevel(WARNING) # remove log.info pollution |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
68 for profile in Const.PROFILE: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
69 self.host.getClient(profile) # init self.host.profiles[profile] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
70 logger.setLevel(level) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
71 self.songs = [] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
72 self.playlist = [] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
73 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
|
74 try: |
4d091738275c
test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
75 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
|
76 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
|
77 self.songs.append(filename) |
4d091738275c
test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
78 except OSError: |
4d091738275c
test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents:
849
diff
changeset
|
79 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
|
80 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
81 def _buildPlayers(self, players=[]): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
82 """@return: the "started" content built with the given players""" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
83 content = "<started" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
84 if not players: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
85 content += "/>" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
86 else: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
87 content += ">" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
88 for i in xrange(0, len(players)): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
89 content += "<player index='%s'>%s</player>" % (i, players[i]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
90 content += "</started>" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
91 return content |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
92 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
93 def _expectedMessage(self, to_s, type_, content): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
94 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
95 @param to_s: recipient full jid as unicode |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
96 @param type_: message type ('normal' or 'groupchat') |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
97 @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
|
98 @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
|
99 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
100 if isinstance(content, list): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
101 new_content = copy.deepcopy(content) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
102 for element in new_content: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
103 if not element.hasAttribute('xmlns'): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
104 element['xmlns'] = '' |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
105 content = "".join([element.toXml() for element in new_content]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
106 return "<message to='%s' type='%s'><%s xmlns='%s'>%s</%s></message>" % (to_s, type_, plugin.RADIOC_TAG, plugin.NC_RADIOCOL, content, plugin.RADIOC_TAG) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
107 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
108 def _rejectSongCb(self, profile_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
109 """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
|
110 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
|
111 @param profile_index: uploader's profile""" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
112 sent = self.host.getSentMessageRaw(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
113 content = "<song_rejected xmlns='' reason='Too many songs in queue'/>" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
114 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID_S + '/' + self.plugin_0045.getNick(0, profile_index), 'normal', content)) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
115 self._roomGameCmd(sent, ['radiocolSongRejected', ROOM_JID_S, 'Too many songs in queue']) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
116 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
117 def _noUploadCb(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
118 """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
|
119 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
|
120 sent = self.host.getSentMessageRaw(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
121 content = "<no_upload xmlns=''/>" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
122 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID_S, 'groupchat', content)) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
123 self._roomGameCmd(sent, ['radiocolNoUpload', ROOM_JID_S]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
124 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
125 def _uploadOkCb(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
126 """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
|
127 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
|
128 sent = self.host.getSentMessageRaw(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
129 content = "<upload_ok xmlns=''/>" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
130 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID_S, 'groupchat', content)) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
131 self._roomGameCmd(sent, ['radiocolUploadOk', ROOM_JID_S]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
132 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
133 def _preloadCb(self, attrs, profile_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
134 """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
|
135 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
|
136 @param attrs: information dict about the song |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
137 @param profile_index: profile index of the uploader |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
138 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
139 sent = self.host.getSentMessageRaw(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
140 attrs['sender'] = self.plugin_0045.getNick(0, profile_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
141 radiocol_elt = domish.generateElementsNamed(sent.elements(), 'radiocol').next() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
142 preload_elt = domish.generateElementsNamed(radiocol_elt.elements(), 'preload').next() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
143 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
|
144 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
|
145 if sent.hasAttribute('from'): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
146 del sent['from'] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
147 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID_S, 'groupchat', content)) |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
148 self._roomGameCmd(sent, ['radiocolPreload', ROOM_JID_S, 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
|
149 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
150 def _playNextSongCb(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
151 """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
|
152 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
|
153 sent = self.host.getSentMessageRaw(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
154 filename = self.playlist.pop(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
155 content = "<play xmlns='' filename='%s' />" % filename |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
156 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID_S, 'groupchat', content)) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
157 self._roomGameCmd(sent, ['radiocolPlay', ROOM_JID_S, filename]) |
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 game_data = self.plugin.games[ROOM_JID_S] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
160 if len(game_data['queue']) == plugin.QUEUE_LIMIT - 1: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
161 self._uploadOkCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
162 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
163 def _addSongCb(self, d, filepath, profile_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
164 """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
|
165 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
|
166 @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
|
167 @param filepath: full path to the sound file |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
168 @param profile_index: the profile index of the uploader |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
169 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
170 if isinstance(d, Failure): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
171 self.fail("OGG song could not be added!") |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
172 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
173 game_data = self.plugin.games[ROOM_JID_S] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
174 song = OggVorbis(filepath) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
175 attrs = {'filename': os.path.basename(filepath), |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
176 'title': song.get("title", ["Unknown"])[0], |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
177 'artist': song.get("artist", ["Unknown"])[0], |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
178 'album': song.get("album", ["Unknown"])[0], |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
179 'length': str(song.info.length) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
180 } |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
181 self.assertEqual(game_data['to_delete'][attrs['filename']], filepath) |
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 content = "<song_added 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
|
184 sent = self.host.getSentMessageRaw(profile_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
185 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
|
186 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
187 reject_song = len(game_data['queue']) >= plugin.QUEUE_LIMIT |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
188 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
|
189 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
|
190 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
191 self._roomGameCmd(sent, profile_index) # queue unchanged or +1 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
192 if reject_song: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
193 self._rejectSongCb(profile_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
194 return |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
195 if no_upload: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
196 self._noUploadCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
197 self._preloadCb(attrs, profile_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
198 self.playlist.append(attrs['filename']) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
199 if play_next: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
200 self._playNextSongCb() # queue -1 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
201 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
202 def _roomGameCmd(self, sent, from_index=0, call=[]): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
203 """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
|
204 _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
|
205 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
|
206 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
|
207 @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
|
208 @param from_index: index of the message sender |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
209 @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
|
210 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
|
211 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
212 if isinstance(from_index, list): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
213 call = from_index |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
214 from_index = 0 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
215 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
216 sent['from'] = ROOM_JID_S + '/' + self.plugin_0045.getNick(0, from_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
217 recipient = JID(sent['to']).resource |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
218 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
219 # 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
|
220 # 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
|
221 # 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
|
222 if recipient: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
223 room = self.plugin_0045.getRoom(0, 0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
224 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
|
225 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
226 for index in xrange(0, len(Const.PROFILE)): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
227 nick = self.plugin_0045.getNick(0, index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
228 if nick: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
229 if not recipient or nick == recipient: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
230 if call and (self.plugin.isPlayer(ROOM_JID_S, nick) or call[0] == 'radiocolStarted'): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
231 args = copy.deepcopy(call) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
232 args.append(Const.PROFILE[index]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
233 self.host.bridge.expectCall(*args) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
234 self.plugin.room_game_cmd(sent, Const.PROFILE[index]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
235 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
236 def _syncCb(self, sync_data, profile_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
237 """Synchronize one player when he joins a running game. |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
238 @param sync_data: result from self.plugin.getSyncData |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
239 @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
|
240 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
241 for nick in sync_data: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
242 expected = self._expectedMessage(ROOM_JID_S + '/' + nick, 'normal', sync_data[nick]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
243 sent = self.host.getSentMessageRaw(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
244 self.assertEqualXML(sent.toXml(), expected) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
245 for elt in sync_data[nick]: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
246 if elt.name == 'preload': |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
247 self.host.bridge.expectCall('radiocolPreload', ROOM_JID_S, 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
|
248 elif elt.name == 'play': |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
249 self.host.bridge.expectCall('radiocolPlay', ROOM_JID_S, elt['filename'], Const.PROFILE[profile_index]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
250 elif elt.name == 'no_upload': |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
251 self.host.bridge.expectCall('radiocolNoUpload', ROOM_JID_S, Const.PROFILE[profile_index]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
252 sync_data[nick] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
253 self._roomGameCmd(sent, []) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
254 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
255 def _joinRoom(self, room, nicks, player_index, sync=True): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
256 """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
|
257 @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
|
258 @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
|
259 @param player_index: profile index of the new player |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
260 @param sync: set to True to synchronize data |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
261 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
262 user_nick = self.plugin_0045.joinRoom(0, player_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
263 self.plugin.userJoinedTrigger(room, room.roster[user_nick], PROFILE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
264 if player_index not in PLAYERS_INDICES: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
265 # this user is actually not a player |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
266 self.assertFalse(self.plugin.isPlayer(ROOM_JID_S, user_nick)) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
267 to_jid, type_ = (ROOM_JID_S + '/' + user_nick, 'normal') |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
268 else: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
269 # this user is a player |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
270 self.assertTrue(self.plugin.isPlayer(ROOM_JID_S, user_nick)) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
271 nicks.append(user_nick) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
272 to_jid, type_ = (ROOM_JID_S, 'groupchat') |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
273 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
274 # 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
|
275 expected = self._expectedMessage(to_jid, type_, self._buildPlayers(nicks)) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
276 sent = self.host.getSentMessageRaw(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
277 self.assertEqualXML(sent.toXml(), expected) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
278 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
279 # 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
|
280 self._roomGameCmd(sent, ['radiocolStarted', ROOM_JID_S, REFEREE_FULL, nicks, [plugin.QUEUE_TO_START, plugin.QUEUE_LIMIT]]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
281 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
282 if sync: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
283 self._syncCb(self.plugin._getSyncData(ROOM_JID_S, [user_nick]), player_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
284 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
285 def _leaveRoom(self, room, nicks, player_index): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
286 """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
|
287 @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
|
288 @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
|
289 @param player_index: profile index of the new player |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
290 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
291 user_nick = self.plugin_0045.getNick(0, player_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
292 user = room.roster[user_nick] |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
293 self.plugin_0045.leaveRoom(0, player_index) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
294 self.plugin.userLeftTrigger(room, user, PROFILE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
295 nicks.remove(user_nick) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
296 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
297 def _uploadSong(self, song_index, profile_index, ext='ogg'): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
298 """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
|
299 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
|
300 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
|
301 - 'xxx' to test non existent files |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
302 @param song_index: index of the song |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
303 @param profile_index: index of the uploader's profile |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
304 @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
|
305 """ |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
306 song_index = song_index % len(self.songs) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
307 src_filename = self.songs[song_index] |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
308 if ext not in ('ogg', 'mp3'): |
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
309 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
|
310 dst_filepath = '/tmp/%s.%s' % (uuid.uuid1(), ext) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
311 expect_io_error = ext == 'xxx' |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
312 if not expect_io_error: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
313 shutil.copy(self.sound_dir + src_filename, dst_filepath) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
314 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
315 try: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
316 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
|
317 except IOError: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
318 self.assertTrue(expect_io_error) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
319 return |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
320 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
321 self.assertFalse(expect_io_error) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
322 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
|
323 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
324 def eb(failure): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
325 if not isinstance(failure, Failure): |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
326 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
|
327 self.assertEqual(failure.value.__class__, exceptions.DataError) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
328 |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
329 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
|
330 d.addCallbacks(cb, cb) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
331 else: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
332 d.addCallbacks(eb, eb) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
333 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
334 def test_init(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
335 self.init() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
336 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
|
337 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
|
338 self.assertEqual(self.plugin.join_mode, self.plugin.INVITED) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
339 self.assertEqual(self.plugin.ready_mode, self.plugin.FORCE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
340 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
341 def test_game(self): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
342 self.init() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
343 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
344 # create game |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
345 self.plugin.prepareRoom(OTHER_PLAYERS, ROOM_JID_S, PROFILE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
346 self.assertTrue(self.plugin._gameExists(ROOM_JID_S, True)) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
347 room = self.plugin_0045.getRoom(0, 0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
348 nicks = [self.plugin_0045.getNick(0, 0)] |
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 sent = self.host.getSentMessageRaw(0) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
351 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID_S, 'groupchat', self._buildPlayers(nicks))) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
352 self._roomGameCmd(sent, ['radiocolStarted', ROOM_JID_S, REFEREE_FULL, nicks, [plugin.QUEUE_TO_START, plugin.QUEUE_LIMIT]]) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
353 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
354 self._joinRoom(room, nicks, 1) # player joins |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
355 self._joinRoom(room, nicks, 4) # user not playing joins |
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 song_index = 0 |
904
95dabdb0c799
test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents:
861
diff
changeset
|
358 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
|
359 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
|
360 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
361 # 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
|
362 # 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
|
363 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
|
364 self._uploadSong(song_index, 1) |
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.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
|
367 self._playNextSongCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
368 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
|
369 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
370 self._joinRoom(room, nicks, 3) # new player joins |
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.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
|
373 self._playNextSongCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
374 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
|
375 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
376 self._leaveRoom(room, nicks, 1) # one player leaves |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
377 self._joinRoom(room, nicks, 1) # and join again |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
378 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
379 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
|
380 self._playNextSongCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
381 self.plugin.playNext(Const.MUC[0], PROFILE) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
382 self._playNextSongCb() |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
383 |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
384 for filename in self.playlist: |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
385 self.plugin.deleteFile('/tmp/' + filename) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
386 |
849
c5a8f602662b
plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents:
830
diff
changeset
|
387 return defer.succeed(None) |
c5a8f602662b
plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents:
830
diff
changeset
|
388 |
830
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
389 def tearDown(self, *args, **kwargs): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
390 """Clean the reactor""" |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
391 helpers.SatTestCase.tearDown(self, *args, **kwargs) |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
392 for delayed_call in reactor.getDelayedCalls(): |
d6bdf6022180
test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
393 delayed_call.cancel() |