4.1.1: pytest is failing

I'm trying to package your module as an rpm package. So I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.

python3 -sBm build -w --no-isolation
because I'm calling build with --no-isolation I'm using during all processes only locally installed modules
install .whl file in </install/prefix>
run pytest with PYTHONPATH pointing to sitearch and sitelib inside </install/prefix>

Here is pytest output.

        Lists through all the registered AuthHandlers to find one that is willing
        to handle for the requested capabilities, config and provider.

        :type host: string
        :param host: The name of the host

        :type config:
        :param config:

        :type provider:
        :param provider:

        Returns:
            An implementation of AuthHandler.

        Raises:
            boto.exception.NoAuthHandlerFound
        """
        ready_handlers = []
        auth_handlers = boto.plugin.get_plugin(AuthHandler, requested_capability)
        for handler in auth_handlers:
            try:
                ready_handlers.append(handler(host, config, provider))
            except boto.auth_handler.NotReadyToAuthenticate:
                pass

        if not ready_handlers:
            checked_handlers = auth_handlers
            names = [handler.__name__ for handler in checked_handlers]
>           raise boto.exception.NoAuthHandlerFound(
                'No handler was ready to authenticate. %d handlers were checked.'
                ' %s '
                'Check your credentials' % (len(names), str(names)))
E           boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked.

        Lists through all the registered AuthHandlers to find one that is willing
        to handle for the requested capabilities, config and provider.

        :type host: string
        :param host: The name of the host

        :type config:
        :param config:

        :type provider:
        :param provider:

        Returns:
            An implementation of AuthHandler.

        Raises:
            boto.exception.NoAuthHandlerFound
        """
        ready_handlers = []
        auth_handlers = boto.plugin.get_plugin(AuthHandler, requested_capability)
        for handler in auth_handlers:
            try:
                ready_handlers.append(handler(host, config, provider))
            except boto.auth_handler.NotReadyToAuthenticate:
                pass

        if not ready_handlers:
            checked_handlers = auth_handlers
            names = [handler.__name__ for handler in checked_handlers]
>           raise boto.exception.NoAuthHandlerFound(
                'No handler was ready to authenticate. %d handlers were checked.'
                ' %s '
                'Check your credentials' % (len(names), str(names)))
E           boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked.

        Lists through all the registered AuthHandlers to find one that is willing
        to handle for the requested capabilities, config and provider.

        :type host: string
        :param host: The name of the host

        :type config:
        :param config:

        :type provider:
        :param provider:

        Returns:
            An implementation of AuthHandler.

        Raises:
            boto.exception.NoAuthHandlerFound
        """
        ready_handlers = []
        auth_handlers = boto.plugin.get_plugin(AuthHandler, requested_capability)
        for handler in auth_handlers:
            try:
                ready_handlers.append(handler(host, config, provider))
            except boto.auth_handler.NotReadyToAuthenticate:
                pass

        if not ready_handlers:
            checked_handlers = auth_handlers
            names = [handler.__name__ for handler in checked_handlers]
>           raise boto.exception.NoAuthHandlerFound(
                'No handler was ready to authenticate. %d handlers were checked.'
                ' %s '
                'Check your credentials' % (len(names), str(names)))
E           boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked.

        Lists through all the registered AuthHandlers to find one that is willing
        to handle for the requested capabilities, config and provider.

        :type host: string
        :param host: The name of the host

        :type config:
        :param config:

        :type provider:
        :param provider:

        Returns:
            An implementation of AuthHandler.

        Raises:
            boto.exception.NoAuthHandlerFound
        """
        ready_handlers = []
        auth_handlers = boto.plugin.get_plugin(AuthHandler, requested_capability)
        for handler in auth_handlers:
            try:
                ready_handlers.append(handler(host, config, provider))
            except boto.auth_handler.NotReadyToAuthenticate:
                pass

        if not ready_handlers:
            checked_handlers = auth_handlers
            names = [handler.__name__ for handler in checked_handlers]
>           raise boto.exception.NoAuthHandlerFound(
                'No handler was ready to authenticate. %d handlers were checked.'
                ' %s '
                'Check your credentials' % (len(names), str(names)))
E           boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Handler'] Check your credentials

