test (plugin radiocol): fixes the test to also handle MP3 files
This commit is contained in:
parent
f3f5fa82a1
commit
ed403ebe9f
1 changed files with 39 additions and 20 deletions
|
|
@ -33,13 +33,19 @@ from twisted.internet import defer
|
|||
from twisted.python.failure import Failure
|
||||
from twisted.trial.unittest import SkipTest
|
||||
|
||||
from mutagen.oggvorbis import OggVorbis
|
||||
try:
|
||||
from mutagen.oggvorbis import OggVorbis
|
||||
from mutagen.mp3 import MP3
|
||||
from mutagen.easyid3 import EasyID3
|
||||
from mutagen.id3 import ID3NoHeaderError
|
||||
except ImportError:
|
||||
raise exceptions.MissingModule(u"Missing module Mutagen, please download/install from https://bitbucket.org/lazka/mutagen")
|
||||
|
||||
import uuid
|
||||
import os
|
||||
import copy
|
||||
import shutil
|
||||
from logging import WARNING
|
||||
|
||||
|
||||
ROOM_JID = JID(Const.MUC_STR[0])
|
||||
PROFILE = Const.PROFILE[0]
|
||||
|
|
@ -163,10 +169,25 @@ class RadiocolTest(helpers.SatTestCase):
|
|||
@param profile_index: the profile index of the uploader
|
||||
"""
|
||||
if isinstance(d, Failure):
|
||||
self.fail("OGG song could not be added!")
|
||||
self.fail("OGG or MP3 song could not be added!")
|
||||
|
||||
game_data = self.plugin.games[ROOM_JID]
|
||||
song = OggVorbis(filepath)
|
||||
|
||||
# this is copied from the plugin
|
||||
if filepath.lower().endswith('.mp3'):
|
||||
actual_song = MP3(filepath)
|
||||
try:
|
||||
song = EasyID3(filepath)
|
||||
|
||||
class Info(object):
|
||||
def __init__(self, length):
|
||||
self.length = length
|
||||
song.info = Info(actual_song.info.length)
|
||||
except ID3NoHeaderError:
|
||||
song = actual_song
|
||||
else:
|
||||
song = OggVorbis(filepath)
|
||||
|
||||
attrs = {'filename': os.path.basename(filepath),
|
||||
'title': song.get("title", ["Unknown"])[0],
|
||||
'artist': song.get("artist", ["Unknown"])[0],
|
||||
|
|
@ -289,23 +310,21 @@ class RadiocolTest(helpers.SatTestCase):
|
|||
self.plugin.userLeftTrigger(room, user, PROFILE)
|
||||
nicks.remove(user_nick)
|
||||
|
||||
def _uploadSong(self, song_index, profile_index, ext='ogg'):
|
||||
"""Upload the song of index song_index (modulo self.songs size)
|
||||
from the profile of index profile_index. All the songs in self.songs
|
||||
are OGG, but you can set ext to a value different than 'ogg' or 'mp3':
|
||||
- 'xxx' to test non existent files
|
||||
@param song_index: index of the song
|
||||
def _uploadSong(self, song_index, profile_index):
|
||||
"""Upload the song of index song_index (modulo self.songs size) from the profile of index profile_index.
|
||||
|
||||
@param song_index: index of the song or None to test with non existing file
|
||||
@param profile_index: index of the uploader's profile
|
||||
@param new_ext: change the extension from "ogg" to this value
|
||||
"""
|
||||
song_index = song_index % len(self.songs)
|
||||
src_filename = self.songs[song_index]
|
||||
if ext not in ('ogg', 'mp3'):
|
||||
src_filename = os.path.splitext(src_filename)[0] + '.' + ext
|
||||
dst_filepath = '/tmp/%s.%s' % (uuid.uuid1(), ext)
|
||||
expect_io_error = ext == 'xxx'
|
||||
if not expect_io_error:
|
||||
if song_index is None:
|
||||
dst_filepath = unicode(uuid.uuid1())
|
||||
expect_io_error = True
|
||||
else:
|
||||
song_index = song_index % len(self.songs)
|
||||
src_filename = self.songs[song_index]
|
||||
dst_filepath = '/tmp/%s%s' % (uuid.uuid1(), os.path.splitext(src_filename)[1])
|
||||
shutil.copy(self.sound_dir + src_filename, dst_filepath)
|
||||
expect_io_error = False
|
||||
|
||||
try:
|
||||
d = self.plugin.radiocolSongAdded(REFEREE_FULL, dst_filepath, Const.PROFILE[profile_index])
|
||||
|
|
@ -321,7 +340,7 @@ class RadiocolTest(helpers.SatTestCase):
|
|||
self.fail("Adding a song which is not OGG nor MP3 should fail!")
|
||||
self.assertEqual(failure.value.__class__, exceptions.DataError)
|
||||
|
||||
if self.songs[song_index].endswith('.ogg') or self.songs[song_index].endswith('.mp3'):
|
||||
if src_filename.endswith('.ogg') or src_filename.endswith('.mp3'):
|
||||
d.addCallbacks(cb, cb)
|
||||
else:
|
||||
d.addCallbacks(eb, eb)
|
||||
|
|
@ -351,7 +370,7 @@ class RadiocolTest(helpers.SatTestCase):
|
|||
|
||||
song_index = 0
|
||||
self._uploadSong(song_index, 0) # ogg or mp3 file should exist in sat_media/test/song
|
||||
self._uploadSong(song_index, 0, 'xxx') # file should not exist
|
||||
self._uploadSong(None, 0) # non existing file
|
||||
|
||||
# another songs are added by Const.JID[1] until the radio starts + 1 to fill the queue
|
||||
# when the first song starts + 1 to be rejected because the queue is full
|
||||
|
|
|
|||
Loading…
Reference in a new issue