Stop playback on ffmpeg HTTP 404

This commit is contained in:
Storm Dragon
2026-06-14 01:45:18 -04:00
parent c310a1c318
commit e2df8972e7
2 changed files with 129 additions and 9 deletions
+83
View File
@@ -0,0 +1,83 @@
import io
import logging
import unittest
from unittest import mock
import bragi
import constants
import variables as var
class FakeCache:
def __init__(self):
self.freed_id = None
def free_and_delete(self, item_id):
self.freed_id = item_id
class FakeItem:
id = "track-id"
def format_debug_string(self):
return "fake item"
def format_title(self):
return "Fake Item"
class FakePlaylist:
def __init__(self, item=None):
self.item = item
self.removed_id = None
def current_item(self):
return self.item
def remove_by_id(self, item_id):
self.removed_id = item_id
self.item = None
class FfmpegHttpErrorTests(unittest.TestCase):
def setUp(self):
constants.load_lang("en_US")
def make_bot(self):
bot = bragi.MumbleBot.__new__(bragi.MumbleBot)
bot.thread_stderr = None
bot.last_ffmpeg_err = ""
bot.ffmpeg_fatal_error = ""
bot.redirect_ffmpeg_log = False
bot.log = logging.getLogger("test")
return bot
def test_ffmpeg_http_404_stderr_is_fatal(self):
bot = self.make_bot()
bot.thread_stderr = io.StringIO("[http @ 0x123] HTTP error 404 Not Found\n")
bot._read_ffmpeg_stderr()
self.assertEqual(bot.ffmpeg_fatal_error, "[http @ 0x123] HTTP error 404 Not Found")
def test_ffmpeg_fatal_error_removes_current_item(self):
item = FakeItem()
var.playlist = FakePlaylist(item)
var.cache = FakeCache()
bot = self.make_bot()
bot.ffmpeg_fatal_error = "[http @ 0x123] HTTP error 404 Not Found"
bot._cleanup_ffmpeg_process = mock.Mock()
bot.send_channel_msg = mock.Mock()
bot._fail_current_ffmpeg_item()
bot._cleanup_ffmpeg_process.assert_called_once_with()
self.assertEqual(var.playlist.removed_id, item.id)
self.assertEqual(var.cache.freed_id, item.id)
bot.send_channel_msg.assert_called_once()
self.assertEqual(bot.ffmpeg_fatal_error, "")
if __name__ == "__main__":
unittest.main()