/usr/lib/python3.8/site-packages/boto/auth.py:1018: NoAuthHandlerFound
---------------------------------------------------------------------------- Captured log call -----------------------------------------------------------------------------
ERROR    boto:utils.py:230 Caught exception reading instance data
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/boto/utils.py", line 217, in retry_url
    r = opener.open(req, timeout=timeout)
  File "/usr/lib64/python3.8/urllib/request.py", line 525, in open
    response = self._open(req, data)
  File "/usr/lib64/python3.8/urllib/request.py", line 542, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/usr/lib64/python3.8/urllib/request.py", line 502, in _call_chain
    result = func(*args)
  File "/usr/lib64/python3.8/urllib/request.py", line 1383, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "/usr/lib64/python3.8/urllib/request.py", line 1358, in do_open
    r = h.getresponse()
  File "/home/tkloczko/rpmbuild/BUILDROOT/python-vcrpy-4.1.1-5.fc35.x86_64/usr/lib/python3.8/site-packages/vcr/stubs/__init__.py", line 244, in getresponse
    self.real_connection.request(
  File "/usr/lib64/python3.8/http/client.py", line 1256, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib64/python3.8/http/client.py", line 1302, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib64/python3.8/http/client.py", line 1251, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib64/python3.8/http/client.py", line 1011, in _send_output
    self.send(msg)
  File "/usr/lib64/python3.8/http/client.py", line 951, in send
    self.connect()
  File "/usr/lib64/python3.8/http/client.py", line 922, in connect
    self.sock = self._create_connection(
  File "/usr/lib64/python3.8/socket.py", line 808, in create_connection
    raise err
  File "/usr/lib64/python3.8/socket.py", line 796, in create_connection
    sock.connect(sa)
socket.timeout: timed out
ERROR    boto:utils.py:236 Unable to read instance data, giving up
_________________________________________________________________________ test_status_code[https] __________________________________________________________________________

self = <urllib3.connectionpool.HTTPSConnectionPool object at 0x7fbb7cd14850>, method = 'GET', url = '/', body = None
headers = {'User-Agent': 'python-requests/2.27.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'}
retries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False
timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None, release_conn = False, chunked = False, body_pos = None
response_kw = {'decode_content': False, 'preload_content': False}, parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None)
destination_scheme = None, conn = None, release_this_conn = True, http_tunnel_required = False, err = None, clean_exit = False

    def urlopen(
        self,
        method,
        url,
        body=None,
        headers=None,
        retries=None,
        redirect=True,
        assert_same_host=True,
        timeout=_Default,
        pool_timeout=None,
        release_conn=None,
        chunked=False,
        body_pos=None,
        **response_kw
    ):
        """
        Get a connection from the pool and perform an HTTP request. This is the
        lowest level call for making a request, so you'll need to specify all
        the raw details.

        .. note::

           More commonly, it's appropriate to use a convenience method provided
           by :class:`.RequestMethods`, such as :meth:`request`.

        .. note::

           `release_conn` will only behave as expected if
           `preload_content=False` because we want to make
           `preload_content=False` the default behaviour someday soon without
           breaking backwards compatibility.

        :param method:
            HTTP request method (such as GET, POST, PUT, etc.)

        :param url:
            The URL to perform the request on.

        :param body:
            Data to send in the request body, either :class:`str`, :class:`bytes`,
            an iterable of :class:`str`/:class:`bytes`, or a file-like object.

        :param headers:
            Dictionary of custom headers to send, such as User-Agent,
            If-None-Match, etc. If None, pool headers are used. If provided,
            these headers completely replace any pool-specific headers.

        :param retries:
            Configure the number of retries to allow before raising a
            :class:`~urllib3.exceptions.MaxRetryError` exception.

            Pass ``None`` to retry until you receive a response. Pass a
            :class:`~urllib3.util.retry.Retry` object for fine-grained control
            over different types of retries.
            Pass an integer number to retry connection errors that many times,
            but no other types of errors. Pass zero to never retry.

            If ``False``, then retries are disabled and any exception is raised
            immediately. Also, instead of raising a MaxRetryError on redirects,
            the redirect response will be returned.

        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.

        :param redirect:
            If True, automatically handle redirects (status codes 301, 302,
            303, 307, 308). Each redirect counts as a retry. Disabling retries
            will disable redirect, too.

        :param assert_same_host:
            If ``True``, will make sure that the host of the pool requests is
            consistent else will raise HostChangedError. When ``False``, you can
            use the pool on an HTTP proxy and request foreign hosts.

        :param timeout:
            If specified, overrides the default timeout for this one
            request. It may be a float (in seconds) or an instance of
            :class:`urllib3.util.Timeout`.

        :param pool_timeout:
            If set and the pool is set to block=True, then this method will
            block for ``pool_timeout`` seconds and raise EmptyPoolError if no
            connection is available within the time period.

        :param release_conn:
            If False, then the urlopen call will not release the connection
            back into the pool once a response is received (but will release if
            you read the entire contents of the response such as when
            `preload_content=True`). This is useful if you're not preloading
            the response's content immediately. You will need to call
            ``r.release_conn()`` on the response ``r`` to return the connection
            back into the pool. If None, it takes the value of
            ``response_kw.get('preload_content', True)``.

        :param chunked:
            If True, urllib3 will send the body using chunked transfer
            encoding. Otherwise, urllib3 will send the body using the standard
            content-length form. Defaults to False.

        :param int body_pos:
            Position to seek to in file-like body in the event of a retry or
            redirect. Typically this won't need to be set because urllib3 will
            auto-populate the value when needed.

        :param \\**response_kw:
            Additional parameters are passed to
            :meth:`urllib3.response.HTTPResponse.from_httplib`
        """

        parsed_url = parse_url(url)
        destination_scheme = parsed_url.scheme

        if headers is None:
            headers = self.headers

        if not isinstance(retries, Retry):
            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)

        if release_conn is None:
            release_conn = response_kw.get("preload_content", True)

        # Check host
        if assert_same_host and not self.is_same_host(url):
            raise HostChangedError(self, url, retries)

        # Ensure that the URL we're connecting to is properly encoded
        if url.startswith("/"):
            url = six.ensure_str(_encode_target(url))
        else:
            url = six.ensure_str(parsed_url.url)

        conn = None

        # Track whether `conn` needs to be released before
        # returning/raising/recursing. Update this variable if necessary, and
        # leave `release_conn` constant throughout the function. That way, if
        # the function recurses, the original value of `release_conn` will be
        # passed down into the recursive call, and its value will be respected.
        #
        # See issue #651 [1] for details.
        #
        # [1] <https://github.com/urllib3/urllib3/issues/651>
        release_this_conn = release_conn

        http_tunnel_required = connection_requires_http_tunnel(
            self.proxy, self.proxy_config, destination_scheme
        )

        # Merge the proxy headers. Only done when not using HTTP CONNECT. We
        # have to copy the headers dict so we can safely change it without those
        # changes being reflected in anyone else's copy.
        if not http_tunnel_required:
            headers = headers.copy()
            headers.update(self.proxy_headers)

        # Must keep the exception bound to a separate variable or else Python 3
        # complains about UnboundLocalError.
        err = None

        # Keep track of whether we cleanly exited the except block. This
        # ensures we do proper cleanup in finally.
        clean_exit = False

        # Rewind body position, if needed.    Connects to the server I'm assuming.

         This will probably "
                    "lead to SSL verification errors"
                ).format(RECENT_DATE),
                SystemTimeWarning,
            )

        # Wrap socket using verification with the root certs in
        # trusted_root_certs
        default_ssl_context = False
        if self.ssl_context is None:
            default_ssl_context = True
            self.ssl_context = create_urllib3_context(
                ssl_version=resolve_ssl_version(self.ssl_version),
                cert_reqs=resolve_cert_reqs(self.cert_reqs),
            )

        context = self.ssl_context
        context.verify_mode = resolve_cert_reqs(self.cert_reqs)

        # Try to load OS default certs if none are given.
         If none is provided, one will
            be created using :func:`create_urllib3_context`.
        :param ciphers:
            A string of ciphers we wish the client to support.
        :param ca_cert_dir:
            A directory containing CA certificates in multiple separate files, as
            supported by OpenSSL's -CApath flag or the capath argument to
            SSLContext.load_verify_locations().
        :param key_password:
            Optional password if the keyfile is encrypted.
        :param ca_cert_data:
            Optional string containing CA certificates in PEM format suitable for
            passing as the cadata parameter to SSLContext.load_verify_locations()
        :param tls_in_tls:
            Use SSLTransport to wrap the existing socket.
        """
        context = ssl_context
        if context is None:
            # Note: This branch of code and all the variables in it are no longer
            # used by urllib3 itself. We should consider deprecating and removing
            # this code.
            context = create_urllib3_context(ssl_version, cert_reqs, ciphers=ciphers)

        if ca_certs or ca_cert_dir or ca_cert_data:
            try:
                context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data)
            except (IOError, OSError) as e:
                raise SSLError(e)

        elif ssl_context is None and hasattr(context, "load_default_certs"):
            # try to load OS default certs; works well on Windows (require Python3.4+)
            context.load_default_certs()

        # Attempt to detect if we get the goofy behavior of the
        # keyfile being encrypted and OpenSSL asking for the
        # passphrase via the terminal and instead error out.
        if keyfile and key_password is None and _is_key_file_encrypted(keyfile):
            raise SSLError("Client private key is encrypted, password is required")

        if certfile:
            if key_password is None:
                context.load_cert_chain(certfile, keyfile)
            else:
                context.load_cert_chain(certfile, keyfile, key_password)

        try:
            if hasattr(context, "set_alpn_protocols"):
                context.set_alpn_protocols(ALPN_PROTOCOLS)
        except NotImplementedError:  # Defensive: in CI, we always have set_alpn_protocols
            pass

        # If we detect server_hostname is an IP address then the SNI
        # extension should not be used according to RFC3546 Section 3.1
        use_sni_hostname = server_hostname and not is_ipaddress(server_hostname)
        # SecureTransport uses server_hostname in certificate verification.
        send_sni = (use_sni_hostname and HAS_SNI) or (
            IS_SECURETRANSPORT and server_hostname
        )
        # Do not warn the user if server_hostname is an invalid SNI hostname.
        if not HAS_SNI and use_sni_hostname:
            warnings.warn(
                "An HTTPS request has been made, but the SNI (Server Name "
                "Indication) extension to TLS is not available on this platform. "
                "This may cause the server to present an incorrect TLS "
                "certificate, which can cause validation failures. You can upgrade to "
                "a newer version of Python to solve this.  Returns Response object.

        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
        :param stream: (optional) Whether to stream the request content.
        :param timeout: (optional) How long to wait for the server to send
            data before giving up, as a float, or a :ref:`(connect timeout,
            read timeout) <timeouts>` tuple.
        :type timeout: float or tuple or urllib3 Timeout object
        :param verify: (optional) Either a boolean, in which case it controls whether
            we verify the server's TLS certificate, or a string, in which case it
            must be a path to a CA bundle to use
        :param cert: (optional) Any user-provided SSL certificate to be trusted.
        :param proxies: (optional) The proxies dictionary to apply to the request.
        :rtype: requests.Response
        """

        try:
            conn = self.get_connection(request.url, proxies)
        except LocationValueError as e:
            raise InvalidURL(e, request=request)

        self.cert_verify(conn, request.url, verify, cert)
        url = self.request_url(request, proxies)
        self.add_headers(request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)

        chunked = not (request.body is None or 'Content-Length' in request.headers)

        if isinstance(timeout, tuple):
            try:
                connect, read = timeout
                timeout = TimeoutSauce(connect=connect, read=read)
            except ValueError as e:
                # this may raise a string formatting error.
                err = ("Invalid timeout {}.  This is the
        lowest level call for making a request, so you'll need to specify all
        the raw details.

        .. note::

           More commonly, it's appropriate to use a convenience method provided
           by :class:`.RequestMethods`, such as :meth:`request`.

        .. note::

           `release_conn` will only behave as expected if
           `preload_content=False` because we want to make
           `preload_content=False` the default behaviour someday soon without
           breaking backwards compatibility.

        :param method:
            HTTP request method (such as GET, POST, PUT, etc.)

        :param url:
            The URL to perform the request on.

        :param body:
            Data to send in the request body, either :class:`str`, :class:`bytes`,
            an iterable of :class:`str`/:class:`bytes`, or a file-like object.

        :param headers:
            Dictionary of custom headers to send, such as User-Agent,
            If-None-Match, etc. If None, pool headers are used. If provided,
            these headers completely replace any pool-specific headers.

        :param retries:
            Configure the number of retries to allow before raising a
            :class:`~urllib3.exceptions.MaxRetryError` exception.

            Pass ``None`` to retry until you receive a response. Pass a
            :class:`~urllib3.util.retry.Retry` object for fine-grained control
            over different types of retries.
            Pass an integer number to retry connection errors that many times,
            but no other types of errors. Pass zero to never retry.

            If ``False``, then retries are disabled and any exception is raised
            immediately. Also, instead of raising a MaxRetryError on redirects,
            the redirect response will be returned.

        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.

        :param redirect:
            If True, automatically handle redirects (status codes 301, 302,
            303, 307, 308). Each redirect counts as a retry. Disabling retries
            will disable redirect, too.

        :param assert_same_host:
            If ``True``, will make sure that the host of the pool requests is
            consistent else will raise HostChangedError. When ``False``, you can
            use the pool on an HTTP proxy and request foreign hosts.

        :param timeout:
            If specified, overrides the default timeout for this one
            request. It may be a float (in seconds) or an instance of
            :class:`urllib3.util.Timeout`.

        :param pool_timeout:
            If set and the pool is set to block=True, then this method will
            block for ``pool_timeout`` seconds and raise EmptyPoolError if no
            connection is available within the time period.

        :param release_conn:
            If False, then the urlopen call will not release the connection
            back into the pool once a response is received (but will release if
            you read the entire contents of the response such as when
            `preload_content=True`). This is useful if you're not preloading
            the response's content immediately. You will need to call
            ``r.release_conn()`` on the response ``r`` to return the connection
            back into the pool. If None, it takes the value of
            ``response_kw.get('preload_content', True)``.

        :param chunked:
            If True, urllib3 will send the body using chunked transfer
            encoding. Otherwise, urllib3 will send the body using the standard
            content-length form. Defaults to False.

        :param int body_pos:
            Position to seek to in file-like body in the event of a retry or
            redirect. Typically this won't need to be set because urllib3 will
            auto-populate the value when needed.

        :param \\**response_kw:
            Additional parameters are passed to
            :meth:`urllib3.response.HTTPResponse.from_httplib`
        """

        parsed_url = parse_url(url)
        destination_scheme = parsed_url.scheme

        if headers is None:
            headers = self.headers

        if not isinstance(retries, Retry):
            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)

        if release_conn is None:
            release_conn = response_kw.get("preload_content", True)

        # Check host
        if assert_same_host and not self.is_same_host(url):
            raise HostChangedError(self, url, retries)

        # Ensure that the URL we're connecting to is properly encoded
        if url.startswith("/"):
            url = six.ensure_str(_encode_target(url))
        else:
            url = six.ensure_str(parsed_url.url)

        conn = None

        # Track whether `conn` needs to be released before
        # returning/raising/recursing. Update this variable if necessary, and
        # leave `release_conn` constant throughout the function. That way, if
        # the function recurses, the original value of `release_conn` will be
        # passed down into the recursive call, and its value will be respected.
        #
        # See issue #651 [1] for details.
        #
        # [1] <https://github.com/urllib3/urllib3/issues/651>
        release_this_conn = release_conn

        http_tunnel_required = connection_requires_http_tunnel(
            self.proxy, self.proxy_config, destination_scheme
        )

        # Merge the proxy headers. Only done when not using HTTP CONNECT. We
        # have to copy the headers dict so we can safely change it without those
        # changes being reflected in anyone else's copy.
        if not http_tunnel_required:
            headers = headers.copy()
            headers.update(self.proxy_headers)

        # Must keep the exception bound to a separate variable or else Python 3
        # complains about UnboundLocalError.
        err = None

        # Keep track of whether we cleanly exited the except block. This
        # ensures we do proper cleanup in finally.
        clean_exit = False

        # Rewind body position, if needed. Record current position
        # for future rewinds in the event of a redirect/retry.
        body_pos = set_file_position(body, body_pos)

        try:
            # Request a connection from the queue.
            timeout_obj = self._get_timeout(timeout)
            conn = self._get_conn(timeout=pool_timeout)

            conn.timeout = timeout_obj.connect_timeout

            is_new_proxy_conn = self.proxy is not None and not getattr(
                conn, "sock", None
            )
            if is_new_proxy_conn and http_tunnel_required:
                self._prepare_proxy(conn)

            # Make the request on the httplib connection object.
            httplib_response = self._make_request(
                conn,
                method,
                url,
                timeout=timeout_obj,
                body=body,
                headers=headers,
                chunked=chunked,
            )

            # If we're going to release the connection in ``finally:``, then
            # the response doesn't need to know about the connection. Otherwise
            # it will also try to release it and we'll have a double-release
            # mess.
            response_conn = conn if not release_conn else None

            # Pass method to Response for length checking
            response_kw["request_method"] = method

            # Import httplib's response into our own wrapper object
            response = self.ResponseCls.from_httplib(
                httplib_response,
                pool=self,
                connection=response_conn,
                retries=retries,
                **response_kw
            )

            # Everything went great!
            clean_exit = True

        except EmptyPoolError:
            # Didn't get a connection from the pool, no need to clean up
            clean_exit = True
            release_this_conn = False
            raise

        except (
            TimeoutError,
            HTTPException,
            SocketError,
            ProtocolError,
            BaseSSLError,
            SSLError,
            CertificateError,
        ) as e:
            # Discard the connection for these exceptions. It will be
            # replaced during the next _get_conn() call.
            clean_exit = False

            def _is_ssl_error_message_from_http_proxy(ssl_error):
                # We're trying to detect the message 'WRONG_VERSION_NUMBER' but
                # SSLErrors are kinda all over the place when it comes to the message,
                # so we try to cover our bases here!
                message = " ".join(re.split("[^a-z]", str(ssl_error).lower()))
                return (
                    "wrong version number" in message or "unknown protocol" in message
                )

            # Try to detect a common user error with proxies which is to
            # set an HTTP proxy to be HTTPS when it should be 'http://'
            # (ie {'http': 'http://proxy', 'https': 'https://proxy'})
            # Instead we add a nice error message and point to a URL.
            if (
                isinstance(e, BaseSSLError)
                and self.proxy
                and _is_ssl_error_message_from_http_proxy(e)
            ):
                e = ProxyError(
                    "Your proxy appears to only use HTTP and not HTTPS, "
                    "try changing your proxy URL to be HTTP.  Returns Response object.

        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
        :param stream: (optional) Whether to stream the request content.
        :param timeout: (optional) How long to wait for the server to send
            data before giving up, as a float, or a :ref:`(connect timeout,
            read timeout) <timeouts>` tuple.
        :type timeout: float or tuple or urllib3 Timeout object
        :param verify: (optional) Either a boolean, in which case it controls whether
            we verify the server's TLS certificate, or a string, in which case it
            must be a path to a CA bundle to use
        :param cert: (optional) Any user-provided SSL certificate to be trusted.
        :param proxies: (optional) The proxies dictionary to apply to the request.
        :rtype: requests.Response
        """

        try:
            conn = self.get_connection(request.url, proxies)
        except LocationValueError as e:
            raise InvalidURL(e, request=request)

        self.cert_verify(conn, request.url, verify, cert)
        url = self.request_url(request, proxies)
        self.add_headers(request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies)

        chunked = not (request.body is None or 'Content-Length' in request.headers)

        if isinstance(timeout, tuple):
            try:
                connect, read = timeout
                timeout = TimeoutSauce(connect=connect, read=read)
            except ValueError as e:
                # this may raise a string formatting error.
                err = ("Invalid timeout {}. Pass a (connect, read) "
                       "timeout tuple, or a single float to set "
                       "both timeouts to the same value".format(timeout))
                raise ValueError(err)
        elif isinstance(timeout, TimeoutSauce):
            pass
        else:
            timeout = TimeoutSauce(connect=timeout, read=timeout)

        try:
            if not chunked:
                resp = conn.urlopen(
                    method=request.method,
                    url=url,
                    body=request.body,
                    headers=request.headers,
                    redirect=False,
                    assert_same_host=False,
                    preload_content=False,
                    decode_content=False,
                    retries=self.max_retries,
                    timeout=timeout
                )

            # Send the request.
            else:
                if hasattr(conn, 'proxy_pool'):
                    conn = conn.proxy_pool

                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)

                try:
                    skip_host = 'Host' in request.headers
                    low_conn.putrequest(request.method,
                                        url,
                                        skip_accept_encoding=True,
                                        skip_host=skip_host)

                    for header, value in request.headers.items():
                        low_conn.putheader(header, value)

                    low_conn.endheaders()

                    for i in request.body:
                        low_conn.send(hex(len(i))[2:].encode('utf-8'))
                        low_conn.send(b'\r\n')
                        low_conn.send(i)
                        low_conn.send(b'\r\n')
                    low_conn.send(b'0\r\n\r\n')

                    # Receive the response from the server
                    try:
                        # For Python 2.7, use buffering of HTTP responses
                        r = low_conn.getresponse(buffering=True)
                    except TypeError:
                        # For compatibility with Python 3.3+
                        r = low_conn.getresponse()

                    resp = HTTPResponse.from_httplib(
                        r,
                        pool=conn,
                        connection=low_conn,
                        preload_content=False,
                        decode_content=False
                    )
                except:
                    # If we hit any problems here, clean up the connection.
                    # Then, reraise so that we can handle the actual exception.
                    low_conn.close()
                    raise

        except (ProtocolError, socket.error) as err:
            raise ConnectionError(err, request=request)

        except MaxRetryError as e:
            if isinstance(e.reason, ConnectTimeoutError):
                # TODO: Remove this in 3.0.0: see #2811
                if not isinstance(e.reason, NewConnectionError):
                    raise ConnectTimeout(e, request=request)

            if isinstance(e.reason, ResponseError):
                raise RetryError(e, request=request)

            if isinstance(e.reason, _ProxyError):
                raise ProxyError(e, request=request)

            if isinstance(e.reason, _SSLError):
                # This branch is for urllib3 v1.22 and later.
