yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #93438
[Bug 2051928] Re: tests - Python 3.12 - TypeError: Object of type _SentinelObject is not JSON serializable
Reviewed: https://review.opendev.org/c/openstack/neutron/+/908255
Committed: https://opendev.org/openstack/neutron/commit/4df5f2f41baede43b3e87ff8b716a7e6c773fbea
Submitter: "Zuul (22348)"
Branch: master
commit 4df5f2f41baede43b3e87ff8b716a7e6c773fbea
Author: Rodolfo Alonso Hernandez <ralonsoh@xxxxxxxxxx>
Date: Wed Feb 7 08:15:03 2024 +0000
[UT] Fix ``APIv2TestBase`` derived test classes
The method test calling ``_post_request`` with create or update
operations, were not properly patching the ML2 plugin
``create_network`` and `update_network`` methods. With
Python3.12, the mock object passed (instead of a dictionary with a
reduced network definition) don't have a ``__json__`` method and
fails during the encoding.
NOTE: this has been manually tested with Python3.12. Currently this
patch cannot be tested in the CI.
Closes-Bug: #2051928
Change-Id: Ie30af0c655d2f27d9039ff7933e81603047da6f4
** Changed in: neutron
Status: In Progress => Fix Released
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/2051928
Title:
tests - Python 3.12 - TypeError: Object of type _SentinelObject is not
JSON serializable
Status in neutron:
Fix Released
Bug description:
Executing unit tests with Python 3.12 results in some test failures
which I think are todo with the way the unit tests mock the __json__
method in the tools module:
neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_networks_create_bulk_registry_publish
-------------------------------------------------------------------------------------------------------
Captured traceback:
~~~~~~~~~~~~~~~~~~~
Traceback (most recent call last):
File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/base.py", line 178, in func
return f(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1300, in test_networks_create_bulk_registry_publish
self._test_registry_publish('create', 'network', input)
File "/home/jamespage/src/upstream/openstack/neutron/neutron/tests/unit/api/v2/test_base.py", line 1269, in _test_registry_publish
res = self.api.post_json(
^^^^^^^^^^^^^^^^^^^
No tests were successful during the run
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/utils.py", line 34, in wrapper
return self._gen_request(method, url, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 749, in _gen_request
return self.do_request(req, status=status,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 646, in do_request
self._check_status(status, res)
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/webtest/app.py", line 675, in _check_status
raise AppError(
webtest.app.AppError: Bad response: 500 Internal Server Error (not 200 OK or 3xx redirect for http://localhost/networks)
b'{"NeutronError": {"type": "HTTPInternalServerError", "message": "Request Failed: internal server error while processing your request.", "detail": ""}}'
Captured pythonlogging:
~~~~~~~~~~~~~~~~~~~~~~~
ERROR [neutron.pecan_wsgi.hooks.translation] POST failed.
Traceback (most recent call last):
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 682, in __call__
self.invoke_controller(controller, args, kwargs, state)
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 603, in invoke_controller
result = self.render(template, result)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/core.py", line 414, in render
return renderer.render(template, namespace)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/templating.py", line 23, in render
return encode(namespace)
^^^^^^^^^^^^^^^^^
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 154, in encode
return _instance.encode(obj)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/json/encoder.py", line 200, in encode
chunks = self.iterencode(o, _one_shot=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/json/encoder.py", line 258, in iterencode
return _iterencode(o, 0)
^^^^^^^^^^^^^^^^^
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 148, in default
return jsonify(obj)
^^^^^^^^^^^^
File "/usr/lib/python3.12/functools.py", line 909, in wrapper
return dispatch(args[0].__class__)(*args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 143, in jsonify
return _default.default(obj)
^^^^^^^^^^^^^^^^^^^^^
File "/home/jamespage/src/upstream/openstack/neutron/.tox/py312/lib/python3.12/site-packages/pecan/jsonify.py", line 129, in default
return JSONEncoder.default(self, obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/json/encoder.py", line 180, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type _SentinelObject is not JSON serializable
Digging in I can see all of the plugin child calls being updated,
however I don't see them actually called under Python 3.12.
This issue impacts the following unit tests:
FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_network_create_registry_publish
FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_network_update_registry_publish
FAIL: neutron.tests.unit.api.v2.test_base.RegistryNotificationTest.test_networks_create_bulk_registry_publish
FAIL: neutron.tests.unit.api.v2.test_base.NotificationTest.test_network_create_notifier
FAIL: neutron.tests.unit.api.v2.test_base.NotificationTest.test_network_update_notifier
FAIL: neutron.tests.unit.api.v2.test_base.QuotaTest.test_create_network_quota_without_limit
FAIL: neutron.tests.unit.extensions.test_providernet.ProvidernetExtensionTestCase.test_network_create_with_provider_attrs
FAIL: neutron.tests.unit.extensions.test_providernet.ProvidernetExtensionTestCase.test_network_update_with_provider_attrs
To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/2051928/+subscriptions
References