[Python-modules-team] Bug#907168: pytest-httpbin FTBFS with OpenSSL 1.1.1

Adrian Bunk bunk at debian.org
Fri Aug 24 12:52:03 BST 2018


Source: pytest-httpbin
Version: 0.3.0-3
Severity: serious
Tags: ftbfs
Control: block 907015 by -1

https://tests.reproducible-builds.org/debian/rb-pkg/unstable/amd64/pytest-httpbin.html

...
I: pybuild base:217: python2.7 -m pytest -v -x -s
============================= test session starts ==============================
platform linux2 -- Python 2.7.15, pytest-3.6.4, py-1.5.4, pluggy-0.6.0 -- /usr/bin/python2.7
cachedir: .pytest_cache
rootdir: /build/1st/pytest-httpbin-0.3.0, inifile:
plugins: httpbin-0.3.0
collecting ... collected 19 items

tests/test_httpbin.py::test_httpbin_gets_injected PASSED
tests/test_httpbin.py::test_httpbin_accepts_get_requests 127.0.0.1 - - [23/Aug/2018 22:26:12] "GET /get HTTP/1.1" 200 218
PASSED
tests/test_httpbin.py::test_httpbin_secure_accepts_get_requests pytest-httpbin server hit an exception serving request: [SSL: CA_MD_TOO_WEAK] ca md too weak (_ssl.c:2779)
attempting to ignore so the rest of the tests can run
FAILED

=================================== FAILURES ===================================
___________________ test_httpbin_secure_accepts_get_requests ___________________

httpbin_secure = <pytest_httpbin.serve.SecureServer object at 0x7f7c2bbf0a10>

    def test_httpbin_secure_accepts_get_requests(httpbin_secure):
>       assert requests.get(httpbin_secure.url + '/get').status_code == 200

tests/test_httpbin.py:15: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python2.7/dist-packages/requests/api.py:72: in get
    return request('get', url, params=params, **kwargs)
/usr/lib/python2.7/dist-packages/requests/api.py:58: in request
    return session.request(method=method, url=url, **kwargs)
/usr/lib/python2.7/dist-packages/requests/sessions.py:508: in request
    resp = self.send(prep, **send_kwargs)
/usr/lib/python2.7/dist-packages/requests/sessions.py:618: in send
    r = adapter.send(request, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <requests.adapters.HTTPAdapter object at 0x7f7c2bbf0810>
request = <PreparedRequest [GET]>, stream = False
timeout = <urllib3.util.timeout.Timeout object at 0x7f7c2b38c110>
verify = '/build/1st/pytest-httpbin-0.3.0/pytest_httpbin/certs/cacert.pem'
cert = None, proxies = OrderedDict([('no', 'localhost')])

    def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):
        """Sends PreparedRequest object. 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
            """
    
        conn = self.get_connection(request.url, proxies)
    
        self.cert_verify(conn, request.url, verify, cert)
        url = self.request_url(request, proxies)
        self.add_headers(request)
    
        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 {0}. 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:
                    low_conn.putrequest(request.method,
                                        url,
                                        skip_accept_encoding=True)
    
                    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+ versions, use buffering of HTTP
                        # responses
                        r = low_conn.getresponse(buffering=True)
                    except TypeError:
                        # For compatibility with Python 2.6 versions and back
                        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)
E           ConnectionError: ('Connection aborted.', error(0, 'Error'))

/usr/lib/python2.7/dist-packages/requests/adapters.py:490: ConnectionError
====================== 1 failed, 2 passed in 1.27 seconds ======================
E: pybuild pybuild:338: test: plugin custom failed with: exit code=1: python2.7 -m pytest -v -x -s
dh_auto_test: pybuild --test --test-pytest -i python{version} -p 2.7 returned exit code 13
make[1]: *** [debian/rules:13: override_dh_auto_install] Error 25



More information about the Python-modules-team mailing list