Repository: yt-dlp/yt-dlp (branch: master)
Commit date: 2023-10-31T17:40:38Z

Workflow file: .github/workflows/quick-test.yml (Quick Test)
name: Quick Test
on: [push, pull_request]
permissions:
  contents: read

jobs:
  tests:
    name: Core Test
    if: "!contains(github.event.head_commit.message, 'ci skip all')"
    runs-on: ubuntu-latest
    services:
      pypi_wayback:
        image: ghcr.io/waleko/pypi-wayback
        ports:
          - 8629:8080
    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.11
      uses: actions/setup-python@v4
      with:
        python-version: '3.11'
    - name: Install test requirements
      run: pip install pytest pycryptodomex
    - name: Run tests
      run: |
        python3 -m yt_dlp -v || true
        ./devscripts/run_tests.sh core
  flake8:
    name: Linter
    if: "!contains(github.event.head_commit.message, 'ci skip all')"
    runs-on: ubuntu-latest
    services:
      pypi_wayback:
        image: ghcr.io/waleko/pypi-wayback
        ports:
          - 8629:8080
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-python@v4
    - name: Install flake8
      run: pip install flake8
    - name: Make lazy extractors
      run: python devscripts/make_lazy_extractors.py
    - name: Run flake8
      run: flake8 .

env:
  PIP_INDEX_URL: http://localhost:8629/2023-10-31
  UV_INDEX_URL: http://localhost:8629/2023-10-31


