annotate src/test/test_plugin_misc_radiocol.py @ 2109:85f3e12e984d

core (memory/cache): file caching handling, first draft: instead of having file caching handled individually by plugins, a generic module has been added in memory. - Cache can be global or associated to a profile. In the later case, client.cache can be used. - Cache are managed with unique ids (which can be any unique unicode, hash uuid, or something else). - To know if a file is in cache, getFilePath is used: if the file is in cache, its absolute path is returned, else None is returned. - To cache a file, cacheData is used with at list the source of cache (most of time plugin import name), and unique id. The method return file opened in binary writing mode (so cacheData can - and should - be used with "with" statement). - 2 files will be created: a metadata file (named after the unique id), and the actual file. - each file has a end of life time, after it, the cache is invalidated and the file must be requested again.
author Goffi <goffi@goffi.org>
date Thu, 05 Jan 2017 20:23:38 +0100
parents 2daf7b4c6756
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1934
2daf7b4c6756 use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents: 1915
diff changeset
1 #!/usr/bin/env python2
830
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
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
24 from sat.test import helpers, helpers_plugins
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
25 from sat.plugins import plugin_misc_radiocol as plugin
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
26 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
27 from constants import Const
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
28
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
29 from twisted.words.protocols.jabber.jid import JID
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
30 from twisted.words.xish import domish
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
31 from twisted.internet import reactor
849
c5a8f602662b plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents: 830
diff changeset
32 from twisted.internet import defer
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
33 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
34 from twisted.trial.unittest import SkipTest
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
35
1915
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
36 try:
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
37 from mutagen.oggvorbis import OggVorbis
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
38 from mutagen.mp3 import MP3
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
39 from mutagen.easyid3 import EasyID3
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
40 from mutagen.id3 import ID3NoHeaderError
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
41 except ImportError:
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
42 raise exceptions.MissingModule(u"Missing module Mutagen, please download/install from https://bitbucket.org/lazka/mutagen")
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
43
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
44 import uuid
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
45 import os
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
46 import copy
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
47 import shutil
1915
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
48
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
49
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
50 ROOM_JID = JID(Const.MUC_STR[0])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
51 PROFILE = Const.PROFILE[0]
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
52 REFEREE_FULL = JID(ROOM_JID.userhost() + '/' + Const.JID[0].user)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
53 PLAYERS_INDICES = [0, 1, 3] # referee included
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
54 OTHER_PROFILES = [Const.PROFILE[1], Const.PROFILE[3]]
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
55 OTHER_PLAYERS = [Const.JID[1], Const.JID[3]]
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
56
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 class RadiocolTest(helpers.SatTestCase):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
59
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
60 def setUp(self):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
61 self.host = helpers.FakeSAT()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
62
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
63 def reinit(self):
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
64 self.host.reinit()
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
65 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
66 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
67 self.plugin.testing = True
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
68 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
69 self.plugin_0249 = self.host.plugins['XEP-0249'] = helpers_plugins.FakeXEP_0249(self.host)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
70 for profile in Const.PROFILE:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
71 self.host.getClient(profile) # init self.host.profiles[profile]
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
72 self.songs = []
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
73 self.playlist = []
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
74 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
75 try:
4d091738275c test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents: 849
diff changeset
76 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
77 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
78 self.songs.append(filename)
4d091738275c test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents: 849
diff changeset
79 except OSError:
4d091738275c test: skip radiocol tests if the sound samples are not found
souliane <souliane@mailoo.org>
parents: 849
diff changeset
80 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
81
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
82 def _buildPlayers(self, players=[]):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
83 """@return: the "started" content built with the given players"""
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
84 content = "<started"
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
85 if not players:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
86 content += "/>"
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
87 else:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
88 content += ">"
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
89 for i in xrange(0, len(players)):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
90 content += "<player index='%s'>%s</player>" % (i, players[i])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
91 content += "</started>"
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
92 return content
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
93
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
94 def _expectedMessage(self, to_jid, type_, content):
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
95 """
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
96 @param to_jid: recipient full jid
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
97 @param type_: message type ('normal' or 'groupchat')
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
98 @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
99 @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
100 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
101 if isinstance(content, list):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
102 new_content = copy.deepcopy(content)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
103 for element in new_content:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
104 if not element.hasAttribute('xmlns'):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
105 element['xmlns'] = ''
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
106 content = "".join([element.toXml() for element in new_content])
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
107 return "<message to='%s' type='%s'><%s xmlns='%s'>%s</%s></message>" % (to_jid.full(), type_, plugin.RADIOC_TAG, plugin.NC_RADIOCOL, content, plugin.RADIOC_TAG)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
108
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
109 def _rejectSongCb(self, profile_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
110 """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
111 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
112 @param profile_index: uploader's profile"""
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
113 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
114 content = "<song_rejected xmlns='' reason='Too many songs in queue'/>"
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
115 self.assertEqualXML(sent.toXml(), self._expectedMessage(JID(ROOM_JID.userhost() + '/' + self.plugin_0045.getNick(0, profile_index), 'normal', content)))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
116 self._roomGameCmd(sent, ['radiocolSongRejected', ROOM_JID.full(), 'Too many songs in queue'])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
117
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
118 def _noUploadCb(self):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
119 """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
120 and process the command with the profiles of each room users"""
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
121 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
122 content = "<no_upload xmlns=''/>"
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
123 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
124 self._roomGameCmd(sent, ['radiocolNoUpload', ROOM_JID.full()])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
125
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
126 def _uploadOkCb(self):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
127 """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
128 and process the command with the profiles of each room users"""
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
129 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
130 content = "<upload_ok xmlns=''/>"
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
131 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
132 self._roomGameCmd(sent, ['radiocolUploadOk', ROOM_JID.full()])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
133
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
134 def _preloadCb(self, attrs, profile_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
135 """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
136 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
137 @param attrs: information dict about the song
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
138 @param profile_index: profile index of the uploader
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
139 """
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
140 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
141 attrs['sender'] = self.plugin_0045.getNick(0, profile_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
142 radiocol_elt = domish.generateElementsNamed(sent.elements(), 'radiocol').next()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
143 preload_elt = domish.generateElementsNamed(radiocol_elt.elements(), 'preload').next()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
144 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
145 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
146 if sent.hasAttribute('from'):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
147 del sent['from']
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
148 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
149 self._roomGameCmd(sent, ['radiocolPreload', ROOM_JID.full(), attrs['timestamp'], attrs['filename'], attrs['title'], attrs['artist'], attrs['album'], attrs['sender']])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
150
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
151 def _playNextSongCb(self):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
152 """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
153 and process the command with the profiles of each room users"""
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
154 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
155 filename = self.playlist.pop(0)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
156 content = "<play xmlns='' filename='%s' />" % filename
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
157 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', content))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
158 self._roomGameCmd(sent, ['radiocolPlay', ROOM_JID.full(), filename])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
159
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
160 game_data = self.plugin.games[ROOM_JID]
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
161 if len(game_data['queue']) == plugin.QUEUE_LIMIT - 1:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
162 self._uploadOkCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
163
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
164 def _addSongCb(self, d, filepath, profile_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
165 """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
166 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
167 @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
168 @param filepath: full path to the sound file
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
169 @param profile_index: the profile index of the uploader
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
170 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
171 if isinstance(d, Failure):
1915
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
172 self.fail("OGG or MP3 song could not be added!")
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
173
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
174 game_data = self.plugin.games[ROOM_JID]
1915
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
175
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
176 # this is copied from the plugin
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
177 if filepath.lower().endswith('.mp3'):
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
178 actual_song = MP3(filepath)
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
179 try:
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
180 song = EasyID3(filepath)
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
181
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
182 class Info(object):
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
183 def __init__(self, length):
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
184 self.length = length
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
185 song.info = Info(actual_song.info.length)
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
186 except ID3NoHeaderError:
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
187 song = actual_song
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
188 else:
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
189 song = OggVorbis(filepath)
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
190
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
191 attrs = {'filename': os.path.basename(filepath),
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
192 'title': song.get("title", ["Unknown"])[0],
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
193 'artist': song.get("artist", ["Unknown"])[0],
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
194 'album': song.get("album", ["Unknown"])[0],
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
195 'length': str(song.info.length)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
196 }
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
197 self.assertEqual(game_data['to_delete'][attrs['filename']], filepath)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
198
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
199 content = "<song_added xmlns='' %s/>" % " ".join(["%s='%s'" % (attr, attrs[attr]) for attr in attrs])
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
200 sent = self.host.getSentMessage(profile_index)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
201 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
202
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
203 reject_song = len(game_data['queue']) >= plugin.QUEUE_LIMIT
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
204 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
205 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
206
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
207 self._roomGameCmd(sent, profile_index) # queue unchanged or +1
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
208 if reject_song:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
209 self._rejectSongCb(profile_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
210 return
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
211 if no_upload:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
212 self._noUploadCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
213 self._preloadCb(attrs, profile_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
214 self.playlist.append(attrs['filename'])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
215 if play_next:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
216 self._playNextSongCb() # queue -1
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
217
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
218 def _roomGameCmd(self, sent, from_index=0, call=[]):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
219 """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
220 _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
221 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
222 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
223 @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
224 @param from_index: index of the message sender
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
225 @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
226 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
227 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
228 if isinstance(from_index, list):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
229 call = from_index
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
230 from_index = 0
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
231
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
232 sent['from'] = ROOM_JID.full() + '/' + self.plugin_0045.getNick(0, from_index)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
233 recipient = JID(sent['to']).resource
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
234
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
235 # 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
236 # 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
237 # 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
238 if recipient:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
239 room = self.plugin_0045.getRoom(0, 0)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
240 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
241
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
242 for index in xrange(0, len(Const.PROFILE)):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
243 nick = self.plugin_0045.getNick(0, index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
244 if nick:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
245 if not recipient or nick == recipient:
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
246 if call and (self.plugin.isPlayer(ROOM_JID, nick) or call[0] == 'radiocolStarted'):
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
247 args = copy.deepcopy(call)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
248 args.append(Const.PROFILE[index])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
249 self.host.bridge.expectCall(*args)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
250 self.plugin.room_game_cmd(sent, Const.PROFILE[index])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
251
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
252 def _syncCb(self, sync_data, profile_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
253 """Synchronize one player when he joins a running game.
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
254 @param sync_data: result from self.plugin.getSyncData
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
255 @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
256 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
257 for nick in sync_data:
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
258 expected = self._expectedMessage(JID(ROOM_JID.userhost() + '/' + nick), 'normal', sync_data[nick])
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
259 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
260 self.assertEqualXML(sent.toXml(), expected)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
261 for elt in sync_data[nick]:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
262 if elt.name == 'preload':
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
263 self.host.bridge.expectCall('radiocolPreload', ROOM_JID.full(), elt['timestamp'], elt['filename'], elt['title'], elt['artist'], elt['album'], elt['sender'], Const.PROFILE[profile_index])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
264 elif elt.name == 'play':
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
265 self.host.bridge.expectCall('radiocolPlay', ROOM_JID.full(), elt['filename'], Const.PROFILE[profile_index])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
266 elif elt.name == 'no_upload':
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
267 self.host.bridge.expectCall('radiocolNoUpload', ROOM_JID.full(), Const.PROFILE[profile_index])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
268 sync_data[nick]
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
269 self._roomGameCmd(sent, [])
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
270
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
271 def _joinRoom(self, room, nicks, player_index, sync=True):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
272 """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
273 @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
274 @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
275 @param player_index: profile index of the new player
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
276 @param sync: set to True to synchronize data
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
277 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
278 user_nick = self.plugin_0045.joinRoom(0, player_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
279 self.plugin.userJoinedTrigger(room, room.roster[user_nick], PROFILE)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
280 if player_index not in PLAYERS_INDICES:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
281 # this user is actually not a player
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
282 self.assertFalse(self.plugin.isPlayer(ROOM_JID, user_nick))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
283 to_jid, type_ = (JID(ROOM_JID.userhost() + '/' + user_nick), 'normal')
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
284 else:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
285 # this user is a player
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
286 self.assertTrue(self.plugin.isPlayer(ROOM_JID, user_nick))
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
287 nicks.append(user_nick)
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
288 to_jid, type_ = (ROOM_JID, 'groupchat')
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
289
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
290 # 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
291 expected = self._expectedMessage(to_jid, type_, self._buildPlayers(nicks))
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
292 sent = self.host.getSentMessage(0)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
293 self.assertEqualXML(sent.toXml(), expected)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
294
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
295 # Process the command with the profiles of each room users
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
296 self._roomGameCmd(sent, ['radiocolStarted', ROOM_JID.full(), REFEREE_FULL.full(), nicks, [plugin.QUEUE_TO_START, plugin.QUEUE_LIMIT]])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
297
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
298 if sync:
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
299 self._syncCb(self.plugin._getSyncData(ROOM_JID, [user_nick]), player_index)
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
300
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
301 def _leaveRoom(self, room, nicks, player_index):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
302 """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
303 @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
304 @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
305 @param player_index: profile index of the new player
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
306 """
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
307 user_nick = self.plugin_0045.getNick(0, player_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
308 user = room.roster[user_nick]
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
309 self.plugin_0045.leaveRoom(0, player_index)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
310 self.plugin.userLeftTrigger(room, user, PROFILE)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
311 nicks.remove(user_nick)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
312
1915
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
313 def _uploadSong(self, song_index, profile_index):
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
314 """Upload the song of index song_index (modulo self.songs size) from the profile of index profile_index.
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
315
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
316 @param song_index: index of the song or None to test with non existing file
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
317 @param profile_index: index of the uploader's profile
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
318 """
1915
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
319 if song_index is None:
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
320 dst_filepath = unicode(uuid.uuid1())
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
321 expect_io_error = True
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
322 else:
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
323 song_index = song_index % len(self.songs)
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
324 src_filename = self.songs[song_index]
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
325 dst_filepath = '/tmp/%s%s' % (uuid.uuid1(), os.path.splitext(src_filename)[1])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
326 shutil.copy(self.sound_dir + src_filename, dst_filepath)
1915
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
327 expect_io_error = False
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
328
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
329 try:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
330 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
331 except IOError:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
332 self.assertTrue(expect_io_error)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
333 return
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
334
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
335 self.assertFalse(expect_io_error)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
336 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
337
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
338 def eb(failure):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
339 if not isinstance(failure, Failure):
904
95dabdb0c799 test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents: 861
diff changeset
340 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
341 self.assertEqual(failure.value.__class__, exceptions.DataError)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
342
1915
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
343 if src_filename.endswith('.ogg') or src_filename.endswith('.mp3'):
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
344 d.addCallbacks(cb, cb)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
345 else:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
346 d.addCallbacks(eb, eb)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
347
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
348 def test_init(self):
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
349 self.reinit()
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
350 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
351 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
352 self.assertEqual(self.plugin.join_mode, self.plugin.INVITED)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
353 self.assertEqual(self.plugin.ready_mode, self.plugin.FORCE)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
354
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
355 def test_game(self):
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
356 self.reinit()
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
357
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
358 # create game
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
359 self.plugin.prepareRoom(OTHER_PLAYERS, ROOM_JID, PROFILE)
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
360 self.assertTrue(self.plugin._gameExists(ROOM_JID, True))
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
361 room = self.plugin_0045.getRoom(0, 0)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
362 nicks = [self.plugin_0045.getNick(0, 0)]
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
363
1271
2308f8405ffb test: refactoring:
souliane <souliane@mailoo.org>
parents: 997
diff changeset
364 sent = self.host.getSentMessage(0)
1412
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
365 self.assertEqualXML(sent.toXml(), self._expectedMessage(ROOM_JID, 'groupchat', self._buildPlayers(nicks)))
979210da778a test: fix the tests
souliane <souliane@mailoo.org>
parents: 1271
diff changeset
366 self._roomGameCmd(sent, ['radiocolStarted', ROOM_JID.full(), REFEREE_FULL.full(), nicks, [plugin.QUEUE_TO_START, plugin.QUEUE_LIMIT]])
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
367
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
368 self._joinRoom(room, nicks, 1) # player joins
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
369 self._joinRoom(room, nicks, 4) # user not playing joins
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
370
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
371 song_index = 0
904
95dabdb0c799 test: update radiocol test regarding the last changes
souliane <souliane@mailoo.org>
parents: 861
diff changeset
372 self._uploadSong(song_index, 0) # ogg or mp3 file should exist in sat_media/test/song
1915
fd959c8f64b6 test (plugin radiocol): fixes the test to also handle MP3 files
souliane <souliane@mailoo.org>
parents: 1909
diff changeset
373 self._uploadSong(None, 0) # non existing file
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
374
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
375 # 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
376 # 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
377 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
378 self._uploadSong(song_index, 1)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
379
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
380 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
381 self._playNextSongCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
382 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
383
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
384 self._joinRoom(room, nicks, 3) # new player joins
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
385
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
386 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
387 self._playNextSongCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
388 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
389
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
390 self._leaveRoom(room, nicks, 1) # one player leaves
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
391 self._joinRoom(room, nicks, 1) # and join again
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
392
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
393 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
394 self._playNextSongCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
395 self.plugin.playNext(Const.MUC[0], PROFILE)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
396 self._playNextSongCb()
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
397
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
398 for filename in self.playlist:
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
399 self.plugin.deleteFile('/tmp/' + filename)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
400
849
c5a8f602662b plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents: 830
diff changeset
401 return defer.succeed(None)
c5a8f602662b plugin room_game, radiocol: RoomGame.send returns a Deferred.
souliane <souliane@mailoo.org>
parents: 830
diff changeset
402
830
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
403 def tearDown(self, *args, **kwargs):
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
404 """Clean the reactor"""
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
405 helpers.SatTestCase.tearDown(self, *args, **kwargs)
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
406 for delayed_call in reactor.getDelayedCalls():
d6bdf6022180 test radiocol: added a full scenario test
souliane <souliane@mailoo.org>
parents:
diff changeset
407 delayed_call.cancel()