[cinder] Unit test failures under Python 3.11 - mocks can no longer be provided as the specs for other Mocks

Balazs Gibizer bgibizer at redhat.com
Fri Jan 6 14:53:51 UTC 2023



On Wed, Jan 4 2023 at 09:26:10 AM +00:00:00, Sofia Enriquez 
<senrique at redhat.com> wrote:
> Hi,
> 
> Since python3.11 mocks can no longer be provided as the specs for 
> other Mocks. As a result, an already-mocked object cannot be passed 
> to mock.Mock(). This can uncover bugs in tests since these 
> Mock-derived Mocks will always pass certain tests (e.g. isinstance) 
> and built-in assert functions (e.g. assert_called_once_with) will 
> unconditionally pass.[1]
> 
> There's a bug report to track this issue in Cinder [2] but I think 
> this may affect other projects too.
> 
> I've reproduce the error and most drivers fail with:
> ```
> unittest.mock.InvalidSpecError: Cannot spec a Mock object. 
> [object=<Mock name='mock.client.HPE3ParClient' id='139657768087760'>]
> ```
> 

Nova went through this and removed double mocking during Zed. Here are 
the patches: 
https://review.opendev.org/q/topic:unittest.mock+%2522double+mocking%2522 
 Maybe you can use it for ideas how to deal with different double 
mocking scenarios:

Cheers,
gibi

> Cheers,
> Sofia
> 
> [1] <https://github.com/python/cpython/issues/87644>
> [2] <https://bugs.launchpad.net/cinder/+bug/2000436>
> --
> Sofía Enriquez
> 
> she/her
> 
> Software Engineer
> 
> Red Hat PnT <https://www.redhat.com/>
> 
> IRC: @enriquetaso
> 
> @RedHat <https://twitter.com/redhat>   Red Hat 
> <https://www.linkedin.com/company/red-hat> Red Hat 
> <https://www.facebook.com/RedHatInc>
>  <https://www.redhat.com/>
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.openstack.org/pipermail/openstack-discuss/attachments/20230106/47f1cb6f/attachment-0001.htm>


More information about the openstack-discuss mailing list