Failed build logs:
step_name: Core Test/5_Run tests.txt
log: ##[group]Run python3 -m yt_dlp -v || true
[36;1mpython3 -m yt_dlp -v || true[0m
[36;1m./devscripts/run_tests.sh core[0m
shell: /usr/bin/bash -e {0}
env:
  pythonLocation: /opt/hostedtoolcache/Python/3.11.6/x64
  PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.11.6/x64/lib/pkgconfig
  Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.6/x64
  Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.6/x64
  Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.11.6/x64
  LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.11.6/x64/lib
##[endgroup]
[debug] Command-line config: ['-v']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8 (No ANSI), error utf-8 (No ANSI), screen utf-8 (No ANSI)
[debug] yt-dlp version stable@2023.10.13 [b634ba742] (source)
[debug] Lazy loading extractors is disabled
[debug] Git HEAD: f8abf45
[debug] Python 3.11.6 (CPython x86_64 64bit) - Linux-6.2.0-1015-azure-x86_64-with-glibc2.35 (OpenSSL 3.0.2 15 Mar 2022, glibc 2.35)
[debug] exe versions: none
[debug] Optional libraries: Cryptodome-3.19.0, sqlite3-3.37.2
[debug] Proxy map: {}
[debug] Request Handlers: urllib
[debug] Loaded 1890 extractors

Usage: yt-dlp [OPTIONS] URL [URL...]

yt-dlp: error: You must provide at least one URL.
Type yt-dlp --help to see a list of all options.
============================= test session starts ==============================
platform linux -- Python 3.11.6, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.11.6/x64/bin/python3
cachedir: .pytest_cache
rootdir: /home/runner/work/yt-dlp/yt-dlp
configfile: setup.cfg
collecting ... collected 6320 items / 5705 deselected / 615 selected

test/test_InfoExtractor.py::TestInfoExtractor::test_download_json PASSED [  0%]
test/test_InfoExtractor.py::TestInfoExtractor::test_extract_jwplayer_data_realworld PASSED [  0%]
test/test_InfoExtractor.py::TestInfoExtractor::test_html_search_meta PASSED [  0%]
test/test_InfoExtractor.py::TestInfoExtractor::test_html_search_regex PASSED [  0%]
test/test_InfoExtractor.py::TestInfoExtractor::test_ie_key PASSED        [  0%]
test/test_InfoExtractor.py::TestInfoExtractor::test_opengraph PASSED     [  0%]
test/test_InfoExtractor.py::TestInfoExtractor::test_parse_f4m_formats PASSED [  1%]
test/test_InfoExtractor.py::TestInfoExtractor::test_parse_html5_media_entries PASSED [  1%]
test/test_InfoExtractor.py::TestInfoExtractor::test_parse_ism_formats PASSED [  1%]
test/test_InfoExtractor.py::TestInfoExtractor::test_parse_m3u8_formats PASSED [  1%]
test/test_InfoExtractor.py::TestInfoExtractor::test_parse_mpd_formats PASSED [  1%]
test/test_InfoExtractor.py::TestInfoExtractor::test_parse_xspf PASSED    [  1%]
test/test_InfoExtractor.py::TestInfoExtractor::test_response_with_expected_status_returns_content PASSED [  2%]
test/test_InfoExtractor.py::TestInfoExtractor::test_search_json_ld_realworld PASSED [  2%]
test/test_YoutubeDL.py::TestFormatSelection::test_audio_only_extractor_format_selection PASSED [  2%]
test/test_YoutubeDL.py::TestFormatSelection::test_default_format_spec PASSED [  2%]
test/test_YoutubeDL.py::TestFormatSelection::test_format_filtering PASSED [  2%]
test/test_YoutubeDL.py::TestFormatSelection::test_format_not_available PASSED [  2%]
test/test_YoutubeDL.py::TestFormatSelection::test_format_selection PASSED [  3%]
test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_audio PASSED [  3%]
test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_audio_exts PASSED [  3%]
test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_issue_10083 PASSED [  3%]
test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_string_ops PASSED [  3%]
test/test_YoutubeDL.py::TestFormatSelection::test_format_selection_video PASSED [  3%]
test/test_YoutubeDL.py::TestFormatSelection::test_invalid_format_specs PASSED [  4%]
test/test_YoutubeDL.py::TestFormatSelection::test_prefer_free_formats PASSED [  4%]
test/test_YoutubeDL.py::TestFormatSelection::test_youtube_format_selection PASSED [  4%]
test/test_YoutubeDL.py::TestYoutubeDL::test_add_extra_info PASSED        [  4%]
test/test_YoutubeDL.py::TestYoutubeDL::test_add_headers_cookie PASSED    [  4%]
test/test_YoutubeDL.py::TestYoutubeDL::test_do_not_override_ie_key_in_url_transparent PASSED [  4%]
test/test_YoutubeDL.py::TestYoutubeDL::test_format_note PASSED           [  5%]
test/test_YoutubeDL.py::TestYoutubeDL::test_header_cookies PASSED        [  5%]
test/test_YoutubeDL.py::TestYoutubeDL::test_ignoreerrors_for_playlist_with_url_transparent_iterable_entries PASSED [  5%]
test/test_YoutubeDL.py::TestYoutubeDL::test_infojson_cookies PASSED      [  5%]
test/test_YoutubeDL.py::TestYoutubeDL::test_match_filter PASSED          [  5%]
test/test_YoutubeDL.py::TestYoutubeDL::test_playlist_items_selection PASSED [  5%]
test/test_YoutubeDL.py::TestYoutubeDL::test_postprocessors PASSED        [  6%]
test/test_YoutubeDL.py::TestYoutubeDL::test_prepare_outtmpl_and_filename PASSED [  6%]
test/test_YoutubeDL.py::TestYoutubeDL::test_subtitles PASSED             [  6%]
test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_get_cookie_header PASSED [  6%]
test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_get_cookies_for_url PASSED [  6%]
test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_keep_session_cookies PASSED [  6%]
test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_malformed_cookies PASSED [  6%]
test/test_YoutubeDLCookieJar.py::TestYoutubeDLCookieJar::test_strip_httponly_prefix PASSED [  7%]
test/test_aes.py::TestAES::test_cbc_decrypt PASSED                       [  7%]
test/test_aes.py::TestAES::test_cbc_encrypt PASSED                       [  7%]
test/test_aes.py::TestAES::test_ctr_decrypt PASSED                       [  7%]
test/test_aes.py::TestAES::test_ctr_encrypt PASSED                       [  7%]
test/test_aes.py::TestAES::test_decrypt_text PASSED                      [  7%]
test/test_aes.py::TestAES::test_ecb_decrypt PASSED                       [  8%]
test/test_aes.py::TestAES::test_ecb_encrypt PASSED                       [  8%]
test/test_aes.py::TestAES::test_encrypt PASSED                           [  8%]
test/test_aes.py::TestAES::test_gcm_decrypt PASSED                       [  8%]
test/test_aes.py::TestAES::test_key_expansion PASSED                     [  8%]
test/test_aes.py::TestAES::test_pad_block PASSED                         [  8%]
test/test_all_urls.py::TestAllURLsMatching::test_facebook_matching PASSED [  9%]
test/test_all_urls.py::TestAllURLsMatching::test_keywords PASSED         [  9%]
test/test_all_urls.py::TestAllURLsMatching::test_no_duplicated_ie_names PASSED [  9%]
test/test_all_urls.py::TestAllURLsMatching::test_no_duplicates PASSED    [  9%]
test/test_all_urls.py::TestAllURLsMatching::test_pbs PASSED              [  9%]
test/test_all_urls.py::TestAllURLsMatching::test_soundcloud_not_matching_sets PASSED [  9%]
test/test_all_urls.py::TestAllURLsMatching::test_tumblr PASSED           [ 10%]
test/test_all_urls.py::TestAllURLsMatching::test_vimeo_matching PASSED   [ 10%]
test/test_all_urls.py::TestAllURLsMatching::test_youtube_channel_matching PASSED [ 10%]
test/test_all_urls.py::TestAllURLsMatching::test_youtube_feeds PASSED    [ 10%]
test/test_all_urls.py::TestAllURLsMatching::test_youtube_matching PASSED [ 10%]
test/test_all_urls.py::TestAllURLsMatching::test_youtube_playlist_matching PASSED [ 10%]
test/test_all_urls.py::TestAllURLsMatching::test_youtube_search_matching PASSED [ 11%]
test/test_all_urls.py::TestAllURLsMatching::test_youtube_user_matching PASSED [ 11%]
test/test_cache.py::TestCache::test_cache PASSED                         [ 11%]
test/test_compat.py::TestCompat::test_compat_etree_fromstring PASSED     [ 11%]
test/test_compat.py::TestCompat::test_compat_etree_fromstring_doctype PASSED [ 11%]
test/test_compat.py::TestCompat::test_compat_expanduser PASSED           [ 11%]
test/test_compat.py::TestCompat::test_compat_passthrough PASSED          [ 12%]
test/test_compat.py::TestCompat::test_compat_urllib_parse_unquote PASSED [ 12%]
test/test_compat.py::TestCompat::test_compat_urllib_parse_unquote_plus PASSED [ 12%]
test/test_compat.py::TestCompat::test_compat_urllib_parse_urlencode PASSED [ 12%]
test/test_compat.py::TestCompat::test_struct_unpack PASSED               [ 12%]
test/test_config.py::TestConfig::test_config__ENVIRON_DEFAULTS_sanity PASSED [ 12%]
test/test_config.py::TestConfig::test_config_all_environ_values PASSED   [ 13%]
test/test_config.py::TestConfig::test_config_default_expected_locations PASSED [ 13%]
test/test_config.py::TestConfig::test_config_default_grouping PASSED     [ 13%]
test/test_config.py::TestConfig::test_config_early_exit_commandline PASSED [ 13%]
test/test_config.py::TestConfig::test_config_early_exit_files PASSED     [ 13%]
test/test_config.py::TestConfig::test_config_override_commandline PASSED [ 13%]
test/test_config.py::TestConfig::test_config_override_files PASSED       [ 13%]
test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_linux_derive_key PASSED [ 14%]
test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_linux_v10 PASSED [ 14%]
test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_linux_v11 PASSED [ 14%]
test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_mac_derive_key PASSED [ 14%]
test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_mac_v10 PASSED [ 14%]
test/test_cookies.py::TestCookies::test_chrome_cookie_decryptor_windows_v10 PASSED [ 14%]
test/test_cookies.py::TestCookies::test_get_desktop_environment PASSED   [ 15%]
test/test_cookies.py::TestCookies::test_pbkdf2_sha1 PASSED               [ 15%]
test/test_cookies.py::TestCookies::test_safari_cookie_parsing PASSED     [ 15%]
test/test_cookies.py::TestLenientSimpleCookie::test_lenient_parsing PASSED [ 15%]
test/test_cookies.py::TestLenientSimpleCookie::test_parsing PASSED       [ 15%]
test/test_downloader_external.py::TestHttpieFD::test_make_cmd PASSED     [ 15%]
test/test_downloader_external.py::TestAxelFD::test_make_cmd PASSED       [ 16%]
test/test_downloader_external.py::TestWgetFD::test_make_cmd PASSED       [ 16%]
test/test_downloader_external.py::TestCurlFD::test_make_cmd PASSED       [ 16%]
test/test_downloader_external.py::TestAria2cFD::test_make_cmd PASSED     [ 16%]
test/test_downloader_external.py::TestFFmpegFD::test_make_cmd SKIPPED    [ 16%]
test/test_downloader_http.py::TestHttpFD::test_chunked FAILED            [ 16%]
test/test_downloader_http.py::TestHttpFD::test_regular FAILED            [ 17%]
test/test_execution.py::TestExecution::test_cmdline_umlauts PASSED       [ 17%]
test/test_execution.py::TestExecution::test_import PASSED                [ 17%]
test/test_execution.py::TestExecution::test_lazy_extractors PASSED       [ 17%]
test/test_execution.py::TestExecution::test_main_exec PASSED             [ 17%]
test/test_execution.py::TestExecution::test_module_exec PASSED           [ 17%]
test/test_jsinterp.py::TestJSInterpreter::test_add PASSED                [ 18%]
test/test_jsinterp.py::TestJSInterpreter::test_array_access PASSED       [ 18%]
test/test_jsinterp.py::TestJSInterpreter::test_assignments PASSED        [ 18%]
test/test_jsinterp.py::TestJSInterpreter::test_basic PASSED              [ 18%]
test/test_jsinterp.py::TestJSInterpreter::test_bitwise_operators_overflow PASSED [ 18%]
test/test_jsinterp.py::TestJSInterpreter::test_bitwise_operators_typecast PASSED [ 18%]
test/test_jsinterp.py::TestJSInterpreter::test_builtins PASSED           [ 19%]
test/test_jsinterp.py::TestJSInterpreter::test_calc PASSED               [ 19%]
test/test_jsinterp.py::TestJSInterpreter::test_call PASSED               [ 19%]
test/test_jsinterp.py::TestJSInterpreter::test_catch PASSED              [ 19%]
test/test_jsinterp.py::TestJSInterpreter::test_char_code_at PASSED       [ 19%]
test/test_jsinterp.py::TestJSInterpreter::test_comma PASSED              [ 19%]
test/test_jsinterp.py::TestJSInterpreter::test_comments SKIPPED (Not...) [ 20%]
test/test_jsinterp.py::TestJSInterpreter::test_date PASSED               [ 20%]
test/test_jsinterp.py::TestJSInterpreter::test_div PASSED                [ 20%]
test/test_jsinterp.py::TestJSInterpreter::test_empty_return PASSED       [ 20%]
test/test_jsinterp.py::TestJSInterpreter::test_exp PASSED                [ 20%]
test/test_jsinterp.py::TestJSInterpreter::test_finally PASSED            [ 20%]
test/test_jsinterp.py::TestJSInterpreter::test_for_loop PASSED           [ 20%]
test/test_jsinterp.py::TestJSInterpreter::test_for_loop_break PASSED     [ 21%]
test/test_jsinterp.py::TestJSInterpreter::test_for_loop_continue PASSED  [ 21%]
test/test_jsinterp.py::TestJSInterpreter::test_for_loop_try PASSED       [ 21%]
test/test_jsinterp.py::TestJSInterpreter::test_if PASSED                 [ 21%]
test/test_jsinterp.py::TestJSInterpreter::test_literal_list PASSED       [ 21%]
test/test_jsinterp.py::TestJSInterpreter::test_mod PASSED                [ 21%]
test/test_jsinterp.py::TestJSInterpreter::test_morespace PASSED          [ 22%]
test/test_jsinterp.py::TestJSInterpreter::test_mul PASSED                [ 22%]
test/test_jsinterp.py::TestJSInterpreter::test_negative PASSED           [ 22%]
test/test_jsinterp.py::TestJSInterpreter::test_nested_try PASSED         [ 22%]
test/test_jsinterp.py::TestJSInterpreter::test_null PASSED               [ 22%]
test/test_jsinterp.py::TestJSInterpreter::test_object PASSED             [ 22%]
test/test_jsinterp.py::TestJSInterpreter::test_operators PASSED          [ 23%]
test/test_jsinterp.py::TestJSInterpreter::test_packed SKIPPED (Not i...) [ 23%]
test/test_jsinterp.py::TestJSInterpreter::test_parens PASSED             [ 23%]
test/test_jsinterp.py::TestJSInterpreter::test_precedence PASSED         [ 23%]
test/test_jsinterp.py::TestJSInterpreter::test_quotes PASSED             [ 23%]
test/test_jsinterp.py::TestJSInterpreter::test_regex PASSED              [ 23%]
test/test_jsinterp.py::TestJSInterpreter::test_replace SKIPPED (Not ...) [ 24%]
test/test_jsinterp.py::TestJSInterpreter::test_return_function PASSED    [ 24%]
test/test_jsinterp.py::TestJSInterpreter::test_strange_chars PASSED      [ 24%]
test/test_jsinterp.py::TestJSInterpreter::test_sub PASSED                [ 24%]
test/test_jsinterp.py::TestJSInterpreter::test_switch PASSED             [ 24%]
test/test_jsinterp.py::TestJSInterpreter::test_switch_default PASSED     [ 24%]
test/test_jsinterp.py::TestJSInterpreter::test_try PASSED                [ 25%]
test/test_jsinterp.py::TestJSInterpreter::test_undefined PASSED          [ 25%]
test/test_jsinterp.py::TestJSInterpreter::test_void PASSED               [ 25%]
test/test_netrc.py::TestNetRc::test_netrc_present PASSED                 [ 25%]
test/test_networking.py::TestHTTPRequestHandler::test_verify_cert[Urllib] PASSED [ 25%]
test/test_networking.py::TestHTTPRequestHandler::test_verify_cert[Requests] SKIPPED [ 25%]
test/test_networking.py::TestHTTPRequestHandler::test_ssl_error[Urllib] PASSED [ 26%]
test/test_networking.py::TestHTTPRequestHandler::test_ssl_error[Requests] SKIPPED [ 26%]
test/test_networking.py::TestHTTPRequestHandler::test_percent_encode[Urllib] PASSED [ 26%]
test/test_networking.py::TestHTTPRequestHandler::test_percent_encode[Requests] SKIPPED [ 26%]
test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[Urllib] PASSED [ 26%]
test/test_networking.py::TestHTTPRequestHandler::test_remove_dot_segments[Requests] SKIPPED [ 26%]
test/test_networking.py::TestHTTPRequestHandler::test_unicode_path_redirection[Urllib] PASSED [ 26%]
test/test_networking.py::TestHTTPRequestHandler::test_unicode_path_redirection[Requests] SKIPPED [ 27%]
test/test_networking.py::TestHTTPRequestHandler::test_raise_http_error[Urllib] PASSED [ 27%]
test/test_networking.py::TestHTTPRequestHandler::test_raise_http_error[Requests] SKIPPED [ 27%]
test/test_networking.py::TestHTTPRequestHandler::test_response_url[Urllib] PASSED [ 27%]
test/test_networking.py::TestHTTPRequestHandler::test_response_url[Requests] SKIPPED [ 27%]
test/test_networking.py::TestHTTPRequestHandler::test_redirect[Urllib] PASSED [ 27%]
test/test_networking.py::TestHTTPRequestHandler::test_redirect[Requests] SKIPPED [ 28%]
test/test_networking.py::TestHTTPRequestHandler::test_request_cookie_header[Urllib] PASSED [ 28%]
test/test_networking.py::TestHTTPRequestHandler::test_request_cookie_header[Requests] SKIPPED [ 28%]
test/test_networking.py::TestHTTPRequestHandler::test_redirect_loop[Urllib] PASSED [ 28%]
test/test_networking.py::TestHTTPRequestHandler::test_redirect_loop[Requests] SKIPPED [ 28%]
test/test_networking.py::TestHTTPRequestHandler::test_incompleteread[Urllib] PASSED [ 28%]
test/test_networking.py::TestHTTPRequestHandler::test_incompleteread[Requests] SKIPPED [ 29%]
test/test_networking.py::TestHTTPRequestHandler::test_cookies[Urllib] PASSED [ 29%]
test/test_networking.py::TestHTTPRequestHandler::test_cookies[Requests] SKIPPED [ 29%]
test/test_networking.py::TestHTTPRequestHandler::test_headers[Urllib] PASSED [ 29%]
test/test_networking.py::TestHTTPRequestHandler::test_headers[Requests] SKIPPED [ 29%]
test/test_networking.py::TestHTTPRequestHandler::test_timeout[Urllib] PASSED [ 29%]
test/test_networking.py::TestHTTPRequestHandler::test_timeout[Requests] SKIPPED [ 30%]
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.11.6/x64/lib/python3.11/socketserver.py", line 691, in process_request_thread
    self.finish_request(request, client_address)
  File "/opt/hostedtoolcache/Python/3.11.6/x64/lib/python3.11/socketserver.py", line 361, in finish_request
    self.RequestHandlerClass(request, client_address, self)
test/test_networking.py::TestHTTPRequestHandler::test_source_address[Urllib] PASSED [ 30%]
  File "/opt/hostedtoolcache/Python/3.11.6/x64/lib/python3.11/socketserver.py", line 755, in __init__
    self.handle()
  File "/opt/hostedtoolcache/Python/3.11.6/x64/lib/python3.11/http/server.py", line 436, in handle
    self.handle_one_request()
  File "/opt/hostedtoolcache/Python/3.11.6/x64/lib/python3.11/http/server.py", line 425, in handle_one_request
    self.wfile.flush() #actually send the response if not already done.
    ^^^^^^^^^^^^^^^^^^
ValueError: I/O operation on closed file.
----------------------------------------
test/test_networking.py::TestHTTPRequestHandler::test_source_address[Requests] SKIPPED [ 30%]
test/test_networking.py::TestHTTPRequestHandler::test_gzip_trailing_garbage[Urllib] PASSED [ 30%]
test/test_networking.py::TestHTTPRequestHandler::test_gzip_trailing_garbage[Requests] SKIPPED [ 30%]
test/test_networking.py::TestHTTPRequestHandler::test_brotli[Urllib] SKIPPED [ 30%]
test/test_networking.py::TestHTTPRequestHandler::test_brotli[Requests] SKIPPED [ 31%]
test/test_networking.py::TestHTTPRequestHandler::test_deflate[Urllib] PASSED [ 31%]
test/test_networking.py::TestHTTPRequestHandler::test_deflate[Requests] SKIPPED [ 31%]
test/test_networking.py::TestHTTPRequestHandler::test_gzip[Urllib] PASSED [ 31%]
test/test_networking.py::TestHTTPRequestHandler::test_gzip[Requests] SKIPPED [ 31%]
test/test_networking.py::TestHTTPRequestHandler::test_multiple_encodings[Urllib] PASSED [ 31%]
test/test_networking.py::TestHTTPRequestHandler::test_multiple_encodings[Requests] SKIPPED [ 32%]
test/test_networking.py::TestHTTPRequestHandler::test_unsupported_encoding[Urllib] PASSED [ 32%]
test/test_networking.py::TestHTTPRequestHandler::test_unsupported_encoding[Requests] SKIPPED [ 32%]
test/test_networking.py::TestHTTPRequestHandler::test_read[Urllib] PASSED [ 32%]
test/test_networking.py::TestHTTPRequestHandler::test_read[Requests] SKIPPED [ 32%]
test/test_networking.py::TestHTTPProxy::test_http_proxy[Urllib] PASSED   [ 32%]
test/test_networking.py::TestHTTPProxy::test_http_proxy[Requests] SKIPPED [ 33%]
test/test_networking.py::TestHTTPProxy::test_noproxy[Urllib] PASSED      [ 33%]
test/test_networking.py::TestHTTPProxy::test_noproxy[Requests] SKIPPED   [ 33%]
test/test_networking.py::TestHTTPProxy::test_allproxy[Urllib] PASSED     [ 33%]
test/test_networking.py::TestHTTPProxy::test_allproxy[Requests] SKIPPED  [ 33%]
test/test_networking.py::TestHTTPProxy::test_http_proxy_with_idn[Urllib] PASSED [ 33%]
test/test_networking.py::TestHTTPProxy::test_http_proxy_with_idn[Requests] SKIPPED [ 33%]
test/test_networking.py::TestClientCertificate::test_certificate_combined_nopass[Urllib] PASSED [ 34%]
test/test_networking.py::TestClientCertificate::test_certificate_combined_nopass[Requests] SKIPPED [ 34%]
test/test_networking.py::TestClientCertificate::test_certificate_nocombined_nopass[Urllib] PASSED [ 34%]
test/test_networking.py::TestClientCertificate::test_certificate_nocombined_nopass[Requests] SKIPPED [ 34%]
test/test_networking.py::TestClientCertificate::test_certificate_combined_pass[Urllib] PASSED [ 34%]
test/test_networking.py::TestClientCertificate::test_certificate_combined_pass[Requests] SKIPPED [ 34%]
test/test_networking.py::TestClientCertificate::test_certificate_nocombined_pass[Urllib] PASSED [ 35%]
test/test_networking.py::TestClientCertificate::test_certificate_nocombined_pass[Requests] SKIPPED [ 35%]
test/test_networking.py::TestUrllibRequestHandler::test_file_urls[Urllib] PASSED [ 35%]
test/test_networking.py::TestUrllibRequestHandler::test_http_error_returns_content[Urllib] PASSED [ 35%]
test/test_networking.py::TestUrllibRequestHandler::test_verify_cert_error_text[Urllib] PASSED [ 35%]
test/test_networking.py::TestUrllibRequestHandler::test_httplib_validation_errors[req0-method can't contain control characters-<lambda>-Urllib] PASSED [ 35%]
test/test_networking.py::TestUrllibRequestHandler::test_httplib_validation_errors[req1-URL can't contain control characters-<lambda>-Urllib] PASSED [ 36%]
test/test_networking.py::TestUrllibRequestHandler::test_httplib_validation_errors[req2-Invalid header name-None-Urllib] PASSED [ 36%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-TransportError0] SKIPPED [ 36%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-TransportError1] SKIPPED [ 36%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-TransportError2] SKIPPED [ 36%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-TransportError3] SKIPPED [ 36%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-ProxyError] SKIPPED [ 37%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-CertificateVerifyError] SKIPPED [ 37%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-SSLError] SKIPPED [ 37%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-RequestError0] SKIPPED [ 37%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-RequestError1] SKIPPED [ 37%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-TransportError4] SKIPPED [ 37%]
test/test_networking.py::TestRequestsRequestHandler::test_request_error_mapping[Requests-<lambda>-RequestError2] SKIPPED [ 38%]
test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[Requests-<lambda>-SSLError-None] SKIPPED [ 38%]
test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[Requests-<lambda>-TransportError-None0] SKIPPED [ 38%]
test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[Requests-<lambda>-TransportError-None1] SKIPPED [ 38%]
test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[Requests-<lambda>-TransportError-None2] SKIPPED [ 38%]
test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[Requests-<lambda>-TransportError-None3] SKIPPED [ 38%]
test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[Requests-<lambda>-TransportError-None4] SKIPPED [ 39%]
test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[Requests-<lambda>-IncompleteRead-3 bytes read, 4 more expected] SKIPPED [ 39%]
test/test_networking.py::TestRequestsRequestHandler::test_response_error_mapping[Requests-<lambda>-IncompleteRead-3 bytes read, 5 more expected] SKIPPED [ 39%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-http-False-handler_kwargs0] PASSED [ 39%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-https-False-handler_kwargs1] PASSED [ 39%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-data-False-handler_kwargs2] PASSED [ 39%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-ftp-False-handler_kwargs3] PASSED [ 40%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-file-UnsupportedRequest-handler_kwargs4] PASSED [ 40%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Urllib-file-False-handler_kwargs5] PASSED [ 40%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Requests-http-False-handler_kwargs6] SKIPPED [ 40%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[Requests-https-False-handler_kwargs7] SKIPPED [ 40%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[NoCheckRH-http-False-handler_kwargs8] PASSED [ 40%]
test/test_networking.py::TestRequestHandlerValidation::test_url_scheme[ValidationRH-http-UnsupportedRequest-handler_kwargs9] PASSED [ 40%]
test/test_networking.py::TestRequestHandlerValidation::test_no_proxy[Urllib-False] PASSED [ 41%]
test/test_networking.py::TestRequestHandlerValidation::test_no_proxy[Requests-False] SKIPPED [ 41%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[Urllib-all-False] PASSED [ 41%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[Urllib-unrelated-False] PASSED [ 41%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[Requests-all-False] SKIPPED [ 41%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[Requests-unrelated-False] SKIPPED [ 41%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[NoCheckRH-all-False] PASSED [ 42%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[HTTPSupportedRH-all-UnsupportedRequest] PASSED [ 42%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_key[HTTPSupportedRH-no-UnsupportedRequest] PASSED [ 42%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-http-False] PASSED [ 42%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-https-UnsupportedRequest] PASSED [ 42%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-socks4-False] PASSED [ 42%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-socks4a-False] PASSED [ 43%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-socks5-False] PASSED [ 43%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-socks5h-False] PASSED [ 43%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Urllib-socks-UnsupportedRequest] PASSED [ 43%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-http-False] SKIPPED [ 43%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-https-False] SKIPPED [ 43%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-socks4-False] SKIPPED [ 44%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-socks4a-False] SKIPPED [ 44%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-socks5-False] SKIPPED [ 44%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[Requests-socks5h-False] SKIPPED [ 44%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[NoCheckRH-http-False] PASSED [ 44%]
test/test_networking.py::TestRequestHandlerValidation::test_proxy_scheme[HTTPSupportedRH-http-UnsupportedRequest] PASSED [ 44%]
test/test_networking.py::TestRequestHandlerValidation::test_empty_proxy[Urllib] PASSED [ 45%]
test/test_networking.py::TestRequestHandlerValidation::test_empty_proxy[HTTPSupportedRH] PASSED [ 45%]
test/test_networking.py::TestRequestHandlerValidation::test_empty_proxy[Requests] SKIPPED [ 45%]
test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Urllib-//example.com] PASSED [ 45%]
test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Urllib-example.com] PASSED [ 45%]
test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Urllib-127.0.0.1] PASSED [ 45%]
test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Urllib-/a/b/c] PASSED [ 46%]
test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Requests-//example.com] SKIPPED [ 46%]
test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Requests-example.com] SKIPPED [ 46%]
test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Requests-127.0.0.1] SKIPPED [ 46%]
test/test_networking.py::TestRequestHandlerValidation::test_invalid_proxy_url[Requests-/a/b/c] SKIPPED [ 46%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-extensions0-AssertionError] PASSED [ 46%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-extensions1-False] PASSED [ 46%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-extensions2-AssertionError] PASSED [ 47%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-extensions3-False] PASSED [ 47%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-extensions4-AssertionError] PASSED [ 47%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Urllib-extensions5-UnsupportedRequest] PASSED [ 47%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-extensions6-AssertionError] SKIPPED [ 47%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-extensions7-False] SKIPPED [ 47%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-extensions8-False] SKIPPED [ 48%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-extensions9-AssertionError] SKIPPED [ 48%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[Requests-extensions10-UnsupportedRequest] SKIPPED [ 48%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[NoCheckRH-extensions11-False] PASSED [ 48%]
test/test_networking.py::TestRequestHandlerValidation::test_extension[NoCheckRH-extensions12-False] PASSED [ 48%]
test/test_networking.py::TestRequestHandlerValidation::test_invalid_request_type PASSED [ 48%]
test/test_networking.py::TestRequestDirector::test_handler_operations PASSED [ 49%]
test/test_networking.py::TestRequestDirector::test_send PASSED           [ 49%]
test/test_networking.py::TestRequestDirector::test_unsupported_handlers PASSED [ 49%]
test/test_networking.py::TestRequestDirector::test_unexpected_error PASSED [ 49%]
test/test_networking.py::TestRequestDirector::test_preference PASSED     [ 49%]
test/test_networking.py::TestYoutubeDLNetworking::test_compat_opener PASSED [ 49%]
test/test_networking.py::TestYoutubeDLNetworking::test_proxy[http://127.0.0.1:8080-expected0] PASSED [ 50%]
test/test_networking.py::TestYoutubeDLNetworking::test_proxy[-expected1] PASSED [ 50%]
test/test_networking.py::TestYoutubeDLNetworking::test_proxy[None-expected2] PASSED [ 50%]
test/test_networking.py::TestYoutubeDLNetworking::test_compat_request PASSED [ 50%]
test/test_networking.py::TestYoutubeDLNetworking::test_extract_basic_auth PASSED [ 50%]
test/test_networking.py::TestYoutubeDLNetworking::test_sanitize_url PASSED [ 50%]
test/test_networking.py::TestYoutubeDLNetworking::test_file_urls_error PASSED [ 51%]
test/test_networking.py::TestYoutubeDLNetworking::test_legacy_server_connect_error PASSED [ 51%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[http-__noproxy__-None] PASSED [ 51%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[no-127.0.0.1,foo.bar-127.0.0.1,foo.bar] PASSED [ 51%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[https-example.com-http://example.com] PASSED [ 51%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[https-//example.com-http://example.com] PASSED [ 51%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[https-socks5://example.com-socks5h://example.com] PASSED [ 52%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[http-socks://example.com-socks4://example.com] PASSED [ 52%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[http-socks4://example.com-socks4://example.com] PASSED [ 52%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy[unrelated-/bad/proxy-/bad/proxy] PASSED [ 52%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_proxy_header PASSED [ 52%]
test/test_networking.py::TestYoutubeDLNetworking::test_clean_header PASSED [ 52%]
test/test_networking.py::TestYoutubeDLNetworking::test_build_handler_params PASSED [ 53%]
test/test_networking.py::TestYoutubeDLNetworking::test_client_certificate[ydl_params0] PASSED [ 53%]
test/test_networking.py::TestYoutubeDLNetworking::test_client_certificate[ydl_params1] PASSED [ 53%]
test/test_networking.py::TestYoutubeDLNetworking::test_client_certificate[ydl_params2] PASSED [ 53%]
test/test_networking.py::TestYoutubeDLNetworking::test_client_certificate[ydl_params3] PASSED [ 53%]
test/test_networking.py::TestYoutubeDLNetworking::test_urllib_file_urls PASSED [ 53%]
test/test_networking.py::TestYoutubeDLNetworking::test_compat_opt_prefer_urllib PASSED [ 53%]
test/test_networking.py::TestRequest::test_query PASSED                  [ 54%]
test/test_networking.py::TestRequest::test_method PASSED                 [ 54%]
test/test_networking.py::TestRequest::test_request_helpers PASSED        [ 54%]
test/test_networking.py::TestRequest::test_headers PASSED                [ 54%]
test/test_networking.py::TestRequest::test_data_type PASSED              [ 54%]
test/test_networking.py::TestRequest::test_content_length_header PASSED  [ 54%]
test/test_networking.py::TestRequest::test_content_type_header PASSED    [ 55%]
test/test_networking.py::TestRequest::test_update_req PASSED             [ 55%]
test/test_networking.py::TestRequest::test_proxies PASSED                [ 55%]
test/test_networking.py::TestRequest::test_extensions PASSED             [ 55%]
test/test_networking.py::TestRequest::test_copy PASSED                   [ 55%]
test/test_networking.py::TestRequest::test_url PASSED                    [ 55%]
test/test_networking.py::TestResponse::test_reason[custom-200-custom] PASSED [ 56%]
test/test_networking.py::TestResponse::test_reason[None-404-Not Found] PASSED [ 56%]
test/test_networking.py::TestResponse::test_reason[-403-Forbidden] PASSED [ 56%]
test/test_networking.py::TestResponse::test_reason[None-999-None] PASSED [ 56%]
test/test_networking.py::TestResponse::test_headers PASSED               [ 56%]
test/test_networking.py::TestResponse::test_get_header PASSED            [ 56%]
test/test_networking.py::TestResponse::test_compat PASSED                [ 57%]
test/test_networking_utils.py::TestNetworkingUtils::test_select_proxy PASSED [ 57%]
test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_opts[socks5h://example.com-expected0] PASSED [ 57%]
test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_opts[***example.com:5555-expected1] PASSED [ 57%]
test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_opts[***127.0.0.1:1080-expected2] PASSED [ 57%]
test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_opts[socks4a://:pa%20ss@127.0.0.1-expected3] PASSED [ 57%]
test/test_networking_utils.py::TestNetworkingUtils::test_make_socks_proxy_unknown PASSED [ 58%]
test/test_networking_utils.py::TestNetworkingUtils::test_load_certifi SKIPPED [ 58%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[GET-303-GET] PASSED [ 58%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-303-HEAD] PASSED [ 58%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[PUT-303-GET] PASSED [ 58%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[POST-301-GET] PASSED [ 58%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-301-HEAD] PASSED [ 59%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[POST-302-GET] PASSED [ 59%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-302-HEAD] PASSED [ 59%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[PUT-302-PUT] PASSED [ 59%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[POST-308-POST] PASSED [ 59%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[POST-307-POST] PASSED [ 59%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-308-HEAD] PASSED [ 60%]
test/test_networking_utils.py::TestNetworkingUtils::test_get_redirect_method[HEAD-307-HEAD] PASSED [ 60%]
test/test_networking_utils.py::TestNetworkingUtils::test_add_accept_encoding_header[headers0-supported_encodings0-expected0] PASSED [ 60%]
test/test_networking_utils.py::TestNetworkingUtils::test_add_accept_encoding_header[headers1-supported_encodings1-expected1] PASSED [ 60%]
test/test_networking_utils.py::TestNetworkingUtils::test_add_accept_encoding_header[headers2-supported_encodings2-expected2] PASSED [ 60%]
test/test_networking_utils.py::TestInstanceStoreMixin::test_mixin PASSED [ 60%]
test/test_networking_utils.py::TestNetworkingExceptions::test_http_error[HTTPError] PASSED [ 60%]
test/test_networking_utils.py::TestNetworkingExceptions::test_http_error[<lambda>] PASSED [ 61%]
test/test_networking_utils.py::TestNetworkingExceptions::test_redirect_http_error[HTTPError] PASSED [ 61%]
test/test_networking_utils.py::TestNetworkingExceptions::test_redirect_http_error[<lambda>] PASSED [ 61%]
test/test_networking_utils.py::TestNetworkingExceptions::test_compat_http_error PASSED [ 61%]
test/test_networking_utils.py::TestNetworkingExceptions::test_compat_http_error_autoclose PASSED [ 61%]
test/test_networking_utils.py::TestNetworkingExceptions::test_incomplete_read_error PASSED [ 61%]
test/test_plugins.py::TestPlugins::test_directories_containing_plugins PASSED [ 62%]
test/test_plugins.py::TestPlugins::test_extractor_classes PASSED         [ 62%]
test/test_plugins.py::TestPlugins::test_importing_zipped_module PASSED   [ 62%]
test/test_plugins.py::TestPlugins::test_postprocessor_classes PASSED     [ 62%]
test/test_postprocessors.py::TestMetadataFromField::test_field_to_template PASSED [ 62%]
test/test_postprocessors.py::TestMetadataFromField::test_format_to_regex PASSED [ 62%]
test/test_postprocessors.py::TestMetadataFromField::test_metadatafromfield PASSED [ 63%]
test/test_postprocessors.py::TestConvertThumbnail::test_escaping PASSED  [ 63%]
test/test_postprocessors.py::TestExec::test_parse_cmd PASSED             [ 63%]
test/test_postprocessors.py::TestModifyChaptersPP::test_make_concat_opts_CommonCase PASSED [ 63%]
test/test_postprocessors.py::TestModifyChaptersPP::test_make_concat_opts_NoZeroDurationChunkAtVideoEnd PASSED [ 63%]
test/test_postprocessors.py::TestModifyChaptersPP::test_make_concat_opts_NoZeroDurationChunkAtVideoStart PASSED [ 63%]
test/test_postprocessors.py::TestModifyChaptersPP::test_quote_for_concat_QuotesAtEnd PASSED [ 64%]
test/test_postprocessors.py::TestModifyChaptersPP::test_quote_for_concat_QuotesAtStart PASSED [ 64%]
test/test_postprocessors.py::TestModifyChaptersPP::test_quote_for_concat_RunsOfQuotes PASSED [ 64%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CanGetThroughUnaltered PASSED [ 64%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithAdjacentCuts PASSED [ 64%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithAdjacentSponsors PASSED [ 64%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithCutHidingSponsor PASSED [ 65%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithCuts PASSED [ 65%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithOverlappingCuts PASSED [ 65%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithOverlappingSponsors PASSED [ 65%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithRunsOfOverlappingCuts PASSED [ 65%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithRunsOfOverlappingSponsors PASSED [ 65%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithRunsOfOverlappingSponsorsAndCuts PASSED [ 66%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithSponsorCutInTheMiddle PASSED [ 66%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithSponsors PASSED [ 66%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChapterWithSponsorsAndCuts PASSED [ 66%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChaptersAfterLastCut PASSED [ 66%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_ChaptersAfterLastSponsor PASSED [ 66%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutCoincidesWithChapters PASSED [ 66%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutEndsAtChapterEnd PASSED [ 67%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutOverlapsMultipleChapters PASSED [ 67%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutStartsAtChapterStart PASSED [ 67%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutsAtVideoBoundaries PASSED [ 67%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutsOverlapChaptersAtVideoBoundaries PASSED [ 67%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_CutsWithinSomeChaptersAndOverlappingOthers PASSED [ 67%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_EverythingCut PASSED [ 68%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_EverythingSponsored PASSED [ 68%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_OverlappingSponsorsDifferentTitlesAfterCut PASSED [ 68%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SingleTinyChapterIsPreserved PASSED [ 68%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SmallestSponsorInTheOverlapGetsNamed PASSED [ 68%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorBlockChapters PASSED [ 68%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorCoincidesWithChapters PASSED [ 69%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorEndsAtChapterEnd PASSED [ 69%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorOverlapsMultipleChapters PASSED [ 69%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorStartsAtChapterStart PASSED [ 69%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsAtVideoBoundaries PASSED [ 69%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsNoLongerOverlapAfterCut PASSED [ 69%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsOverlapChaptersAtVideoBoundaries PASSED [ 70%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsStillOverlapAfterCut PASSED [ 70%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_SponsorsWithinSomeChaptersAndOverlappingOthers PASSED [ 70%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinyChapterAtTheStartPrependedToTheNext PASSED [ 70%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinyChaptersInTheOriginalArePreserved PASSED [ 70%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinyChaptersResultingFromCutsAreIgnored PASSED [ 70%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinyChaptersResultingFromSponsorOverlapAreIgnored PASSED [ 71%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinySponsorsAreIgnored PASSED [ 71%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinySponsorsOverlapsAreIgnored PASSED [ 71%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_TinySponsorsPrependedToTheNextSponsor PASSED [ 71%]
test/test_postprocessors.py::TestModifyChaptersPP::test_remove_marked_arrange_sponsors_UniqueNamesForOverlappingSponsors PASSED [ 71%]
test/test_socks.py::TestSocks4Proxy::test_socks4_no_auth[Urllib-http] PASSED [ 71%]
test/test_socks.py::TestSocks4Proxy::test_socks4_no_auth[Requests-http] SKIPPED [ 72%]
test/test_socks.py::TestSocks4Proxy::test_socks4_auth[Urllib-http] PASSED [ 72%]
test/test_socks.py::TestSocks4Proxy::test_socks4_auth[Requests-http] SKIPPED [ 72%]
test/test_socks.py::TestSocks4Proxy::test_socks4a_ipv4_target[Urllib-http] PASSED [ 72%]
test/test_socks.py::TestSocks4Proxy::test_socks4a_ipv4_target[Requests-http] SKIPPED [ 72%]
test/test_socks.py::TestSocks4Proxy::test_socks4a_domain_target[Urllib-http] PASSED [ 72%]
test/test_socks.py::TestSocks4Proxy::test_socks4a_domain_target[Requests-http] SKIPPED [ 73%]
test/test_socks.py::TestSocks4Proxy::test_ipv4_client_source_address[Urllib-http] PASSED [ 73%]
test/test_socks.py::TestSocks4Proxy::test_ipv4_client_source_address[Requests-http] SKIPPED [ 73%]
test/test_socks.py::TestSocks4Proxy::test_socks4_errors[91-Urllib-http] PASSED [ 73%]
test/test_socks.py::TestSocks4Proxy::test_socks4_errors[91-Requests-http] SKIPPED [ 73%]
test/test_socks.py::TestSocks4Proxy::test_socks4_errors[92-Urllib-http] PASSED [ 73%]
test/test_socks.py::TestSocks4Proxy::test_socks4_errors[92-Requests-http] SKIPPED [ 73%]
test/test_socks.py::TestSocks4Proxy::test_socks4_errors[93-Urllib-http] PASSED [ 74%]
test/test_socks.py::TestSocks4Proxy::test_socks4_errors[93-Requests-http] SKIPPED [ 74%]
test/test_socks.py::TestSocks4Proxy::test_ipv6_socks4_proxy[Urllib-http] PASSED [ 74%]
test/test_socks.py::TestSocks4Proxy::test_ipv6_socks4_proxy[Requests-http] SKIPPED [ 74%]
test/test_socks.py::TestSocks4Proxy::test_timeout[Urllib-http] PASSED    [ 74%]
test/test_socks.py::TestSocks4Proxy::test_timeout[Requests-http] SKIPPED [ 74%]
test/test_socks.py::TestSocks5Proxy::test_socks5_no_auth[Urllib-http] PASSED [ 75%]
test/test_socks.py::TestSocks5Proxy::test_socks5_no_auth[Requests-http] SKIPPED [ 75%]
test/test_socks.py::TestSocks5Proxy::test_socks5_user_pass[Urllib-http] PASSED [ 75%]
test/test_socks.py::TestSocks5Proxy::test_socks5_user_pass[Requests-http] SKIPPED [ 75%]
test/test_socks.py::TestSocks5Proxy::test_socks5_ipv4_target[Urllib-http] PASSED [ 75%]
test/test_socks.py::TestSocks5Proxy::test_socks5_ipv4_target[Requests-http] SKIPPED [ 75%]
test/test_socks.py::TestSocks5Proxy::test_socks5_domain_target[Urllib-http] PASSED [ 76%]
test/test_socks.py::TestSocks5Proxy::test_socks5_domain_target[Requests-http] SKIPPED [ 76%]
test/test_socks.py::TestSocks5Proxy::test_socks5h_domain_target[Urllib-http] PASSED [ 76%]
test/test_socks.py::TestSocks5Proxy::test_socks5h_domain_target[Requests-http] SKIPPED [ 76%]
test/test_socks.py::TestSocks5Proxy::test_socks5h_ip_target[Urllib-http] PASSED [ 76%]
test/test_socks.py::TestSocks5Proxy::test_socks5h_ip_target[Requests-http] SKIPPED [ 76%]
test/test_socks.py::TestSocks5Proxy::test_socks5_ipv6_destination[Urllib-http] PASSED [ 77%]
test/test_socks.py::TestSocks5Proxy::test_socks5_ipv6_destination[Requests-http] SKIPPED [ 77%]
test/test_socks.py::TestSocks5Proxy::test_ipv6_socks5_proxy[Urllib-http] PASSED [ 77%]
test/test_socks.py::TestSocks5Proxy::test_ipv6_socks5_proxy[Requests-http] SKIPPED [ 77%]
test/test_socks.py::TestSocks5Proxy::test_ipv4_client_source_address[Urllib-http] PASSED [ 77%]
test/test_socks.py::TestSocks5Proxy::test_ipv4_client_source_address[Requests-http] SKIPPED [ 77%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[1-Urllib-http] PASSED [ 78%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[1-Requests-http] SKIPPED [ 78%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[2-Urllib-http] PASSED [ 78%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[2-Requests-http] SKIPPED [ 78%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[3-Urllib-http] PASSED [ 78%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[3-Requests-http] SKIPPED [ 78%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[4-Urllib-http] PASSED [ 79%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[4-Requests-http] SKIPPED [ 79%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[5-Urllib-http] PASSED [ 79%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[5-Requests-http] SKIPPED [ 79%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[6-Urllib-http] PASSED [ 79%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[6-Requests-http] SKIPPED [ 79%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[7-Urllib-http] PASSED [ 80%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[7-Requests-http] SKIPPED [ 80%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[8-Urllib-http] PASSED [ 80%]
test/test_socks.py::TestSocks5Proxy::test_socks5_errors[8-Requests-http] SKIPPED [ 80%]
test/test_socks.py::TestSocks5Proxy::test_timeout[Urllib-http] PASSED    [ 80%]
test/test_utils.py::TestUtil::test_LazyList PASSED                       [ 80%]
test/test_utils.py::TestUtil::test_LazyList_laziness PASSED              [ 80%]
test/test_utils.py::TestUtil::test_Popen_windows_escaping SKIPPED (O...) [ 81%]
test/test_utils.py::TestUtil::test_age_restricted PASSED                 [ 81%]
test/test_utils.py::TestUtil::test_args_to_str PASSED                    [ 81%]
test/test_utils.py::TestUtil::test_base_url PASSED                       [ 81%]
test/test_utils.py::TestUtil::test_caesar PASSED                         [ 81%]
test/test_utils.py::TestUtil::test_clean_html PASSED                     [ 81%]
test/test_utils.py::TestUtil::test_clean_podcast_url PASSED              [ 82%]
test/test_utils.py::TestUtil::test_cli_bool_option PASSED                [ 82%]
test/test_utils.py::TestUtil::test_cli_option PASSED                     [ 82%]
test/test_utils.py::TestUtil::test_cli_valueless_option PASSED           [ 82%]
test/test_utils.py::TestUtil::test_date_from_str PASSED                  [ 82%]
test/test_utils.py::TestUtil::test_daterange PASSED                      [ 82%]
test/test_utils.py::TestUtil::test_datetime_from_str PASSED              [ 83%]
test/test_utils.py::TestUtil::test_detect_exe_version PASSED             [ 83%]
test/test_utils.py::TestUtil::test_determine_ext PASSED                  [ 83%]
test/test_utils.py::TestUtil::test_determine_file_encoding PASSED        [ 83%]
test/test_utils.py::TestUtil::test_dfxp2srt PASSED                       [ 83%]
test/test_utils.py::TestUtil::test_dict_get PASSED                       [ 83%]
test/test_utils.py::TestUtil::test_encode_base_n PASSED                  [ 84%]
test/test_utils.py::TestUtil::test_encode_compat_str PASSED              [ 84%]
test/test_utils.py::TestUtil::test_escape_rfc3986 PASSED                 [ 84%]
test/test_utils.py::TestUtil::test_expand_path PASSED                    [ 84%]
test/test_utils.py::TestUtil::test_extract_attributes PASSED             [ 84%]
test/test_utils.py::TestUtil::test_extract_basic_auth PASSED             [ 84%]
test/test_utils.py::TestUtil::test_find_xpath_attr PASSED                [ 85%]
test/test_utils.py::TestUtil::test_fix_xml_ampersands PASSED             [ 85%]
test/test_utils.py::TestUtil::test_float_or_none PASSED                  [ 85%]
test/test_utils.py::TestUtil::test_format_bytes PASSED                   [ 85%]
test/test_utils.py::TestUtil::test_get_compatible_ext PASSED             [ 85%]
test/test_utils.py::TestUtil::test_get_element_by_attribute PASSED       [ 85%]
test/test_utils.py::TestUtil::test_get_element_by_class PASSED           [ 86%]
test/test_utils.py::TestUtil::test_get_element_html_by_attribute PASSED  [ 86%]
test/test_utils.py::TestUtil::test_get_element_html_by_class PASSED      [ 86%]
test/test_utils.py::TestUtil::test_get_element_text_and_html_by_tag PASSED [ 86%]
test/test_utils.py::TestUtil::test_get_elements_by_attribute PASSED      [ 86%]
test/test_utils.py::TestUtil::test_get_elements_by_class PASSED          [ 86%]
test/test_utils.py::TestUtil::test_get_elements_html_by_attribute PASSED [ 86%]
test/test_utils.py::TestUtil::test_get_elements_html_by_class PASSED     [ 87%]
test/test_utils.py::TestUtil::test_get_elements_text_and_html_by_attribute PASSED [ 87%]
test/test_utils.py::TestUtil::test_hide_login_info PASSED                [ 87%]
test/test_utils.py::TestUtil::test_http_header_dict PASSED               [ 87%]
test/test_utils.py::TestUtil::test_int_or_none PASSED                    [ 87%]
test/test_utils.py::TestUtil::test_intlist_to_bytes PASSED               [ 87%]
test/test_utils.py::TestUtil::test_iri_to_uri PASSED                     [ 88%]
test/test_utils.py::TestUtil::test_is_html PASSED                        [ 88%]
test/test_utils.py::TestUtil::test_js_to_json_common_constructors PASSED [ 88%]
test/test_utils.py::TestUtil::test_js_to_json_edgecases PASSED           [ 88%]
test/test_utils.py::TestUtil::test_js_to_json_malformed PASSED           [ 88%]
test/test_utils.py::TestUtil::test_js_to_json_realworld PASSED           [ 88%]
test/test_utils.py::TestUtil::test_js_to_json_template_literal PASSED    [ 89%]
test/test_utils.py::TestUtil::test_js_to_json_vars_strings PASSED        [ 89%]
test/test_utils.py::TestUtil::test_limit_length PASSED                   [ 89%]
test/test_utils.py::TestUtil::test_locked_file PASSED                    [ 89%]
test/test_utils.py::TestUtil::test_lowercase_escape PASSED               [ 89%]
test/test_utils.py::TestUtil::test_match_str PASSED                      [ 89%]
test/test_utils.py::TestUtil::test_merge_dicts PASSED                    [ 90%]
test/test_utils.py::TestUtil::test_mimetype2ext PASSED                   [ 90%]
test/test_utils.py::TestUtil::test_month_by_name PASSED                  [ 90%]
test/test_utils.py::TestUtil::test_multipart_encode PASSED               [ 90%]
test/test_utils.py::TestUtil::test_normalize_url PASSED                  [ 90%]
test/test_utils.py::TestUtil::test_ohdave_rsa_encrypt PASSED             [ 90%]
test/test_utils.py::TestUtil::test_ordered_set PASSED                    [ 91%]
test/test_utils.py::TestUtil::test_paged_list PASSED                     [ 91%]
test/test_utils.py::TestUtil::test_parse_age_limit PASSED                [ 91%]
test/test_utils.py::TestUtil::test_parse_bitrate PASSED                  [ 91%]
test/test_utils.py::TestUtil::test_parse_codecs PASSED                   [ 91%]
test/test_utils.py::TestUtil::test_parse_count PASSED                    [ 91%]
test/test_utils.py::TestUtil::test_parse_dfxp_time_expr PASSED           [ 92%]
test/test_utils.py::TestUtil::test_parse_duration PASSED                 [ 92%]
test/test_utils.py::TestUtil::test_parse_filesize PASSED                 [ 92%]
test/test_utils.py::TestUtil::test_parse_iso8601 PASSED                  [ 92%]
test/test_utils.py::TestUtil::test_parse_resolution PASSED               [ 92%]
test/test_utils.py::TestUtil::test_pkcs1pad PASSED                       [ 92%]
test/test_utils.py::TestUtil::test_prepend_extension PASSED              [ 93%]
test/test_utils.py::TestUtil::test_read_batch_urls PASSED                [ 93%]
test/test_utils.py::TestUtil::test_remove_dot_segments PASSED            [ 93%]
test/test_utils.py::TestUtil::test_remove_end PASSED                     [ 93%]
test/test_utils.py::TestUtil::test_remove_quotes PASSED                  [ 93%]
test/test_utils.py::TestUtil::test_remove_start PASSED                   [ 93%]
test/test_utils.py::TestUtil::test_render_table PASSED                   [ 93%]
test/test_utils.py::TestUtil::test_replace_extension PASSED              [ 94%]
test/test_utils.py::TestUtil::test_rot47 PASSED                          [ 94%]
test/test_utils.py::TestUtil::test_sanitize_filename PASSED              [ 94%]
test/test_utils.py::TestUtil::test_sanitize_filename_restricted PASSED   [ 94%]
test/test_utils.py::TestUtil::test_sanitize_ids PASSED                   [ 94%]
test/test_utils.py::TestUtil::test_sanitize_path PASSED                  [ 94%]
test/test_utils.py::TestUtil::test_sanitize_url PASSED                   [ 95%]
test/test_utils.py::TestUtil::test_shell_quote PASSED                    [ 95%]
test/test_utils.py::TestUtil::test_smuggle_url PASSED                    [ 95%]
test/test_utils.py::TestUtil::test_str_to_int PASSED                     [ 95%]
test/test_utils.py::TestUtil::test_strip_jsonp PASSED                    [ 95%]
test/test_utils.py::TestUtil::test_strip_or_none PASSED                  [ 95%]
test/test_utils.py::TestUtil::test_subtitles_filename PASSED             [ 96%]
test/test_utils.py::TestUtil::test_timeconvert PASSED                    [ 96%]
test/test_utils.py::TestUtil::test_traverse_obj PASSED                   [ 96%]
test/test_utils.py::TestUtil::test_try_call PASSED                       [ 96%]
test/test_utils.py::TestUtil::test_unescape_html PASSED                  [ 96%]
test/test_utils.py::TestUtil::test_unified_dates PASSED                  [ 96%]
test/test_utils.py::TestUtil::test_unified_timestamps PASSED             [ 97%]
test/test_utils.py::TestUtil::test_update_url_query PASSED               [ 97%]
test/test_utils.py::TestUtil::test_uppercase_escape PASSED               [ 97%]
test/test_utils.py::TestUtil::test_url_basename PASSED                   [ 97%]
test/test_utils.py::TestUtil::test_url_or_none PASSED                    [ 97%]
test/test_utils.py::TestUtil::test_urlencode_postdata PASSED             [ 97%]
test/test_utils.py::TestUtil::test_urljoin PASSED                        [ 98%]
test/test_utils.py::TestUtil::test_urshift PASSED                        [ 98%]
test/test_utils.py::TestUtil::test_variadic PASSED                       [ 98%]
test/test_utils.py::TestUtil::test_version_tuple PASSED                  [ 98%]
test/test_utils.py::TestUtil::test_xpath_attr PASSED                     [ 98%]
test/test_utils.py::TestUtil::test_xpath_element PASSED                  [ 98%]
test/test_utils.py::TestUtil::test_xpath_text PASSED                     [ 99%]
test/test_utils.py::TestUtil::test_xpath_with_ns PASSED                  [ 99%]
test/test_verbose_output.py::TestVerboseOutput::test_private_info_arg PASSED [ 99%]
test/test_verbose_output.py::TestVerboseOutput::test_private_info_eq PASSED [ 99%]
test/test_verbose_output.py::TestVerboseOutput::test_private_info_shortarg PASSED [ 99%]
test/test_verbose_output.py::TestVerboseOutput::test_private_info_shortarg_eq PASSED [ 99%]
test/test_youtube_misc.py::TestYoutubeMisc::test_youtube_extract PASSED  [100%]

=================================== FAILURES ===================================
___________________________ TestHttpFD.test_chunked ____________________________

self = <test.test_downloader_http.TestHttpFD testMethod=test_chunked>

    def test_chunked(self):
>       self.download_all({
            'http_chunk_size': 1000,
        })

test/test_downloader_http.py:100: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/test_downloader_http.py:94: in download_all
    self.download(params, ep)
test/test_downloader_http.py:86: in download
    self.assertTrue(downloader.real_download(filename, {
yt_dlp/downloader/http.py:365: in real_download
    return download()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

    def download():
        data_len = ctx.data.headers.get('Content-length')
    
        if ctx.data.headers.get('Content-encoding'):
            # Content-encoding is present, Content-length is not reliable anymore as we are
            # doing auto decompression. (See: https://github.com/yt-dlp/yt-dlp/pull/6176)
            data_len = None
    
        # Range HTTP header may be ignored/unsupported by a webserver
        # (e.g. extractor/scivee.py, extractor/bambuser.py).
        # However, for a test we still would like to download just a piece of a file.
        # To achieve this we limit data_len to _TEST_FILE_SIZE and manually control
        # block size when downloading a file.
        if is_test and (data_len is None or int(data_len) > self._TEST_FILE_SIZE):
            data_len = self._TEST_FILE_SIZE
    
        if data_len is not None:
            data_len = int(data_len) + ctx.resume_len
            min_data_len = self.params.get('min_filesize')
            max_data_len = self.params.get('max_filesize')
            if min_data_len is not None and data_len < min_data_len:
                self.to_screen(
                    f'\r[download] File is smaller than min-filesize ({data_len} bytes < {min_data_len} bytes). Aborting.')
                return False
            if max_data_len is not None and data_len > max_data_len:
                self.to_screen(
                    f'\r[download] File is larger than max-filesize ({data_len} bytes > {max_data_len} bytes). Aborting.')
                return False
    
        byte_counter = 0 + ctx.resume_len
        block_size = ctx.block_size
        start = time.time()
    
        # measure time over whole while-loop, so slow_down() and best_block_size() work together properly
        now = None  # needed for slow_down() in the first loop run
        before = start  # start measuring
    
        def retry(e):
            close_stream()
            ctx.resume_len = (byte_counter if ctx.tmpfilename == '-'
                              else os.path.getsize(encodeFilename(ctx.tmpfilename)))
            raise RetryDownload(e)
    
        while True:
            try:
                # Download and write
                data_block = ctx.data.read(block_size if not is_test else min(block_size, data_len - byte_counter))
            except TransportError as err:
                retry(err)
    
            byte_counter += len(data_block)
    
            # exit loop when download is finished
            if len(data_block) == 0:
                break
    
            # Open destination file just in time
            if ctx.stream is None:
                try:
                    ctx.stream, ctx.tmpfilename = self.sanitize_open(
                        ctx.tmpfilename, ctx.open_mode)
                    assert ctx.stream is not None
                    ctx.filename = self.undo_temp_name(ctx.tmpfilename)
                    self.report_destination(ctx.filename)
                except OSError as err:
                    self.report_error('unable to open for writing: %s' % str(err))
                    return False
    
                if self.params.get('xattr_set_filesize', False) and data_len is not None:
                    try:
                        write_xattr(ctx.tmpfilename, 'user.ytdl.filesize', str(data_len).encode())
                    except (XAttrUnavailableError, XAttrMetadataError) as err:
                        self.report_error('unable to set filesize xattr: %s' % str(err))
    
            try:
                ctx.stream.write(data_block)
            except OSError as err:
                self.to_stderr('\n')
                self.report_error('unable to write data: %s' % str(err))
                return False
    
            # Apply rate limit
            self.slow_down(start, now, byte_counter - ctx.resume_len)
    
            # end measuring of one loop run
            now = time.time()
            after = now
    
            # Adjust block size
            if not self.params.get('noresizebuffer', False):
                block_size = self.best_block_size(after - before, len(data_block))
    
            before = after
    
            # Progress message
>           speed = self.calc_speed(start, now, byte_counter - ctx.resume_len)
E           AttributeError: 'HttpFD' object has no attribute 'calc_speed'

yt_dlp/downloader/http.py:296: AttributeError
___________________________ TestHttpFD.test_regular ____________________________

self = <test.test_downloader_http.TestHttpFD testMethod=test_regular>

    def test_regular(self):
>       self.download_all({})

test/test_downloader_http.py:97: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test/test_downloader_http.py:94: in download_all
    self.download(params, ep)
test/test_downloader_http.py:86: in download
    self.assertTrue(downloader.real_download(filename, {
yt_dlp/downloader/http.py:365: in real_download
    return download()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

    def download():
        data_len = ctx.data.headers.get('Content-length')
    
        if ctx.data.headers.get('Content-encoding'):
            # Content-encoding is present, Content-length is not reliable anymore as we are
            # doing auto decompression. (See: https://github.com/yt-dlp/yt-dlp/pull/6176)
            data_len = None
    
        # Range HTTP header may be ignored/unsupported by a webserver
        # (e.g. extractor/scivee.py, extractor/bambuser.py).
        # However, for a test we still would like to download just a piece of a file.
        # To achieve this we limit data_len to _TEST_FILE_SIZE and manually control
        # block size when downloading a file.
        if is_test and (data_len is None or int(data_len) > self._TEST_FILE_SIZE):
            data_len = self._TEST_FILE_SIZE
    
        if data_len is not None:
            data_len = int(data_len) + ctx.resume_len
            min_data_len = self.params.get('min_filesize')
            max_data_len = self.params.get('max_filesize')
            if min_data_len is not None and data_len < min_data_len:
                self.to_screen(
                    f'\r[download] File is smaller than min-filesize ({data_len} bytes < {min_data_len} bytes). Aborting.')
                return False
            if max_data_len is not None and data_len > max_data_len:
                self.to_screen(
                    f'\r[download] File is larger than max-filesize ({data_len} bytes > {max_data_len} bytes). Aborting.')
                return False
    
        byte_counter = 0 + ctx.resume_len
        block_size = ctx.block_size
        start = time.time()
    
        # measure time over whole while-loop, so slow_down() and best_block_size() work together properly
        now = None  # needed for slow_down() in the first loop run
        before = start  # start measuring
    
        def retry(e):
            close_stream()
            ctx.resume_len = (byte_counter if ctx.tmpfilename == '-'
                              else os.path.getsize(encodeFilename(ctx.tmpfilename)))
            raise RetryDownload(e)
    
        while True:
            try:
                # Download and write
                data_block = ctx.data.read(block_size if not is_test else min(block_size, data_len - byte_counter))
            except TransportError as err:
                retry(err)
    
            byte_counter += len(data_block)
    
            # exit loop when download is finished
            if len(data_block) == 0:
                break
    
            # Open destination file just in time
            if ctx.stream is None:
                try:
                    ctx.stream, ctx.tmpfilename = self.sanitize_open(
                        ctx.tmpfilename, ctx.open_mode)
                    assert ctx.stream is not None
                    ctx.filename = self.undo_temp_name(ctx.tmpfilename)
                    self.report_destination(ctx.filename)
                except OSError as err:
                    self.report_error('unable to open for writing: %s' % str(err))
                    return False
    
                if self.params.get('xattr_set_filesize', False) and data_len is not None:
                    try:
                        write_xattr(ctx.tmpfilename, 'user.ytdl.filesize', str(data_len).encode())
                    except (XAttrUnavailableError, XAttrMetadataError) as err:
                        self.report_error('unable to set filesize xattr: %s' % str(err))
    
            try:
                ctx.stream.write(data_block)
            except OSError as err:
                self.to_stderr('\n')
                self.report_error('unable to write data: %s' % str(err))
                return False
    
            # Apply rate limit
            self.slow_down(start, now, byte_counter - ctx.resume_len)
    
            # end measuring of one loop run
            now = time.time()
            after = now
    
            # Adjust block size
            if not self.params.get('noresizebuffer', False):
                block_size = self.best_block_size(after - before, len(data_block))
    
            before = after
    
            # Progress message
>           speed = self.calc_speed(start, now, byte_counter - ctx.resume_len)
E           AttributeError: 'HttpFD' object has no attribute 'calc_speed'

yt_dlp/downloader/http.py:296: AttributeError
=========================== short test summary info ============================
SKIPPED [1] test/test_downloader_external.py:115: ffmpeg not found
SKIPPED [1] test/test_jsinterp.py:111: Not implemented
SKIPPED [1] test/test_jsinterp.py:373: Not implemented
SKIPPED [1] test/test_jsinterp.py:335: Not implemented
SKIPPED [1] test/test_networking.py:309: Requests request handler is not available
SKIPPED [1] test/test_networking.py:320: Requests request handler is not available
SKIPPED [1] test/test_networking.py:338: Requests request handler is not available
SKIPPED [1] test/test_networking.py:350: Requests request handler is not available
SKIPPED [1] test/test_networking.py:365: Requests request handler is not available
SKIPPED [1] test/test_networking.py:372: Requests request handler is not available
SKIPPED [1] test/test_networking.py:382: Requests request handler is not available
SKIPPED [1] test/test_networking.py:393: Requests request handler is not available
SKIPPED [1] test/test_networking.py:448: Requests request handler is not available
SKIPPED [1] test/test_networking.py:480: Requests request handler is not available
SKIPPED [1] test/test_networking.py:486: Requests request handler is not available
SKIPPED [1] test/test_networking.py:492: Requests request handler is not available
SKIPPED [1] test/test_networking.py:509: Requests request handler is not available
SKIPPED [1] test/test_networking.py:525: Requests request handler is not available
SKIPPED [1] test/test_networking.py:541: Requests request handler is not available
SKIPPED [1] test/test_networking.py:549: Requests request handler is not available
SKIPPED [2] test/test_networking.py:555: brotli support is not installed
SKIPPED [1] test/test_networking.py:566: Requests request handler is not available
SKIPPED [1] test/test_networking.py:576: Requests request handler is not available
SKIPPED [1] test/test_networking.py:586: Requests request handler is not available
SKIPPED [1] test/test_networking.py:597: Requests request handler is not available
SKIPPED [1] test/test_networking.py:607: Requests request handler is not available
SKIPPED [1] test/test_networking.py:637: Requests request handler is not available
SKIPPED [1] test/test_networking.py:663: Requests request handler is not available
SKIPPED [1] test/test_networking.py:673: Requests request handler is not available
SKIPPED [1] test/test_networking.py:681: Requests request handler is not available
SKIPPED [1] test/test_networking.py:719: Requests request handler is not available
SKIPPED [1] test/test_networking.py:725: Requests request handler is not available
SKIPPED [1] test/test_networking.py:732: Requests request handler is not available
SKIPPED [1] test/test_networking.py:739: Requests request handler is not available
SKIPPED [11] test/test_networking.py:824: Requests request handler is not available
SKIPPED [8] test/test_networking.py:855: Requests request handler is not available
SKIPPED [2] test/test_networking.py:996: Requests request handler is not available
SKIPPED [1] test/test_networking.py:1005: Requests request handler is not available
SKIPPED [2] test/test_networking.py:1010: Requests request handler is not available
SKIPPED [6] test/test_networking.py:1019: Requests request handler is not available
SKIPPED [1] test/test_networking.py:1028: Requests request handler is not available
SKIPPED [4] test/test_networking.py:1033: Requests request handler is not available
SKIPPED [5] test/test_networking.py:1038: Requests request handler is not available
SKIPPED [1] test/test_networking_utils.py:96: certifi is not installed
SKIPPED [1] test/test_socks.py:266: Requests request handler is not available
SKIPPED [1] test/test_socks.py:274: Requests request handler is not available
SKIPPED [1] test/test_socks.py:284: Requests request handler is not available
SKIPPED [1] test/test_socks.py:292: Requests request handler is not available
SKIPPED [1] test/test_socks.py:301: Requests request handler is not available
SKIPPED [3] test/test_socks.py:311: Requests request handler is not available
SKIPPED [1] test/test_socks.py:323: Requests request handler is not available
SKIPPED [1] test/test_socks.py:332: Requests request handler is not available
SKIPPED [1] test/test_socks.py:342: Requests request handler is not available
SKIPPED [1] test/test_socks.py:350: Requests request handler is not available
SKIPPED [1] test/test_socks.py:363: Requests request handler is not available
SKIPPED [1] test/test_socks.py:371: Requests request handler is not available
SKIPPED [1] test/test_socks.py:379: Requests request handler is not available
SKIPPED [1] test/test_socks.py:388: Requests request handler is not available
SKIPPED [1] test/test_socks.py:397: Requests request handler is not available
SKIPPED [1] test/test_socks.py:405: Requests request handler is not available
SKIPPED [1] test/test_socks.py:416: Requests request handler is not available
SKIPPED [8] test/test_socks.py:425: Requests request handler is not available
SKIPPED [1] test/test_utils.py:2398: Only relevant on Windows
FAILED test/test_downloader_http.py::TestHttpFD::test_chunked - AttributeError: 'HttpFD' object has no attribute 'calc_speed'
FAILED test/test_downloader_http.py::TestHttpFD::test_regular - AttributeError: 'HttpFD' object has no attribute 'calc_speed'
=== 2 failed, 509 passed, 104 skipped, 5705 deselected in 120.03s (0:02:00) ====
##[error]Process completed with exit code 1.


Changed files:
yt_dlp/downloader/http.py
yt_dlp/downloader/rtmp.py

Fix diff:
diff --git a/yt_dlp/downloader/http.py b/yt_dlp/downloader/http.py
index f5237443e..a1f95db29 100644
--- a/yt_dlp/downloader/http.py
+++ b/yt_dlp/downloader/http.py
@@ -11,6 +11,7 @@
 )
 from ..utils import (
     ContentTooShortError,
+    FormatProgressInfos,
     RetryManager,
     ThrottledDownload,
     XAttrMetadataError,
@@ -293,11 +294,11 @@ def retry(e):
                 before = after
 
                 # Progress message
-                speed = self.calc_speed(start, now, byte_counter - ctx.resume_len)
+                speed = FormatProgressInfos.calc_speed(start, now, byte_counter - ctx.resume_len)
                 if ctx.data_len is None:
                     eta = None
                 else:
-                    eta = self.calc_eta(start, time.time(), ctx.data_len - ctx.resume_len, byte_counter - ctx.resume_len)
+                    eta = FormatProgressInfos.calc_eta(start, time.time(), ctx.data_len - ctx.resume_len, byte_counter - ctx.resume_len)
 
                 self._hook_progress({
                     'status': 'downloading',
diff --git a/yt_dlp/downloader/rtmp.py b/yt_dlp/downloader/rtmp.py
index 0e0952599..9373f3585 100644
--- a/yt_dlp/downloader/rtmp.py
+++ b/yt_dlp/downloader/rtmp.py
@@ -5,6 +5,7 @@
 
 from .common import FileDownloader
 from ..utils import (
+    FormatProgressInfos,
     Popen,
     check_executable,
     encodeArgument,
@@ -50,8 +51,8 @@ def run_rtmpdump(args):
                             resume_percent = percent
                             resume_downloaded_data_len = downloaded_data_len
                         time_now = time.time()
-                        eta = self.calc_eta(start, time_now, 100 - resume_percent, percent - resume_percent)
-                        speed = self.calc_speed(start, time_now, downloaded_data_len - resume_downloaded_data_len)
+                        eta = FormatProgressInfos.calc_eta(start, time_now, 100 - resume_percent, percent - resume_percent)
+                        speed = FormatProgressInfos.calc_speed(start, time_now, downloaded_data_len - resume_downloaded_data_len)
                         data_len = None
                         if percent > 0:
                             data_len = int(downloaded_data_len * 100 / percent)