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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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()