>               raise SSLError(e, request=request)
E               requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)')))

/usr/lib/python3.8/site-packages/requests/adapters.py:517: SSLError

[..]

/usr/lib/python3.8/site-packages/requests/adapters.py:517: SSLError
============================================================================= warnings summary =============================================================================
../../../../../usr/lib/python3.8/site-packages/pytest_aiohttp/plugin.py:28
  /usr/lib/python3.8/site-packages/pytest_aiohttp/plugin.py:28: DeprecationWarning: The 'asyncio_mode' is 'legacy', switching to 'auto' for the sake of pytest-aiohttp backward compatibility. Please explicitly use 'asyncio_mode=strict' or 'asyncio_mode=auto' in pytest configuration file.
    config.issue_config_time_warning(LEGACY_MODE, stacklevel=2)

../../../../../usr/lib/python3.8/site-packages/boto/plugin.py:40
  /usr/lib/python3.8/site-packages/boto/plugin.py:40: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
    import imp

tests/integration/test_proxy.py:42
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.1.1/tests/integration/test_proxy.py:42: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
  Use @pytest.fixture instead; they are the same.
    @pytest.yield_fixture(scope="session")

tests/integration/test_wild.py:86
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.1.1/tests/integration/test_wild.py:86: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
  Use @pytest.fixture instead; they are the same.
    @pytest.yield_fixture(scope="session")

