def test_static(self, sleep): reader = MagicMock() worker = DASHStreamWorker(reader) reader.representation_id = 1 representation = Mock(id=1, mimeType="video/mp4", height=720) segments = [Mock(url="init_segment"), Mock(url="first_segment"), Mock(url="second_segment")] representation.segments.return_value = [segments[0]] worker.mpd = Mock(dynamic=False, publishTime=1, periods=[ Mock(adaptationSets=[ Mock(contentProtection=None, representations=[ representation ]) ]) ]) worker.mpd.type = "static" worker.mpd.minimumUpdatePeriod.total_seconds.return_value = 0 worker.mpd.periods[0].duration.total_seconds.return_value = 0 representation.segments.return_value = segments self.assertSequenceEqual(list(worker.iter_segments()), segments) representation.segments.assert_called_with(init=True)
def test_static_refresh_wait(self, sleep, time): """ Verify the fix for https://github.com/streamlink/streamlink/issues/2873 """ time.return_value = 1 reader = MagicMock() worker = DASHStreamWorker(reader) reader.representation_id = 1 reader.mime_type = "video/mp4" representation = Mock(id=1, mimeType="video/mp4", height=720) segments = [ Mock(url="init_segment"), Mock(url="first_segment"), Mock(url="second_segment") ] representation.segments.return_value = [segments[0]] worker.mpd = Mock(dynamic=False, publishTime=1, periods=[ Mock(adaptationSets=[ Mock(contentProtection=None, representations=[representation]) ]) ]) worker.mpd.type = "static" for duration in (0, 204.32): worker.mpd.minimumUpdatePeriod.total_seconds.return_value = 0 worker.mpd.periods[ 0].duration.total_seconds.return_value = duration representation.segments.return_value = segments self.assertSequenceEqual(list(worker.iter_segments()), segments) representation.segments.assert_called_with(init=True) sleep.assert_called_with(5)
def test_dynamic_reload(self, mpdClass, sleep): reader = MagicMock() worker = DASHStreamWorker(reader) reader.representation_id = 1 representation = Mock(id=1, mimeType="video/mp4", height=720) segments = [Mock(url="init_segment"), Mock(url="first_segment"), Mock(url="second_segment")] representation.segments.return_value = [segments[0]] mpdClass.return_value = worker.mpd = Mock(dynamic=True, publishTime=1, periods=[ Mock(adaptationSets=[ Mock(contentProtection=None, representations=[ representation ]) ]) ]) worker.mpd.type = "dynamic" worker.mpd.minimumUpdatePeriod.total_seconds.return_value = 0 worker.mpd.periods[0].duration.total_seconds.return_value = 0 segment_iter = worker.iter_segments() representation.segments.return_value = segments[:1] self.assertEqual(next(segment_iter), segments[0]) representation.segments.assert_called_with(init=True) representation.segments.return_value = segments[1:] self.assertSequenceEqual([next(segment_iter), next(segment_iter)], segments[1:]) representation.segments.assert_called_with(init=False)
def test_static(self, sleep): reader = MagicMock() worker = DASHStreamWorker(reader) reader.representation_id = 1 reader.mime_type = "video/mp4" representation = Mock(id=1, mimeType="video/mp4", height=720) segments = [Mock(url="init_segment"), Mock(url="first_segment"), Mock(url="second_segment")] representation.segments.return_value = [segments[0]] worker.mpd = Mock(dynamic=False, publishTime=1, periods=[ Mock(adaptationSets=[ Mock(contentProtection=None, representations=[ representation ]) ]) ]) worker.mpd.type = "static" worker.mpd.minimumUpdatePeriod.total_seconds.return_value = 0 worker.mpd.periods[0].duration.total_seconds.return_value = 0 representation.segments.return_value = segments self.assertSequenceEqual(list(worker.iter_segments()), segments) representation.segments.assert_called_with(init=True)
def _mock_console_input(self, isatty=True): with patch('streamlink_cli.console.sys.stdin.isatty', return_value=isatty): mock_console = MagicMock() mock_console.ask.return_value = "username" mock_console.askpass.return_value = "password" yield ConsoleUserInputRequester(mock_console)
def test_arguments(self): from streamlink_cli.main import setup_plugin_args session = Streamlink() parser = MagicMock() plugin_parser = MagicMock() parser.add_argument_group = MagicMock(return_value=plugin_parser) session.plugins = { 'tvplayer': TVPlayer } setup_plugin_args(session, parser) self.assertSequenceEqual(plugin_parser.add_argument.mock_calls, [call('--tvplayer-email', metavar="EMAIL", help=ANY), call('--tvplayer-password', metavar="PASSWORD", help=ANY)], )
def test_arguments(self): from streamlink_cli.main import setup_plugin_args session = Streamlink() parser = MagicMock() plugin_parser = MagicMock() parser.add_argument_group = MagicMock(return_value=plugin_parser) session.plugins = {'tvplayer': TVPlayer} setup_plugin_args(session, parser) self.assertSequenceEqual( plugin_parser.add_argument.mock_calls, [ call('--tvplayer-email', metavar="EMAIL", help=ANY), call('--tvplayer-password', metavar="PASSWORD", help=ANY) ], )
def setUp(self): self.session = MagicMock() self.test_url = "http://test.bar/foo.mpd" self.session.http.get.return_value = Mock(url=self.test_url)
class _TwitchHLSStreamWriter(EventedHLSStreamWriter, TwitchHLSStreamWriter): pass class _TwitchHLSStreamReader(TwitchHLSStreamReader): __writer__ = _TwitchHLSStreamWriter class _TwitchHLSStream(TwitchHLSStream): __reader__ = _TwitchHLSStreamReader @patch("streamlink.stream.hls.HLSStreamWorker.wait", MagicMock(return_value=True)) class TestTwitchHLSStream(TestMixinStreamHLS, unittest.TestCase): __stream__ = _TwitchHLSStream def get_session(self, options=None, disable_ads=False, low_latency=False): session = super(TestTwitchHLSStream, self).get_session(options) session.set_option("hls-live-edge", 4) session.set_plugin_option("twitch", "disable-ads", disable_ads) session.set_plugin_option("twitch", "low-latency", low_latency) return session def test_hls_disable_ads_daterange_unknown(self): daterange = TagDateRangeAd(start=DATETIME_BASE, duration=1, id="foo",
def setUp(self): self.session = Streamlink() self.session.http = MagicMock(HTTPSession) self.session.http.headers = {}
'https://clips.twitch.tv/ObservantBenevolentCarabeefPhilosoraptor', 'https://www.twitch.tv/twitch/video/292713971', 'https://www.twitch.tv/twitch/v/292713971', ] for url in should_match: self.assertTrue(Twitch.can_handle_url(url)) def test_can_handle_url_negative(self): should_not_match = [ 'https://www.twitch.tv', ] for url in should_not_match: self.assertFalse(Twitch.can_handle_url(url)) @patch("streamlink.stream.hls.HLSStreamWorker.wait", MagicMock(return_value=True)) class TestTwitchHLSStream(TestMixinStreamHLS, unittest.TestCase): __stream__ = _TwitchHLSStream def get_session(self, options=None, disable_ads=False, low_latency=False): session = super(TestTwitchHLSStream, self).get_session(options) session.set_option("hls-live-edge", 4) session.set_plugin_option("twitch", "disable-ads", disable_ads) session.set_plugin_option("twitch", "low-latency", low_latency) return session def test_hls_disable_ads_daterange_unknown(self): daterange = TagDateRangeAd(start=DATETIME_BASE, duration=1, id="foo", classname="bar", custom=None) thread, segments = self.subject([ Playlist(0, [daterange, Segment(0), Segment(1)], end=True)