コード例 #1
0
ファイル: test_hls.py プロジェクト: tank0226/streamlink
    def test_hls_encrypted_aes128_incorrect_block_length(self, mock_log):
        aesKey, aesIv, key = self.gen_key()

        # noinspection PyTypeChecker
        thread, segments = self.subject([
            Playlist(0, [key] + [
                SegmentEnc(0, aesKey, aesIv, append=b"?" * 1),
                SegmentEnc(
                    1, aesKey, aesIv, append=b"?" * (AES.block_size - 1))
            ],
                     end=True)
        ])

        self.await_write(2)
        data = self.await_read(read_all=True)
        expected = self.content(segments, prop="content_plain")
        self.assertEqual(data, expected, "Removes garbage data from segments")
        self.assertIn(call("Cutting off 1 bytes of garbage before decrypting"),
                      mock_log.debug.mock_calls)
        self.assertIn(
            call("Cutting off 15 bytes of garbage before decrypting"),
            mock_log.debug.mock_calls)
コード例 #2
0
    def test_filtered_closed(self):
        thread, reader, writer, segments = self.subject(
            [Playlist(
                0, [SegmentFiltered(0), SegmentFiltered(1)])])

        # mock the reader thread's filter_event.wait method, so that the main thread can wait on its call
        filter_event_wait_called = Event()
        orig_wait = reader.filter_event.wait

        def mocked_wait(*args, **kwargs):
            filter_event_wait_called.set()
            return orig_wait(*args, **kwargs)

        mock = patch.object(reader.filter_event,
                            "wait",
                            side_effect=mocked_wait)
        mock.start()

        # write first filtered segment and trigger the filter_event's lock
        self.assertTrue(reader.filter_event.is_set(),
                        "Doesn't let the reader wait if not filtering")
        self.await_write()
        self.assertFalse(reader.filter_event.is_set(),
                         "Lets the reader wait if filtering")

        # make reader read (no data available yet)
        thread.read_wait.set()
        # before calling reader.close(), wait until reader thread's filter_event.wait was called
        filter_event_wait_called.wait()

        # close stream while reader is waiting for filtering to end
        thread.reader.close()
        thread.read_done.wait()
        thread.read_done.clear()
        self.assertEqual(thread.data, [b""], "Stops reading on stream close")
        self.assertFalse(thread.error, "Is not a read timeout on stream close")

        mock.stop()
コード例 #3
0
 def test_hls_playlist_reload_time_no_data(self):
     time = self.subject([Playlist(0, [], end=True, targetduration=0)],
                         reload_time="default")
     self.assertEqual(
         time, 15,
         "sets reload time to 15 seconds when no data is available")
コード例 #4
0
 def test_hls_playlist_reload_time_number(self):
     time = self.subject(
         [Playlist(0, self.segments, end=True, targetduration=6)],
         reload_time="4")
     self.assertEqual(time, 4, "number values override the reload time")
コード例 #5
0
ファイル: test_hls.py プロジェクト: objcguy/streamlink
 def test_hls_playlist_reload_time_no_target_duration(self):
     time = self.subject([Playlist(0, self.segments, end=True, targetduration=0)], reload_time="default")
     self.assertEqual(time, 8, "uses the live-edge sum if the playlist is missing the targetduration data")
コード例 #6
0
ファイル: test_hls.py プロジェクト: objcguy/streamlink
 def test_hls_playlist_reload_time_number_invalid(self):
     time = self.subject([Playlist(0, self.segments, end=True, targetduration=6)], reload_time="0")
     self.assertEqual(time, 6, "invalid number values set the reload time to the playlist's targetduration")
コード例 #7
0
ファイル: test_hls.py プロジェクト: objcguy/streamlink
 def test_hls_playlist_reload_time_live_edge(self):
     time = self.subject([Playlist(0, self.segments, end=True, targetduration=6)], reload_time="live-edge")
     self.assertEqual(time, 8, "live-edge sets the reload time to the sum of the number of segments of the live-edge")
コード例 #8
0
ファイル: test_hls.py プロジェクト: objcguy/streamlink
 def test_hls_playlist_reload_time_segment(self):
     time = self.subject([Playlist(0, self.segments, end=True, targetduration=6)], reload_time="segment")
     self.assertEqual(time, 3, "segment sets the reload time to the playlist's last segment")
コード例 #9
0
ファイル: test_hls.py プロジェクト: objcguy/streamlink
 def test_hls_playlist_reload_time_default(self):
     time = self.subject([Playlist(0, self.segments, end=True, targetduration=6)], reload_time="default")
     self.assertEqual(time, 6, "default sets the reload time to the playlist's target duration")
コード例 #10
0
 def test_hls_playlist_reload_time_live_edge_no_segments_no_targetduration(self):
     time = self.subject([Playlist(0, [], end=True, targetduration=0)], reload_time="live-edge")
     self.assertEqual(time, 6, "sets reload time to 6 seconds when no segments and no targetduration are available")
コード例 #11
0
 def test_hls_playlist_reload_time_live_edge_no_segments(self):
     time = self.subject([Playlist(0, [], end=True, targetduration=4)], reload_time="live-edge")
     self.assertEqual(time, 4, "live-edge sets the reload time to the targetduration if no segments are available")