tests/integration/test_httpx.py: 12 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:116: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 12 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:172: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 12 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:144: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 12 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:191: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 12 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:210: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 12 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:229: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========================================================================= short test summary info ==========================================================================
SKIPPED [1] tests/integration/test_tornado.py:12: could not import 'tornado': No module named 'tornado'
SKIPPED [1] tests/integration/test_boto3.py:58: botocore version 1.25.8 does not use vendored requests anymore.
SKIPPED [1] tests/integration/test_boto3.py:76: Encrypted Environment Variables from Travis Repository Settings are disabled on PRs from forks. https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
SKIPPED [1] tests/integration/test_boto3.py:94: Encrypted Environment Variables from Travis Repository Settings are disabled on PRs from forks. https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
SKIPPED [1] tests/integration/test_requests.py:119: condition: sys.version_info >= (3, 6)
FAILED tests/integration/test_boto.py::test_boto_without_vcr - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAu...
FAILED tests/integration/test_boto.py::test_boto_medium_difficulty - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['...
FAILED tests/integration/test_boto.py::test_boto_hardcore_mode - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['Hmac...
FAILED tests/integration/test_boto.py::test_boto_iam - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Hand...
FAILED tests/integration/test_requests.py::test_status_code[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceede...
FAILED tests/integration/test_requests.py::test_headers[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceeded wi...
FAILED tests/integration/test_requests.py::test_body[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_get_empty_content_type_json[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max...
FAILED tests/integration/test_requests.py::test_effective_url[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries excee...
FAILED tests/integration/test_requests.py::test_auth[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_auth_failed[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceede...
FAILED tests/integration/test_requests.py::test_post[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_redirects[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceeded ...
FAILED tests/integration/test_requests.py::test_gzip[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_session_created_before_use_cassette_is_patched[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>...
FAILED tests/integration/test_requests.py::test_nested_cassettes_with_session_created_before_nesting[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='127...
FAILED tests/integration/test_requests.py::test_post_file[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceeded ...
FAILED tests/integration/test_requests.py::test_filter_post_params[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries ...
FAILED tests/integration/test_requests.py::test_post_unicode_match_on_body[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max ...
FAILED tests/integration/test_httpx.py::test_redirect[DoAsyncRequest] - vcr.errors.UnhandledHTTPRequestError: "The cassette ('/tmp/pytest-of-tkloczko/pytest-48/test_redi...
FAILED tests/integration/test_httpx.py::test_redirect[DoSyncRequest] - vcr.errors.UnhandledHTTPRequestError: "The cassette ('/tmp/pytest-of-tkloczko/pytest-48/test_redir...
FAILED tests/integration/test_httpx.py::test_behind_proxy[DoAsyncRequest] - ValueError: Proxy keys should use proper URL forms rather than plain scheme strings. Instead ...
FAILED tests/integration/test_httpx.py::test_behind_proxy[DoSyncRequest] - ValueError: Proxy keys should use proper URL forms rather than plain scheme strings. Instead o...
FAILED tests/integration/test_httpx.py::test_cookies[DoAsyncRequest-http] - IndexError: list index out of range
FAILED tests/integration/test_httpx.py::test_cookies[DoAsyncRequest-https] - IndexError: list index out of range
FAILED tests/integration/test_httpx.py::test_cookies[DoSyncRequest-http] - IndexError: list index out of range
FAILED tests/integration/test_httpx.py::test_cookies[DoSyncRequest-https] - IndexError: list index out of range
FAILED tests/integration/test_httpx.py::test_relative_redirects[DoAsyncRequest-http] - AssertionError: <Response [301 Moved Permanently]>
FAILED tests/integration/test_httpx.py::test_relative_redirects[DoAsyncRequest-https] - AssertionError: <Response [301 Moved Permanently]>
FAILED tests/integration/test_httpx.py::test_relative_redirects[DoSyncRequest-http] - AssertionError: <Response [301 Moved Permanently]>
FAILED tests/integration/test_httpx.py::test_relative_redirects[DoSyncRequest-https] - AssertionError: <Response [301 Moved Permanently]>
FAILED tests/integration/test_httpx.py::test_redirect_wo_allow_redirects[DoAsyncRequest] - TypeError: request() got an unexpected keyword argument 'allow_redirects'
FAILED tests/integration/test_httpx.py::test_redirect_wo_allow_redirects[DoSyncRequest] - TypeError: request() got an unexpected keyword argument 'allow_redirects'
FAILED tests/integration/test_requests.py::test_cross_scheme - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36463): Max retries exceeded with...
========================================================= 34 failed, 351 passed, 5 skipped, 76 warnings in 44.38s ==========================================================

Version 4.1.1 is 1.5 years old. Maybe try grabbing from master?

Just tested new 4.2.0.

        Lists through all the registered AuthHandlers to find one that is willing
        to handle for the requested capabilities, config and provider.

        :type host: string
        :param host: The name of the host

        :type config:
        :param config:

        :type provider:
        :param provider:

        Returns:
            An implementation of AuthHandler.

        Raises:
            boto.exception.NoAuthHandlerFound
        """
        ready_handlers = []
        auth_handlers = boto.plugin.get_plugin(AuthHandler, requested_capability)
        for handler in auth_handlers:
            try:
                ready_handlers.append(handler(host, config, provider))
            except boto.auth_handler.NotReadyToAuthenticate:
                pass

        if not ready_handlers:
            checked_handlers = auth_handlers
            names = [handler.__name__ for handler in checked_handlers]
>           raise boto.exception.NoAuthHandlerFound(
                'No handler was ready to authenticate. %d handlers were checked.'
                ' %s '
                'Check your credentials' % (len(names), str(names)))
E           boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked.

        Lists through all the registered AuthHandlers to find one that is willing
        to handle for the requested capabilities, config and provider.

        :type host: string
        :param host: The name of the host

        :type config:
        :param config:

        :type provider:
        :param provider:

        Returns:
            An implementation of AuthHandler.

        Raises:
            boto.exception.NoAuthHandlerFound
        """
        ready_handlers = []
        auth_handlers = boto.plugin.get_plugin(AuthHandler, requested_capability)
        for handler in auth_handlers:
            try:
                ready_handlers.append(handler(host, config, provider))
            except boto.auth_handler.NotReadyToAuthenticate:
                pass

        if not ready_handlers:
            checked_handlers = auth_handlers
            names = [handler.__name__ for handler in checked_handlers]
>           raise boto.exception.NoAuthHandlerFound(
                'No handler was ready to authenticate. %d handlers were checked.'
                ' %s '
                'Check your credentials' % (len(names), str(names)))
E           boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked.

        Lists through all the registered AuthHandlers to find one that is willing
        to handle for the requested capabilities, config and provider.

        :type host: string
        :param host: The name of the host

        :type config:
        :param config:

        :type provider:
        :param provider:

        Returns:
            An implementation of AuthHandler.

        Raises:
            boto.exception.NoAuthHandlerFound
        """
        ready_handlers = []
        auth_handlers = boto.plugin.get_plugin(AuthHandler, requested_capability)
        for handler in auth_handlers:
            try:
                ready_handlers.append(handler(host, config, provider))
            except boto.auth_handler.NotReadyToAuthenticate:
                pass

        if not ready_handlers:
            checked_handlers = auth_handlers
            names = [handler.__name__ for handler in checked_handlers]
>           raise boto.exception.NoAuthHandlerFound(
                'No handler was ready to authenticate. %d handlers were checked.'
                ' %s '
                'Check your credentials' % (len(names), str(names)))
E           boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked.

        Lists through all the registered AuthHandlers to find one that is willing
        to handle for the requested capabilities, config and provider.

        :type host: string
        :param host: The name of the host

        :type config:
        :param config:

        :type provider:
        :param provider:

        Returns:
            An implementation of AuthHandler.

        Raises:
            boto.exception.NoAuthHandlerFound
        """
        ready_handlers = []
        auth_handlers = boto.plugin.get_plugin(AuthHandler, requested_capability)
        for handler in auth_handlers:
            try:
                ready_handlers.append(handler(host, config, provider))
            except boto.auth_handler.NotReadyToAuthenticate:
                pass

        if not ready_handlers:
            checked_handlers = auth_handlers
            names = [handler.__name__ for handler in checked_handlers]
>           raise boto.exception.NoAuthHandlerFound(
                'No handler was ready to authenticate. %d handlers were checked.'
                ' %s '
                'Check your credentials' % (len(names), str(names)))
E           boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Handler'] Check your credentials

/usr/lib/python3.8/site-packages/boto/auth.py:1018: NoAuthHandlerFound
---------------------------------------------------------------------------- Captured log call -----------------------------------------------------------------------------
ERROR    boto:utils.py:230 Caught exception reading instance data
Traceback (most recent call last):
  File "/usr/lib/python3.8/site-packages/boto/utils.py", line 217, in retry_url
    r = opener.open(req, timeout=timeout)
  File "/usr/lib64/python3.8/urllib/request.py", line 525, in open
    response = self._open(req, data)
  File "/usr/lib64/python3.8/urllib/request.py", line 542, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/usr/lib64/python3.8/urllib/request.py", line 502, in _call_chain
    result = func(*args)
  File "/usr/lib64/python3.8/urllib/request.py", line 1383, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "/usr/lib64/python3.8/urllib/request.py", line 1358, in do_open
    r = h.getresponse()
  File "/home/tkloczko/rpmbuild/BUILDROOT/python-vcrpy-4.2.0-2.fc35.x86_64/usr/lib/python3.8/site-packages/vcr/stubs/__init__.py", line 244, in getresponse
    self.real_connection.request(
  File "/usr/lib64/python3.8/http/client.py", line 1256, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib64/python3.8/http/client.py", line 1302, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib64/python3.8/http/client.py", line 1251, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib64/python3.8/http/client.py", line 1011, in _send_output
    self.send(msg)
  File "/usr/lib64/python3.8/http/client.py", line 951, in send
    self.connect()
  File "/usr/lib64/python3.8/http/client.py", line 922, in connect
    self.sock = self._create_connection(
  File "/usr/lib64/python3.8/socket.py", line 808, in create_connection
    raise err
  File "/usr/lib64/python3.8/socket.py", line 796, in create_connection
    sock.connect(sa)
socket.timeout: timed out
ERROR    boto:utils.py:236 Unable to read instance data, giving up
_________________________________________________________________________ test_status_code[https] __________________________________________________________________________

self = <urllib3.connectionpool.HTTPSConnectionPool object at 0x7f853243ac70>, method = 'GET', url = '/', body = None
headers = {'User-Agent': 'python-requests/2.28.0', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'}
retries = Retry(total=0, connect=None, read=False, redirect=None, status=None), redirect = False, assert_same_host = False
timeout = Timeout(connect=None, read=None, total=None), pool_timeout = None, release_conn = False, chunked = False, body_pos = None
response_kw = {'decode_content': False, 'preload_content': False}, parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/', query=None, fragment=None)
destination_scheme = None, conn = None, release_this_conn = True, http_tunnel_required = False, err = None, clean_exit = False

    def urlopen(
        self,
        method,
        url,
        body=None,
        headers=None,
        retries=None,
        redirect=True,
        assert_same_host=True,
        timeout=_Default,
        pool_timeout=None,
        release_conn=None,
        chunked=False,
        body_pos=None,
        **response_kw
    ):
        """
        Get a connection from the pool and perform an HTTP request. This is the
        lowest level call for making a request, so you'll need to specify all
        the raw details.

        .. note::

           More commonly, it's appropriate to use a convenience method provided
           by :class:`.RequestMethods`, such as :meth:`request`.

        .. note::

           `release_conn` will only behave as expected if
           `preload_content=False` because we want to make
           `preload_content=False` the default behaviour someday soon without
           breaking backwards compatibility.

        :param method:
            HTTP request method (such as GET, POST, PUT, etc.)

        :param url:
            The URL to perform the request on.

        :param body:
            Data to send in the request body, either :class:`str`, :class:`bytes`,
            an iterable of :class:`str`/:class:`bytes`, or a file-like object.

        :param headers:
            Dictionary of custom headers to send, such as User-Agent,
            If-None-Match, etc. If None, pool headers are used. If provided,
            these headers completely replace any pool-specific headers.

        :param retries:
            Configure the number of retries to allow before raising a
            :class:`~urllib3.exceptions.MaxRetryError` exception.

            Pass ``None`` to retry until you receive a response. Pass a
            :class:`~urllib3.util.retry.Retry` object for fine-grained control
            over different types of retries.
            Pass an integer number to retry connection errors that many times,
            but no other types of errors. Pass zero to never retry.

            If ``False``, then retries are disabled and any exception is raised
            immediately. Also, instead of raising a MaxRetryError on redirects,
            the redirect response will be returned.

        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.

        :param redirect:
            If True, automatically handle redirects (status codes 301, 302,
            303, 307, 308). Each redirect counts as a retry. Disabling retries
            will disable redirect, too.

        :param assert_same_host:
            If ``True``, will make sure that the host of the pool requests is
            consistent else will raise HostChangedError. When ``False``, you can
            use the pool on an HTTP proxy and request foreign hosts.

        :param timeout:
            If specified, overrides the default timeout for this one
            request. It may be a float (in seconds) or an instance of
            :class:`urllib3.util.Timeout`.

        :param pool_timeout:
            If set and the pool is set to block=True, then this method will
            block for ``pool_timeout`` seconds and raise EmptyPoolError if no
            connection is available within the time period.

        :param release_conn:
            If False, then the urlopen call will not release the connection
            back into the pool once a response is received (but will release if
            you read the entire contents of the response such as when
            `preload_content=True`). This is useful if you're not preloading
            the response's content immediately. You will need to call
            ``r.release_conn()`` on the response ``r`` to return the connection
            back into the pool. If None, it takes the value of
            ``response_kw.get('preload_content', True)``.

        :param chunked:
            If True, urllib3 will send the body using chunked transfer
            encoding. Otherwise, urllib3 will send the body using the standard
            content-length form. Defaults to False.

        :param int body_pos:
            Position to seek to in file-like body in the event of a retry or
            redirect. Typically this won't need to be set because urllib3 will
            auto-populate the value when needed.

        :param \\**response_kw:
            Additional parameters are passed to
            :meth:`urllib3.response.HTTPResponse.from_httplib`
        """

        parsed_url = parse_url(url)
        destination_scheme = parsed_url.scheme

        if headers is None:
            headers = self.headers

        if not isinstance(retries, Retry):
            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)

        if release_conn is None:
            release_conn = response_kw.get("preload_content", True)

        # Check host
        if assert_same_host and not self.is_same_host(url):
            raise HostChangedError(self, url, retries)

        # Ensure that the URL we're connecting to is properly encoded
        if url.startswith("/"):
            url = six.ensure_str(_encode_target(url))
        else:
            url = six.ensure_str(parsed_url.url)

        conn = None

        # Track whether `conn` needs to be released before
        # returning/raising/recursing. Update this variable if necessary, and
        # leave `release_conn` constant throughout the function. That way, if
        # the function recurses, the original value of `release_conn` will be
        # passed down into the recursive call, and its value will be respected.
        #
        # See issue #651 [1] for details.
        #
        # [1] <https://github.com/urllib3/urllib3/issues/651>
        release_this_conn = release_conn

        http_tunnel_required = connection_requires_http_tunnel(
            self.proxy, self.proxy_config, destination_scheme
        )

        # Merge the proxy headers. Only done when not using HTTP CONNECT. We
        # have to copy the headers dict so we can safely change it without those
        # changes being reflected in anyone else's copy.
        if not http_tunnel_required:
            headers = headers.copy()
            headers.update(self.proxy_headers)

        # Must keep the exception bound to a separate variable or else Python 3
        # complains about UnboundLocalError.
        err = None

        # Keep track of whether we cleanly exited the except block. This
        # ensures we do proper cleanup in finally.
        clean_exit = False

        # Rewind body position, if needed.    Connects to the server I'm assuming.

         This will probably "
                    "lead to SSL verification errors"
                ).format(RECENT_DATE),
                SystemTimeWarning,
            )

        # Wrap socket using verification with the root certs in
        # trusted_root_certs
        default_ssl_context = False
        if self.ssl_context is None:
            default_ssl_context = True
            self.ssl_context = create_urllib3_context(
                ssl_version=resolve_ssl_version(self.ssl_version),
                cert_reqs=resolve_cert_reqs(self.cert_reqs),
            )

        context = self.ssl_context
        context.verify_mode = resolve_cert_reqs(self.cert_reqs)

        # Try to load OS default certs if none are given.
         If none is provided, one will
            be created using :func:`create_urllib3_context`.
        :param ciphers:
            A string of ciphers we wish the client to support.
        :param ca_cert_dir:
            A directory containing CA certificates in multiple separate files, as
            supported by OpenSSL's -CApath flag or the capath argument to
            SSLContext.load_verify_locations().
        :param key_password:
            Optional password if the keyfile is encrypted.
        :param ca_cert_data:
            Optional string containing CA certificates in PEM format suitable for
            passing as the cadata parameter to SSLContext.load_verify_locations()
        :param tls_in_tls:
            Use SSLTransport to wrap the existing socket.
        """
        context = ssl_context
        if context is None:
            # Note: This branch of code and all the variables in it are no longer
            # used by urllib3 itself. We should consider deprecating and removing
            # this code.
            context = create_urllib3_context(ssl_version, cert_reqs, ciphers=ciphers)

        if ca_certs or ca_cert_dir or ca_cert_data:
            try:
                context.load_verify_locations(ca_certs, ca_cert_dir, ca_cert_data)
            except (IOError, OSError) as e:
                raise SSLError(e)

        elif ssl_context is None and hasattr(context, "load_default_certs"):
            # try to load OS default certs; works well on Windows (require Python3.4+)
            context.load_default_certs()

        # Attempt to detect if we get the goofy behavior of the
        # keyfile being encrypted and OpenSSL asking for the
        # passphrase via the terminal and instead error out.
        if keyfile and key_password is None and _is_key_file_encrypted(keyfile):
            raise SSLError("Client private key is encrypted, password is required")

        if certfile:
            if key_password is None:
                context.load_cert_chain(certfile, keyfile)
            else:
                context.load_cert_chain(certfile, keyfile, key_password)

        try:
            if hasattr(context, "set_alpn_protocols"):
                context.set_alpn_protocols(ALPN_PROTOCOLS)
        except NotImplementedError:  # Defensive: in CI, we always have set_alpn_protocols
            pass

        # If we detect server_hostname is an IP address then the SNI
        # extension should not be used according to RFC3546 Section 3.1
        use_sni_hostname = server_hostname and not is_ipaddress(server_hostname)
        # SecureTransport uses server_hostname in certificate verification.
        send_sni = (use_sni_hostname and HAS_SNI) or (
            IS_SECURETRANSPORT and server_hostname
        )
        # Do not warn the user if server_hostname is an invalid SNI hostname.
        if not HAS_SNI and use_sni_hostname:
            warnings.warn(
                "An HTTPS request has been made, but the SNI (Server Name "
                "Indication) extension to TLS is not available on this platform. "
                "This may cause the server to present an incorrect TLS "
                "certificate, which can cause validation failures. You can upgrade to "
                "a newer version of Python to solve this.  Returns Response object.

        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
        :param stream: (optional) Whether to stream the request content.
        :param timeout: (optional) How long to wait for the server to send
            data before giving up, as a float, or a :ref:`(connect timeout,
            read timeout) <timeouts>` tuple.
        :type timeout: float or tuple or urllib3 Timeout object
        :param verify: (optional) Either a boolean, in which case it controls whether
            we verify the server's TLS certificate, or a string, in which case it
            must be a path to a CA bundle to use
        :param cert: (optional) Any user-provided SSL certificate to be trusted.
        :param proxies: (optional) The proxies dictionary to apply to the request.
        :rtype: requests.Response
        """

        try:
            conn = self.get_connection(request.url, proxies)
        except LocationValueError as e:
            raise InvalidURL(e, request=request)

        self.cert_verify(conn, request.url, verify, cert)
        url = self.request_url(request, proxies)
        self.add_headers(
            request,
            stream=stream,
            timeout=timeout,
            verify=verify,
            cert=cert,
            proxies=proxies,
        )

        chunked = not (request.body is None or "Content-Length" in request.headers)

        if isinstance(timeout, tuple):
            try:
                connect, read = timeout
                timeout = TimeoutSauce(connect=connect, read=read)
            except ValueError:
                raise ValueError(
                    f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
                    f"or a single float to set both timeouts to the same value."
                 This is the
        lowest level call for making a request, so you'll need to specify all
        the raw details.

        .. note::

           More commonly, it's appropriate to use a convenience method provided
           by :class:`.RequestMethods`, such as :meth:`request`.

        .. note::

           `release_conn` will only behave as expected if
           `preload_content=False` because we want to make
           `preload_content=False` the default behaviour someday soon without
           breaking backwards compatibility.

        :param method:
            HTTP request method (such as GET, POST, PUT, etc.)

        :param url:
            The URL to perform the request on.

        :param body:
            Data to send in the request body, either :class:`str`, :class:`bytes`,
            an iterable of :class:`str`/:class:`bytes`, or a file-like object.

        :param headers:
            Dictionary of custom headers to send, such as User-Agent,
            If-None-Match, etc. If None, pool headers are used. If provided,
            these headers completely replace any pool-specific headers.

        :param retries:
            Configure the number of retries to allow before raising a
            :class:`~urllib3.exceptions.MaxRetryError` exception.

            Pass ``None`` to retry until you receive a response. Pass a
            :class:`~urllib3.util.retry.Retry` object for fine-grained control
            over different types of retries.
            Pass an integer number to retry connection errors that many times,
            but no other types of errors. Pass zero to never retry.

            If ``False``, then retries are disabled and any exception is raised
            immediately. Also, instead of raising a MaxRetryError on redirects,
            the redirect response will be returned.

        :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.

        :param redirect:
            If True, automatically handle redirects (status codes 301, 302,
            303, 307, 308). Each redirect counts as a retry. Disabling retries
            will disable redirect, too.

        :param assert_same_host:
            If ``True``, will make sure that the host of the pool requests is
            consistent else will raise HostChangedError. When ``False``, you can
            use the pool on an HTTP proxy and request foreign hosts.

        :param timeout:
            If specified, overrides the default timeout for this one
            request. It may be a float (in seconds) or an instance of
            :class:`urllib3.util.Timeout`.

        :param pool_timeout:
            If set and the pool is set to block=True, then this method will
            block for ``pool_timeout`` seconds and raise EmptyPoolError if no
            connection is available within the time period.

        :param release_conn:
            If False, then the urlopen call will not release the connection
            back into the pool once a response is received (but will release if
            you read the entire contents of the response such as when
            `preload_content=True`). This is useful if you're not preloading
            the response's content immediately. You will need to call
            ``r.release_conn()`` on the response ``r`` to return the connection
            back into the pool. If None, it takes the value of
            ``response_kw.get('preload_content', True)``.

        :param chunked:
            If True, urllib3 will send the body using chunked transfer
            encoding. Otherwise, urllib3 will send the body using the standard
            content-length form. Defaults to False.

        :param int body_pos:
            Position to seek to in file-like body in the event of a retry or
            redirect. Typically this won't need to be set because urllib3 will
            auto-populate the value when needed.

        :param \\**response_kw:
            Additional parameters are passed to
            :meth:`urllib3.response.HTTPResponse.from_httplib`
        """

        parsed_url = parse_url(url)
        destination_scheme = parsed_url.scheme

        if headers is None:
            headers = self.headers

        if not isinstance(retries, Retry):
            retries = Retry.from_int(retries, redirect=redirect, default=self.retries)

        if release_conn is None:
            release_conn = response_kw.get("preload_content", True)

        # Check host
        if assert_same_host and not self.is_same_host(url):
            raise HostChangedError(self, url, retries)

        # Ensure that the URL we're connecting to is properly encoded
        if url.startswith("/"):
            url = six.ensure_str(_encode_target(url))
        else:
            url = six.ensure_str(parsed_url.url)

        conn = None

        # Track whether `conn` needs to be released before
        # returning/raising/recursing. Update this variable if necessary, and
        # leave `release_conn` constant throughout the function. That way, if
        # the function recurses, the original value of `release_conn` will be
        # passed down into the recursive call, and its value will be respected.
        #
        # See issue #651 [1] for details.
        #
        # [1] <https://github.com/urllib3/urllib3/issues/651>
        release_this_conn = release_conn

        http_tunnel_required = connection_requires_http_tunnel(
            self.proxy, self.proxy_config, destination_scheme
        )

        # Merge the proxy headers. Only done when not using HTTP CONNECT. We
        # have to copy the headers dict so we can safely change it without those
        # changes being reflected in anyone else's copy.
        if not http_tunnel_required:
            headers = headers.copy()
            headers.update(self.proxy_headers)

        # Must keep the exception bound to a separate variable or else Python 3
        # complains about UnboundLocalError.
        err = None

        # Keep track of whether we cleanly exited the except block. This
        # ensures we do proper cleanup in finally.
        clean_exit = False

        # Rewind body position, if needed. Record current position
        # for future rewinds in the event of a redirect/retry.
        body_pos = set_file_position(body, body_pos)

        try:
            # Request a connection from the queue.
            timeout_obj = self._get_timeout(timeout)
            conn = self._get_conn(timeout=pool_timeout)

            conn.timeout = timeout_obj.connect_timeout

            is_new_proxy_conn = self.proxy is not None and not getattr(
                conn, "sock", None
            )
            if is_new_proxy_conn and http_tunnel_required:
                self._prepare_proxy(conn)

            # Make the request on the httplib connection object.
            httplib_response = self._make_request(
                conn,
                method,
                url,
                timeout=timeout_obj,
                body=body,
                headers=headers,
                chunked=chunked,
            )

            # If we're going to release the connection in ``finally:``, then
            # the response doesn't need to know about the connection. Otherwise
            # it will also try to release it and we'll have a double-release
            # mess.
            response_conn = conn if not release_conn else None

            # Pass method to Response for length checking
            response_kw["request_method"] = method

            # Import httplib's response into our own wrapper object
            response = self.ResponseCls.from_httplib(
                httplib_response,
                pool=self,
                connection=response_conn,
                retries=retries,
                **response_kw
            )

            # Everything went great!
            clean_exit = True

        except EmptyPoolError:
            # Didn't get a connection from the pool, no need to clean up
            clean_exit = True
            release_this_conn = False
            raise

        except (
            TimeoutError,
            HTTPException,
            SocketError,
            ProtocolError,
            BaseSSLError,
            SSLError,
            CertificateError,
        ) as e:
            # Discard the connection for these exceptions. It will be
            # replaced during the next _get_conn() call.
            clean_exit = False

            def _is_ssl_error_message_from_http_proxy(ssl_error):
                # We're trying to detect the message 'WRONG_VERSION_NUMBER' but
                # SSLErrors are kinda all over the place when it comes to the message,
                # so we try to cover our bases here!
                message = " ".join(re.split("[^a-z]", str(ssl_error).lower()))
                return (
                    "wrong version number" in message or "unknown protocol" in message
                )

            # Try to detect a common user error with proxies which is to
            # set an HTTP proxy to be HTTPS when it should be 'http://'
            # (ie {'http': 'http://proxy', 'https': 'https://proxy'})
            # Instead we add a nice error message and point to a URL.
            if (
                isinstance(e, BaseSSLError)
                and self.proxy
                and _is_ssl_error_message_from_http_proxy(e)
            ):
                e = ProxyError(
                    "Your proxy appears to only use HTTP and not HTTPS, "
                    "try changing your proxy URL to be HTTP.  Returns Response object.

        :param request: The :class:`PreparedRequest <PreparedRequest>` being sent.
        :param stream: (optional) Whether to stream the request content.
        :param timeout: (optional) How long to wait for the server to send
            data before giving up, as a float, or a :ref:`(connect timeout,
            read timeout) <timeouts>` tuple.
        :type timeout: float or tuple or urllib3 Timeout object
        :param verify: (optional) Either a boolean, in which case it controls whether
            we verify the server's TLS certificate, or a string, in which case it
            must be a path to a CA bundle to use
        :param cert: (optional) Any user-provided SSL certificate to be trusted.
        :param proxies: (optional) The proxies dictionary to apply to the request.
        :rtype: requests.Response
        """

        try:
            conn = self.get_connection(request.url, proxies)
        except LocationValueError as e:
            raise InvalidURL(e, request=request)

        self.cert_verify(conn, request.url, verify, cert)
        url = self.request_url(request, proxies)
        self.add_headers(
            request,
            stream=stream,
            timeout=timeout,
            verify=verify,
            cert=cert,
            proxies=proxies,
        )

        chunked = not (request.body is None or "Content-Length" in request.headers)

        if isinstance(timeout, tuple):
            try:
                connect, read = timeout
                timeout = TimeoutSauce(connect=connect, read=read)
            except ValueError:
                raise ValueError(
                    f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, "
                    f"or a single float to set both timeouts to the same value."
                )
        elif isinstance(timeout, TimeoutSauce):
            pass
        else:
            timeout = TimeoutSauce(connect=timeout, read=timeout)

        try:
            if not chunked:
                resp = conn.urlopen(
                    method=request.method,
                    url=url,
                    body=request.body,
                    headers=request.headers,
                    redirect=False,
                    assert_same_host=False,
                    preload_content=False,
                    decode_content=False,
                    retries=self.max_retries,
                    timeout=timeout,
                )

            # Send the request.
            else:
                if hasattr(conn, "proxy_pool"):
                    conn = conn.proxy_pool

                low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT)

                try:
                    skip_host = "Host" in request.headers
                    low_conn.putrequest(
                        request.method,
                        url,
                        skip_accept_encoding=True,
                        skip_host=skip_host,
                    )

                    for header, value in request.headers.items():
                        low_conn.putheader(header, value)

                    low_conn.endheaders()

                    for i in request.body:
                        low_conn.send(hex(len(i))[2:].encode("utf-8"))
                        low_conn.send(b"\r\n")
                        low_conn.send(i)
                        low_conn.send(b"\r\n")
                    low_conn.send(b"0\r\n\r\n")

                    # Receive the response from the server
                    r = low_conn.getresponse()

                    resp = HTTPResponse.from_httplib(
                        r,
                        pool=conn,
                        connection=low_conn,
                        preload_content=False,
                        decode_content=False,
                    )
                except Exception:
                    # If we hit any problems here, clean up the connection.
                    # Then, raise so that we can handle the actual exception.
                    low_conn.close()
                    raise

        except (ProtocolError, OSError) as err:
            raise ConnectionError(err, request=request)

        except MaxRetryError as e:
            if isinstance(e.reason, ConnectTimeoutError):
                # TODO: Remove this in 3.0.0: see #2811
                if not isinstance(e.reason, NewConnectionError):
                    raise ConnectTimeout(e, request=request)

            if isinstance(e.reason, ResponseError):
                raise RetryError(e, request=request)

            if isinstance(e.reason, _ProxyError):
                raise ProxyError(e, request=request)

            if isinstance(e.reason, _SSLError):
                # This branch is for urllib3 v1.22 and later.
>               raise SSLError(e, request=request)
E               requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)')))

/usr/lib/python3.8/site-packages/requests/adapters.py:563: SSLError
============================================================================= warnings summary =============================================================================
../../../../../usr/lib/python3.8/site-packages/pytest_aiohttp/plugin.py:28
  /usr/lib/python3.8/site-packages/pytest_aiohttp/plugin.py:28: DeprecationWarning: The 'asyncio_mode' is 'legacy', switching to 'auto' for the sake of pytest-aiohttp backward compatibility. Please explicitly use 'asyncio_mode=strict' or 'asyncio_mode=auto' in pytest configuration file.
    config.issue_config_time_warning(LEGACY_MODE, stacklevel=2)

../../../../../usr/lib/python3.8/site-packages/boto/plugin.py:40
  /usr/lib/python3.8/site-packages/boto/plugin.py:40: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
    import imp

tests/integration/test_proxy.py:42
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.0/tests/integration/test_proxy.py:42: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
  Use @pytest.fixture instead; they are the same.
    @pytest.yield_fixture(scope="session")

tests/integration/test_wild.py:86
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.0/tests/integration/test_wild.py:86: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
  Use @pytest.fixture instead; they are the same.
    @pytest.yield_fixture(scope="session")

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:116: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:172: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:144: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:191: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:210: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:229: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========================================================================= short test summary info ==========================================================================
SKIPPED [1] tests/integration/test_tornado.py:12: could not import 'tornado': No module named 'tornado'
SKIPPED [1] tests/integration/test_boto3.py:58: botocore version 1.27.17 does not use vendored requests anymore.
SKIPPED [1] tests/integration/test_boto3.py:76: Encrypted Environment Variables from Travis Repository Settings are disabled on PRs from forks. https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
SKIPPED [1] tests/integration/test_boto3.py:94: Encrypted Environment Variables from Travis Repository Settings are disabled on PRs from forks. https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
SKIPPED [1] tests/integration/test_requests.py:116: condition: sys.version_info >= (3, 6)
FAILED tests/integration/test_boto.py::test_boto_without_vcr - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAu...
FAILED tests/integration/test_boto.py::test_boto_medium_difficulty - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['...
FAILED tests/integration/test_boto.py::test_boto_hardcore_mode - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['Hmac...
FAILED tests/integration/test_boto.py::test_boto_iam - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Hand...
FAILED tests/integration/test_requests.py::test_status_code[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceede...
FAILED tests/integration/test_requests.py::test_headers[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceeded wi...
FAILED tests/integration/test_requests.py::test_body[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_get_empty_content_type_json[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max...
FAILED tests/integration/test_requests.py::test_effective_url[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries excee...
FAILED tests/integration/test_requests.py::test_auth[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_auth_failed[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceede...
FAILED tests/integration/test_requests.py::test_post[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_redirects[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceeded ...
FAILED tests/integration/test_requests.py::test_gzip[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_session_created_before_use_cassette_is_patched[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>...
FAILED tests/integration/test_requests.py::test_nested_cassettes_with_session_created_before_nesting[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='127...
FAILED tests/integration/test_requests.py::test_post_file[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceeded ...
FAILED tests/integration/test_requests.py::test_filter_post_params[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries ...
FAILED tests/integration/test_requests.py::test_post_unicode_match_on_body[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max ...
FAILED tests/integration/test_requests.py::test_cross_scheme - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=44819): Max retries exceeded with...
========================================================= 20 failed, 366 passed, 5 skipped, 136 warnings in 48.74s =========================================================

As you see there are some warnings about use rfc3986 module.

Just testted 4.2.1.
Only will quote summary
============================================================================= warnings summary =============================================================================
../../../../../usr/lib/python3.8/site-packages/botocore/httpsession.py:41
  /usr/lib/python3.8/site-packages/botocore/httpsession.py:41: DeprecationWarning: 'urllib3.contrib.pyopenssl' module is deprecated and will be removed in a future release of urllib3 2.x. Read more in this issue: https://github.com/urllib3/urllib3/issues/2680
    from urllib3.contrib.pyopenssl import orig_util_SSLContext as SSLContext

../../../../../usr/lib/python3.8/site-packages/boto/plugin.py:40
  /usr/lib/python3.8/site-packages/boto/plugin.py:40: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
    import imp

tests/integration/test_proxy.py:42
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_proxy.py:42: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
  Use @pytest.fixture instead; they are the same.
    @pytest.yield_fixture(scope="session")

tests/integration/test_tornado.py:53
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:53: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:65
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:65: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:77
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:77: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:90
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:90: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:103
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:103: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:118
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:118: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:141
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:141: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:156
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:156: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:168
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:168: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:187
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:187: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:212
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:212: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:224
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:224: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:242
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:242: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:258
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:258: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:274
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:274: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:288
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:288: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:295
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:295: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:309
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:309: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:322
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:322: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:337
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_tornado.py:337: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:53
  tests/integration/test_tornado.py:53: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_status_code will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:65
  tests/integration/test_tornado.py:65: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_headers will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:77
  tests/integration/test_tornado.py:77: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_body will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:90
  tests/integration/test_tornado.py:90: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_effective_url will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:103
  tests/integration/test_tornado.py:103: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_auth will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:118
  tests/integration/test_tornado.py:118: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_auth_failed will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:141
  tests/integration/test_tornado.py:141: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_post will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:156
  tests/integration/test_tornado.py:156: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_redirects will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:168
  tests/integration/test_tornado.py:168: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_cross_scheme will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:187
  tests/integration/test_tornado.py:187: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_gzip will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:212
  tests/integration/test_tornado.py:212: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_https_with_cert_validation_disabled will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:224
  tests/integration/test_tornado.py:224: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_unsupported_features_raises_in_future will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:241
  tests/integration/test_tornado.py:241: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_unsupported_features_raise_error_disabled will be ignored
    @pytest.mark.skipif(not supports_raise_error, reason="raise_error unavailable in tornado <= 3")

tests/integration/test_tornado.py:258
  tests/integration/test_tornado.py:258: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_cannot_overwrite_cassette_raises_in_future will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:273
  tests/integration/test_tornado.py:273: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_cannot_overwrite_cassette_raise_error_disabled will be ignored
    @pytest.mark.skipif(not supports_raise_error, reason="raise_error unavailable in tornado <= 3")

tests/integration/test_tornado.py:288
  tests/integration/test_tornado.py:288: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_tornado_with_decorator_use_cassette will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:295
  tests/integration/test_tornado.py:295: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_tornado_exception_can_be_caught will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:309
  tests/integration/test_tornado.py:309: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_existing_references_get_patched will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:322
  tests/integration/test_tornado.py:322: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_existing_instances_get_patched will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:337
  tests/integration/test_tornado.py:337: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_request_time_is_set will be ignored
    @pytest.mark.gen_test

tests/integration/test_wild.py:86
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.2.1/tests/integration/test_wild.py:86: PytestDeprecationWarning: @pytest.yield_fixture is deprecated.
  Use @pytest.fixture instead; they are the same.
    @pytest.yield_fixture(scope="session")

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:116: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:172: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:144: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:191: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:210: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

tests/integration/test_httpx.py: 22 warnings
  /usr/lib/python3.8/site-packages/rfc3986/_mixin.py:229: DeprecationWarning: Please use rfc3986.validators.Validator instead. This method will be eventually removed.
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========================================================================= short test summary info ==========================================================================
SKIPPED [1] tests/integration/test_boto3.py:58: botocore version 1.27.62 does not use vendored requests anymore.
SKIPPED [1] tests/integration/test_boto3.py:76: Encrypted Environment Variables from Travis Repository Settings are disabled on PRs from forks. https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
SKIPPED [1] tests/integration/test_boto3.py:94: Encrypted Environment Variables from Travis Repository Settings are disabled on PRs from forks. https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
SKIPPED [1] tests/integration/test_requests.py:116: condition: sys.version_info >= (3, 6)
XFAIL tests/integration/test_tornado.py::test_status_code
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_status_code will be ignored
XFAIL tests/integration/test_tornado.py::test_headers
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_headers will be ignored
XFAIL tests/integration/test_tornado.py::test_body
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_body will be ignored
XFAIL tests/integration/test_tornado.py::test_effective_url
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_effective_url will be ignored
XFAIL tests/integration/test_tornado.py::test_auth
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_auth will be ignored
XFAIL tests/integration/test_tornado.py::test_auth_failed
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_auth_failed will be ignored
XFAIL tests/integration/test_tornado.py::test_post
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_post will be ignored
XFAIL tests/integration/test_tornado.py::test_redirects
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_redirects will be ignored
XFAIL tests/integration/test_tornado.py::test_cross_scheme
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_cross_scheme will be ignored
XFAIL tests/integration/test_tornado.py::test_gzip
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_gzip will be ignored
XFAIL tests/integration/test_tornado.py::test_https_with_cert_validation_disabled
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_https_with_cert_validation_disabled will be ignored
XFAIL tests/integration/test_tornado.py::test_unsupported_features_raises_in_future
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_unsupported_features_raises_in_future will be ignored
XFAIL tests/integration/test_tornado.py::test_unsupported_features_raise_error_disabled
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_unsupported_features_raise_error_disabled will be ignored
XFAIL tests/integration/test_tornado.py::test_cannot_overwrite_cassette_raises_in_future
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_cannot_overwrite_cassette_raises_in_future will be ignored
XFAIL tests/integration/test_tornado.py::test_cannot_overwrite_cassette_raise_error_disabled
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_cannot_overwrite_cassette_raise_error_disabled will be ignored
XFAIL tests/integration/test_tornado.py::test_tornado_with_decorator_use_cassette
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_tornado_with_decorator_use_cassette will be ignored
XFAIL tests/integration/test_tornado.py::test_tornado_exception_can_be_caught
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_tornado_exception_can_be_caught will be ignored
XFAIL tests/integration/test_tornado.py::test_existing_references_get_patched
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_existing_references_get_patched will be ignored
XFAIL tests/integration/test_tornado.py::test_existing_instances_get_patched
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_existing_instances_get_patched will be ignored
XFAIL tests/integration/test_tornado.py::test_request_time_is_set
  reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_request_time_is_set will be ignored
FAILED tests/integration/test_boto.py::test_boto_without_vcr - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAu...
FAILED tests/integration/test_boto.py::test_boto_medium_difficulty - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['...
FAILED tests/integration/test_boto.py::test_boto_hardcore_mode - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['Hmac...
FAILED tests/integration/test_boto.py::test_boto_iam - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV4Hand...
FAILED tests/integration/test_requests.py::test_status_code[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceede...
FAILED tests/integration/test_requests.py::test_headers[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceeded wi...
FAILED tests/integration/test_requests.py::test_body[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_get_empty_content_type_json[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max...
FAILED tests/integration/test_requests.py::test_effective_url[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries excee...
FAILED tests/integration/test_requests.py::test_auth[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_auth_failed[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceede...
FAILED tests/integration/test_requests.py::test_post[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_redirects[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceeded ...
FAILED tests/integration/test_requests.py::test_gzip[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceeded with ...
FAILED tests/integration/test_requests.py::test_session_created_before_use_cassette_is_patched[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>...
FAILED tests/integration/test_requests.py::test_nested_cassettes_with_session_created_before_nesting[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='127...
FAILED tests/integration/test_requests.py::test_post_file[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceeded ...
FAILED tests/integration/test_requests.py::test_filter_post_params[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries ...
FAILED tests/integration/test_requests.py::test_post_unicode_match_on_body[https] - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max ...
FAILED tests/integration/test_requests.py::test_cross_scheme - requests.exceptions.SSLError: HTTPSConnectionPool(host='<IP_ADDRESS>', port=36041): Max retries exceeded with...
=================================================== 20 failed, 366 passed, 4 skipped, 20 xfailed, 176 warnings in 46.89s ===================================================

Dio you have aby idea why those younits may be failing?
And/or is it anything else what I can try to diagnose those fails? 🤔

Summary from testing latest 4.3.0

===================================================================================== warnings summary ======================================================================================
../../../../../usr/lib/python3.8/site-packages/boto/plugin.py:40
  /usr/lib/python3.8/site-packages/boto/plugin.py:40: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
    import imp

tests/integration/test_tornado.py:47
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:47: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:59
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:59: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:71
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:71: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:84
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:84: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:97
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:97: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:112
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:112: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:135
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:135: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:150
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:150: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:162
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:162: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:181
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:181: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:206
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:206: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:218
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:218: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:236
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:236: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:252
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:252: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:268
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:268: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:282
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:282: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:289
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:289: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:303
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:303: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:316
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:316: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:331
  /home/tkloczko/rpmbuild/BUILD/vcrpy-4.3.0/tests/integration/test_tornado.py:331: PytestUnknownMarkWarning: Unknown pytest.mark.gen_test - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @pytest.mark.gen_test

tests/integration/test_tornado.py:47
  tests/integration/test_tornado.py:47: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_status_code will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:59
  tests/integration/test_tornado.py:59: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_headers will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:71
  tests/integration/test_tornado.py:71: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_body will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:84
  tests/integration/test_tornado.py:84: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_effective_url will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:97
  tests/integration/test_tornado.py:97: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_auth will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:112
  tests/integration/test_tornado.py:112: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_auth_failed will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:135
  tests/integration/test_tornado.py:135: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_post will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:150
  tests/integration/test_tornado.py:150: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_redirects will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:162
  tests/integration/test_tornado.py:162: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_cross_scheme will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:181
  tests/integration/test_tornado.py:181: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_gzip will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:206
  tests/integration/test_tornado.py:206: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_https_with_cert_validation_disabled will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:218
  tests/integration/test_tornado.py:218: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_unsupported_features_raises_in_future will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:235
  tests/integration/test_tornado.py:235: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_unsupported_features_raise_error_disabled will be ignored
    @pytest.mark.skipif(not supports_raise_error, reason="raise_error unavailable in tornado <= 3")

tests/integration/test_tornado.py:252
  tests/integration/test_tornado.py:252: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_cannot_overwrite_cassette_raises_in_future will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:267
  tests/integration/test_tornado.py:267: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_cannot_overwrite_cassette_raise_error_disabled will be ignored
    @pytest.mark.skipif(not supports_raise_error, reason="raise_error unavailable in tornado <= 3")

tests/integration/test_tornado.py:282
  tests/integration/test_tornado.py:282: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_tornado_with_decorator_use_cassette will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:289
  tests/integration/test_tornado.py:289: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_tornado_exception_can_be_caught will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:303
  tests/integration/test_tornado.py:303: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_existing_references_get_patched will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:316
  tests/integration/test_tornado.py:316: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_existing_instances_get_patched will be ignored
    @pytest.mark.gen_test

tests/integration/test_tornado.py:331
  tests/integration/test_tornado.py:331: PytestCollectionWarning: yield tests were removed in pytest 4.0 - test_request_time_is_set will be ignored
    @pytest.mark.gen_test

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================================================================== short test summary info ==================================================================================
SKIPPED [1] tests/integration/test_boto3.py:60: Encrypted Environment Variables from Travis Repository Settings are disabled on PRs from forks. https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
SKIPPED [1] tests/integration/test_boto3.py:77: Encrypted Environment Variables from Travis Repository Settings are disabled on PRs from forks. https://docs.travis-ci.com/user/pull-requests/#pull-requests-and-security-restrictions
SKIPPED [1] tests/integration/test_requests.py:117: condition: sys.version_info >= (3, 6)
XFAIL tests/integration/test_tornado.py::test_status_code - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_status_code will be ignored
XFAIL tests/integration/test_tornado.py::test_headers - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_headers will be ignored
XFAIL tests/integration/test_tornado.py::test_body - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_body will be ignored
XFAIL tests/integration/test_tornado.py::test_effective_url - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_effective_url will be ignored
XFAIL tests/integration/test_tornado.py::test_auth - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_auth will be ignored
XFAIL tests/integration/test_tornado.py::test_auth_failed - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_auth_failed will be ignored
XFAIL tests/integration/test_tornado.py::test_post - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_post will be ignored
XFAIL tests/integration/test_tornado.py::test_redirects - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_redirects will be ignored
XFAIL tests/integration/test_tornado.py::test_cross_scheme - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_cross_scheme will be ignored
XFAIL tests/integration/test_tornado.py::test_gzip - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_gzip will be ignored
XFAIL tests/integration/test_tornado.py::test_https_with_cert_validation_disabled - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_https_with_cert_validation_disabled will be ignored
XFAIL tests/integration/test_tornado.py::test_unsupported_features_raises_in_future - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_unsupported_features_raises_in_future will be ignored
XFAIL tests/integration/test_tornado.py::test_unsupported_features_raise_error_disabled - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_unsupported_features_raise_error_disabled will be ignored
XFAIL tests/integration/test_tornado.py::test_cannot_overwrite_cassette_raises_in_future - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_cannot_overwrite_cassette_raises_in_future will be ignored
XFAIL tests/integration/test_tornado.py::test_cannot_overwrite_cassette_raise_error_disabled - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_cannot_overwrite_cassette_raise_error_disabled will be ignored
XFAIL tests/integration/test_tornado.py::test_tornado_with_decorator_use_cassette - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_tornado_with_decorator_use_cassette will be ignored
XFAIL tests/integration/test_tornado.py::test_tornado_exception_can_be_caught - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_tornado_exception_can_be_caught will be ignored
XFAIL tests/integration/test_tornado.py::test_existing_references_get_patched - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_existing_references_get_patched will be ignored
XFAIL tests/integration/test_tornado.py::test_existing_instances_get_patched - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_existing_instances_get_patched will be ignored
XFAIL tests/integration/test_tornado.py::test_request_time_is_set - reason: [NOTRUN] yield tests were removed in pytest 4.0 - test_request_time_is_set will be ignored
FAILED tests/integration/test_boto.py::test_boto_without_vcr - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials
FAILED tests/integration/test_boto.py::test_boto_medium_difficulty - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials
FAILED tests/integration/test_boto.py::test_boto_hardcore_mode - boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler'] Check your credentials