# HG changeset patch # User souliane # Date 1458293138 -3600 # Node ID fd959c8f64b68984f22939acef6d56009de8dac7 # Parent 37db78010752f9934b39a81254e9d312f606e945 test (plugin radiocol): fixes the test to also handle MP3 files diff -r 37db78010752 -r fd959c8f64b6 src/test/test_plugin_misc_radiocol.py --- a/src/test/test_plugin_misc_radiocol.py Fri Mar 18 09:14:00 2016 +0100 +++ b/src/test/test_plugin_misc_radiocol.py Fri Mar 18 10:25:38 2016 +0100 @@ -33,13 +33,19 @@ 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 @@ @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 @@ 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 @@ 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 @@ 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