[Python-modules-team] Bug#973134: python-webob: FTBFS: tests failed

Lucas Nussbaum lucas at debian.org
Tue Oct 27 17:11:42 GMT 2020


Source: python-webob
Version: 1:1.8.6-1
Severity: serious
Justification: FTBFS on amd64
Tags: bullseye sid ftbfs
Usertags: ftbfs-20201027 ftbfs-bullseye

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.

Relevant part (hopefully):
> make[1]: Entering directory '/<<PKGBUILDDIR>>'
> # enable network, tests.test_in_wsgiref.test_request_reading needs it
> set -e ; for vers in `py3versions -vr` ; do \
> 	http_proxy='' PYTHONPATH=.:/<<PKGBUILDDIR>>/src python$vers -m pytest tests ; \
> done
> py3versions: no X-Python3-Version in control file, using supported versions
> ============================= test session starts ==============================
> platform linux -- Python 3.9.0+, pytest-4.6.11, py-1.9.0, pluggy-0.13.0
> rootdir: /<<PKGBUILDDIR>>, inifile: setup.cfg
> collected 2388 items
> 
> tests/test_acceptparse.py .............................................. [  1%]
> ........................................................................ [  4%]
> ........................................................................ [  7%]
> ........................................................................ [ 10%]
> ........................................................................ [ 13%]
> ........................................................................ [ 17%]
> ........................................................................ [ 20%]
> ........................................................................ [ 23%]
> ........................................................................ [ 26%]
> ........................................................................ [ 29%]
> ........................................................................ [ 32%]
> ........................................................................ [ 35%]
> ........................................................................ [ 38%]
> ........................................................................ [ 41%]
> ........................................................................ [ 44%]
> ........................................................................ [ 47%]
> ........................................................................ [ 50%]
> ........................................................                 [ 52%]
> tests/test_byterange.py ...............                                  [ 53%]
> tests/test_cachecontrol.py ...............................               [ 54%]
> tests/test_client.py .............                                       [ 54%]
> tests/test_client_functional.py FFFF                                     [ 55%]
> tests/test_compat.py ...........                                         [ 55%]
> tests/test_cookies.py .............................................s.s.s [ 57%]
> ................................................                         [ 59%]
> tests/test_cookies_bw.py .                                               [ 59%]
> tests/test_datetime_utils.py ......                                      [ 60%]
> tests/test_dec.py .........................                              [ 61%]
> tests/test_descriptors.py .............................................. [ 62%]
> ........................................................................ [ 65%]
> .........                                                                [ 66%]
> tests/test_etag.py ..........................                            [ 67%]
> tests/test_etag_nose.py .......                                          [ 67%]
> tests/test_exc.py ........................................               [ 69%]
> tests/test_headers.py .................                                  [ 70%]
> tests/test_in_wsgiref.py FF                                              [ 70%]
> tests/test_misc.py ...s.........s.                                       [ 70%]
> tests/test_multidict.py ................................................ [ 72%]
> ........................................................................ [ 75%]
>                                                                          [ 75%]
> tests/test_request.py .................................................. [ 77%]
> ........................................................................ [ 80%]
> ........................................................................ [ 84%]
> ...................................................................s.s.s [ 87%]
> ..............................s......................................... [ 90%]
> ...............................................                          [ 92%]
> tests/test_response.py ................................................. [ 94%]
> ........x............................................................... [ 97%]
> .....................................                                    [ 98%]
> tests/test_static.py ....................                                [ 99%]
> tests/test_transcode.py ......                                           [ 99%]
> tests/test_util.py .......                                               [100%]
> 
> =================================== FAILURES ===================================
> _________________________________ test_client __________________________________
> 
> serve = <function serve.<locals>._serve at 0x7fbedacfa0d0>, client_app = None
> 
>     @pytest.mark.usefixtures("serve")
>     def test_client(serve, client_app=None):
>         with serve(simple_app) as server:
>             req = Request.blank(server.url, method='POST', content_type='application/json',
>                                 json={'test': 1})
>             resp = req.send(client_app)
>             assert resp.status_code == 200, resp.status
>             assert resp.json['headers']['Content-Type'] == 'application/json'
>             assert resp.json['method'] == 'POST'
>             # Test that these values get filled in:
>             del req.environ['SERVER_NAME']
>             del req.environ['SERVER_PORT']
>             resp = req.send(client_app)
>             assert resp.status_code == 200, resp.status
>             req = Request.blank(server.url)
>             del req.environ['SERVER_NAME']
>             del req.environ['SERVER_PORT']
>             assert req.send(client_app).status_code == 200
>             req.headers['Host'] = server.url.lstrip('http://')
>             del req.environ['SERVER_NAME']
>             del req.environ['SERVER_PORT']
>             resp = req.send(client_app)
>             assert resp.status_code == 200, resp.status
>             del req.environ['SERVER_NAME']
>             del req.environ['SERVER_PORT']
>             del req.headers['Host']
>             assert req.environ.get('SERVER_NAME') is None
>             assert req.environ.get('SERVER_PORT') is None
>             assert req.environ.get('HTTP_HOST') is None
>             with pytest.raises(ValueError):
>                 req.send(client_app)
>             req = Request.blank(server.url)
>             req.environ['CONTENT_LENGTH'] = 'not a number'
> >           assert req.send(client_app).status_code == 200
> 
> tests/test_client_functional.py:51: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> /usr/lib/python3.9/contextlib.py:124: in __exit__
>     next(self.gen)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> app = <wsgify at 140457700217664 wrapping <function simple_app at 0x7fbedb32f8b0>>
> 
>     @contextmanager
>     def _serve(app):
>         server = _make_test_server(app)
>         try:
>             worker = threading.Thread(target=server.serve_forever)
>             worker.setDaemon(True)
>             worker.start()
>             server.url = "http://localhost:%d" % server.server_port
>             log.debug("server started on %s", server.url)
>     
>             yield server
>         finally:
>             log.debug("shutting server down")
>             server.shutdown()
>             worker.join(1)
> >           if worker.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> tests/conftest.py:63: AttributeError
> ____________________________ test_no_content_length ____________________________
> 
> serve = <function serve.<locals>._serve at 0x7fbedacf0700>, client_app = None
> 
>     @pytest.mark.usefixtures("serve")
>     def test_no_content_length(serve, client_app=None):
>         with serve(no_length_app) as server:
>             req = Request.blank(server.url)
>             resp = req.send(client_app)
> >           assert resp.status_code == 200, resp.status
> 
> tests/test_client_functional.py:64: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> /usr/lib/python3.9/contextlib.py:124: in __exit__
>     next(self.gen)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> app = <function no_length_app at 0x7fbedb334940>
> 
>     @contextmanager
>     def _serve(app):
>         server = _make_test_server(app)
>         try:
>             worker = threading.Thread(target=server.serve_forever)
>             worker.setDaemon(True)
>             worker.start()
>             server.url = "http://localhost:%d" % server.server_port
>             log.debug("server started on %s", server.url)
>     
>             yield server
>         finally:
>             log.debug("shutting server down")
>             server.shutdown()
>             worker.join(1)
> >           if worker.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> tests/conftest.py:63: AttributeError
> _____________________________ test_client_cookies ______________________________
> 
> serve = <function serve.<locals>._serve at 0x7fbedacf0550>, client_app = None
> 
>     @pytest.mark.usefixtures("serve")
>     def test_client_cookies(serve, client_app=None):
>         with serve(cookie_app) as server:
>             req = Request.blank(server.url + '/?test')
>             resp = req.send(client_app)
>             assert resp.headers.getall('Set-Cookie') == ['a=b', 'c=d']
> >           assert resp.headers['X-Crazy'] == 'value, continuation', repr(resp.headers['X-Crazy'])
> 
> tests/test_client_functional.py:82: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> /usr/lib/python3.9/contextlib.py:124: in __exit__
>     next(self.gen)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> app = <wsgify at 140457675600944 wrapping <function cookie_app at 0x7fbedb334a60>>
> 
>     @contextmanager
>     def _serve(app):
>         server = _make_test_server(app)
>         try:
>             worker = threading.Thread(target=server.serve_forever)
>             worker.setDaemon(True)
>             worker.start()
>             server.url = "http://localhost:%d" % server.server_port
>             log.debug("server started on %s", server.url)
>     
>             yield server
>         finally:
>             log.debug("shutting server down")
>             server.shutdown()
>             worker.join(1)
> >           if worker.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> tests/conftest.py:63: AttributeError
> _______________________________ test_client_slow _______________________________
> 
> serve = <function serve.<locals>._serve at 0x7fbedacf05e0>
> client_app = <webob.client.SendRequest object at 0x7fbedb4477c0>
> 
>     @pytest.mark.usefixtures("serve")
>     def test_client_slow(serve, client_app=None):
>         if client_app is None:
>             client_app = SendRequest()
>         if not client_app._timeout_supported(client_app.HTTPConnection):
>             # timeout isn't supported
>             return
>         with serve(slow_app) as server:
>             req = Request.blank(server.url)
>             req.environ['webob.client.timeout'] = 0.1
>             resp = req.send(client_app)
> >           assert resp.status_code == 504, resp.status
> 
> tests/test_client_functional.py:102: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> /usr/lib/python3.9/contextlib.py:124: in __exit__
>     next(self.gen)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> app = <wsgify at 140457701719584 wrapping <function slow_app at 0x7fbedb334b80>>
> 
>     @contextmanager
>     def _serve(app):
>         server = _make_test_server(app)
>         try:
>             worker = threading.Thread(target=server.serve_forever)
>             worker.setDaemon(True)
>             worker.start()
>             server.url = "http://localhost:%d" % server.server_port
>             log.debug("server started on %s", server.url)
>     
>             yield server
>         finally:
>             log.debug("shutting server down")
>             server.shutdown()
>             worker.join(1)
> >           if worker.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> tests/conftest.py:63: AttributeError
> _____________________________ test_request_reading _____________________________
> 
> serve = <function serve.<locals>._serve at 0x7fbedacf0af0>
> 
>     @pytest.mark.usefixtures("serve")
>     def test_request_reading(serve):
>         """
>             Test actual request/response cycle in the presence of Request.copy()
>             and other methods that can potentially hang.
>         """
>         with serve(_test_app_req_reading) as server:
>             for key in _test_ops_req_read:
>                 resp = url_open(server.url + key, timeout=3)
> >               assert resp.read() == b"ok"
> 
> tests/test_in_wsgiref.py:27: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> /usr/lib/python3.9/contextlib.py:124: in __exit__
>     next(self.gen)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> app = <function _test_app_req_reading at 0x7fbed9e18dc0>
> 
>     @contextmanager
>     def _serve(app):
>         server = _make_test_server(app)
>         try:
>             worker = threading.Thread(target=server.serve_forever)
>             worker.setDaemon(True)
>             worker.start()
>             server.url = "http://localhost:%d" % server.server_port
>             log.debug("server started on %s", server.url)
>     
>             yield server
>         finally:
>             log.debug("shutting server down")
>             server.shutdown()
>             worker.join(1)
> >           if worker.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> tests/conftest.py:63: AttributeError
> ___________________________ test_interrupted_request ___________________________
> 
> serve = <function serve.<locals>._serve at 0x7fbedacf0dc0>
> 
>     @pytest.mark.usefixtures("serve")
>     def test_interrupted_request(serve):
>         with serve(_test_app_req_interrupt) as server:
>             for path in _test_ops_req_interrupt:
>                 _send_interrupted_req(server, path)
>                 try:
>                     res = _global_res.get(timeout=1)
>                 except Empty:
>                     raise AssertionError("Error during test %s", path)
>                 if res is not None:
>                     print("Error during test:", path)
> >                   reraise(res)
> 
> tests/test_in_wsgiref.py:57: 
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> /usr/lib/python3.9/contextlib.py:124: in __exit__
>     next(self.gen)
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
> 
> app = <function _test_app_req_interrupt at 0x7fbeda5d3160>
> 
>     @contextmanager
>     def _serve(app):
>         server = _make_test_server(app)
>         try:
>             worker = threading.Thread(target=server.serve_forever)
>             worker.setDaemon(True)
>             worker.start()
>             server.url = "http://localhost:%d" % server.server_port
>             log.debug("server started on %s", server.url)
>     
>             yield server
>         finally:
>             log.debug("shutting server down")
>             server.shutdown()
>             worker.join(1)
> >           if worker.isAlive():
> E           AttributeError: 'Thread' object has no attribute 'isAlive'
> 
> tests/conftest.py:63: AttributeError
> =============================== warnings summary ===============================
> tests/test_request.py::TestRequest_functional::test_request_put
>   /<<PKGBUILDDIR>>/src/webob/acceptparse.py:1262: DeprecationWarning: The behavior of .__contains__ for the Accept classes is currently being maintained for backward compatibility, but it will change in the future to better conform to the RFC.
>     warnings.warn(
> 
> tests/test_request.py::TestRequest_functional::test_request_put
>   /<<PKGBUILDDIR>>/src/webob/acceptparse.py:645: DeprecationWarning: The behavior of AcceptValidHeader.__contains__ is currently being maintained for backward compatibility, but it will change in the future to better conform to the RFC.
>     warnings.warn(
> 
> tests/test_response.py::test_set_cookie_expires_is_datetime_and_max_age_is_None
> tests/test_response.py::test_set_cookie_expires_is_timedelta_and_max_age_is_None
> tests/test_response.py::test_set_cookie_expires_is_datetime_tz_and_max_age_is_None
>   /<<PKGBUILDDIR>>/src/webob/response.py:1037: DeprecationWarning: Argument "expires" will be removed in a future version of WebOb, please use "max_age".
>     warn_deprecation('Argument "expires" will be removed in a future '
> 
> -- Docs: https://docs.pytest.org/en/latest/warnings.html
> === 6 failed, 2372 passed, 9 skipped, 1 xfailed, 5 warnings in 11.43 seconds ===
> make[1]: *** [debian/rules:12: override_dh_auto_test] Error 1

The full build log is available from:
   http://qa-logs.debian.net/2020/10/27/python-webob_1.8.6-1_unstable.log

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

About the archive rebuild: The rebuild was done on EC2 VM instances from
Amazon Web Services, using a clean, minimal and up-to-date chroot. Every
failed build was retried once to eliminate random failures.



More information about the Python-modules-team mailing list