5
5
from streamlink .plugins .twitch import Twitch , TwitchHLSStream
6
6
7
7
import requests_mock
8
+ from tests .mock import call , patch
8
9
9
10
from streamlink .session import Streamlink
10
11
from tests .resources import text
@@ -78,61 +79,95 @@ def start_streamlink(self, kwargs=None):
78
79
log .info ("End of streamlink execution" )
79
80
return data
80
81
82
+ def mock (self , mocked , method , url , * args , ** kwargs ):
83
+ mocked [url ] = method (url , * args , ** kwargs )
84
+
81
85
def get_result (self , streams , playlists ):
86
+ mocked = {}
82
87
with requests_mock .Mocker () as mock :
83
- mock .get ( "http://mocked/path/master.m3u8" , text = self .getMasterPlaylist ())
84
- mock .get ( "http://mocked/path/playlist.m3u8" , [{"text" : playlist } for playlist in playlists ])
88
+ self . mock ( mocked , mock .get , "http://mocked/path/master.m3u8" , text = self .getMasterPlaylist ())
89
+ self . mock ( mocked , mock .get , "http://mocked/path/playlist.m3u8" , [{"text" : p } for p in playlists ])
85
90
for i , stream in enumerate (streams ):
86
- mock .get ( "http://mocked/path/stream{0}.ts" .format (i ), content = stream )
87
- return self .start_streamlink ()
91
+ self . mock ( mocked , mock .get , "http://mocked/path/stream{0}.ts" .format (i ), content = stream )
92
+ return self .start_streamlink (), mocked
88
93
89
- def test_hls_scte35_start_with_end (self ):
94
+ @patch ("streamlink.plugins.twitch.log" )
95
+ def test_hls_scte35_start_with_end (self , mock_logging ):
90
96
streams = ["[{0}]" .format (i ).encode ("ascii" ) for i in range (12 )]
91
97
playlists = [
92
98
self .getPlaylist (0 , [self .scte35_out , 0 , 1 , 2 , 3 ]),
93
99
self .getPlaylist (4 , [self .scte35_in , 4 , 5 , 6 , 7 ]),
94
100
self .getPlaylist (8 , [8 , 9 , 10 , 11 ]) + "#EXT-X-ENDLIST\n "
95
101
]
96
- result = self .get_result (streams , playlists )
102
+ result , mocked = self .get_result (streams , playlists )
97
103
98
104
expected = b'' .join (streams [4 :12 ])
99
105
self .assertEqual (expected , result )
100
-
101
- def test_hls_scte35_no_start (self ):
106
+ for i , _ in enumerate (streams ):
107
+ self .assertTrue (mocked ["http://mocked/path/stream{0}.ts" .format (i )].called )
108
+ mock_logging .info .assert_has_calls ([
109
+ call ("Will skip ad segments" ),
110
+ call ("Will skip ads beginning with segment 0" ),
111
+ call ("Will stop skipping ads beginning with segment 4" )
112
+ ])
113
+
114
+ @patch ("streamlink.plugins.twitch.log" )
115
+ def test_hls_scte35_no_start (self , mock_logging ):
102
116
streams = ["[{0}]" .format (i ).encode ("ascii" ) for i in range (8 )]
103
117
playlists = [
104
118
self .getPlaylist (0 , [0 , 1 , 2 , 3 ]),
105
119
self .getPlaylist (4 , [self .scte35_in , 4 , 5 , 6 , 7 ]) + "#EXT-X-ENDLIST\n "
106
120
]
107
- result = self .get_result (streams , playlists )
121
+ result , mocked = self .get_result (streams , playlists )
108
122
109
123
expected = b'' .join (streams [0 :8 ])
110
124
self .assertEqual (expected , result )
111
-
112
- def test_hls_scte35_no_start_with_cont (self ):
125
+ for i , _ in enumerate (streams ):
126
+ self .assertTrue (mocked ["http://mocked/path/stream{0}.ts" .format (i )].called )
127
+ mock_logging .info .assert_has_calls ([
128
+ call ("Will skip ad segments" )
129
+ ])
130
+
131
+ @patch ("streamlink.plugins.twitch.log" )
132
+ def test_hls_scte35_no_start_with_cont (self , mock_logging ):
113
133
streams = ["[{0}]" .format (i ).encode ("ascii" ) for i in range (8 )]
114
134
playlists = [
115
135
self .getPlaylist (0 , [self .scte35_out_cont , 0 , 1 , 2 , 3 ]),
116
136
self .getPlaylist (4 , [self .scte35_in , 4 , 5 , 6 , 7 ]) + "#EXT-X-ENDLIST\n "
117
137
]
118
- result = self .get_result (streams , playlists )
138
+ result , mocked = self .get_result (streams , playlists )
119
139
120
140
expected = b'' .join (streams [4 :8 ])
121
141
self .assertEqual (expected , result )
122
-
123
- def test_hls_scte35_no_end (self ):
142
+ for i , _ in enumerate (streams ):
143
+ self .assertTrue (mocked ["http://mocked/path/stream{0}.ts" .format (i )].called )
144
+ mock_logging .info .assert_has_calls ([
145
+ call ("Will skip ad segments" ),
146
+ call ("Will skip ads beginning with segment 0" ),
147
+ call ("Will stop skipping ads beginning with segment 4" )
148
+ ])
149
+
150
+ @patch ("streamlink.plugins.twitch.log" )
151
+ def test_hls_scte35_no_end (self , mock_logging ):
124
152
streams = ["[{0}]" .format (i ).encode ("ascii" ) for i in range (12 )]
125
153
playlists = [
126
154
self .getPlaylist (0 , [0 , 1 , 2 , 3 ]),
127
155
self .getPlaylist (4 , [self .scte35_out , 4 , 5 , 6 , 7 ]),
128
156
self .getPlaylist (8 , [8 , 9 , 10 , 11 ]) + "#EXT-X-ENDLIST\n "
129
157
]
130
- result = self .get_result (streams , playlists )
158
+ result , mocked = self .get_result (streams , playlists )
131
159
132
160
expected = b'' .join (streams [0 :4 ])
133
161
self .assertEqual (expected , result )
134
-
135
- def test_hls_scte35_in_between (self ):
162
+ for i , _ in enumerate (streams ):
163
+ self .assertTrue (mocked ["http://mocked/path/stream{0}.ts" .format (i )].called )
164
+ mock_logging .info .assert_has_calls ([
165
+ call ("Will skip ad segments" ),
166
+ call ("Will skip ads beginning with segment 4" )
167
+ ])
168
+
169
+ @patch ("streamlink.plugins.twitch.log" )
170
+ def test_hls_scte35_in_between (self , mock_logging ):
136
171
streams = ["[{0}]" .format (i ).encode ("ascii" ) for i in range (20 )]
137
172
playlists = [
138
173
self .getPlaylist (0 , [0 , 1 , 2 , 3 ]),
@@ -141,7 +176,14 @@ def test_hls_scte35_in_between(self):
141
176
self .getPlaylist (12 , [12 , 13 , self .scte35_in , 14 , 15 ]),
142
177
self .getPlaylist (16 , [16 , 17 , 18 , 19 ]) + "#EXT-X-ENDLIST\n "
143
178
]
144
- result = self .get_result (streams , playlists )
179
+ result , mocked = self .get_result (streams , playlists )
145
180
146
181
expected = b'' .join (streams [0 :6 ]) + b'' .join (streams [14 :20 ])
147
182
self .assertEqual (expected , result )
183
+ for i , _ in enumerate (streams ):
184
+ self .assertTrue (mocked ["http://mocked/path/stream{0}.ts" .format (i )].called )
185
+ mock_logging .info .assert_has_calls ([
186
+ call ("Will skip ad segments" ),
187
+ call ("Will skip ads beginning with segment 6" ),
188
+ call ("Will stop skipping ads beginning with segment 14" )
189
+ ])
0 commit comments