[openstack-dev] [Cinder] Need some help with mock
Deepak Shetty
dpkshetty at gmail.com
Mon Apr 28 19:18:44 UTC 2014
Hi Jay,
(I havent checked your link yet)
But just to get some more clarification.. I haven't understood yet, why you
think its not called w/ the expected args ?
I expect it to get called with the expected args bcos ...
_load_shares_config is mocked to _fake_load_shares_config
which sets self._driver.shares dict as my 'expected' share key:value pair
Hence i expect my ensure_share_unmounted to get called with the above share
key:value pair that i set using
_fake_load_shares_config.. and thats not happening.
Your reponse doesn't address this, does it ?
thanx,
deepak
On Mon, Apr 28, 2014 at 11:38 PM, Jay Pipes <jaypipes at gmail.com> wrote:
> On 04/28/2014 02:00 PM, Deepak Shetty wrote:
>
>> I was writing this in test_glusterfs.py
>>
>> def test_ensure_shares_unmounted_1share(self):
>> with contextlib.nested(
>> mock.patch.object(self._driver, '_load_shares_config'),
>> mock.patch.object(self._driver, '_ensure_share_unmounted')
>> ) as (self._fake_load_shares_config,
>> mock_ensure_share_unmounted):
>>
>> #mock_shares = {'127.7.7.7:/gluster1': None}
>> #mock_load_shares_config.return_value = mock_shares
>> #self._driver.shares = mock_load_shares_config.return_value
>>
>> self._driver._ensure_shares_unmounted()
>>
>> mock_ensure_share_unmounted.assert_called_once()
>> mock_ensure_share_unmounted.assert_called_once_with(
>> '127.7.7.7:/gluster1')
>>
>> for my patch @ https://review.openstack.org/#/c/86888/6
>>
>> and i get the output as ..
>>
>> ======================================================================
>> FAIL:
>> cinder.tests.test_glusterfs.GlusterFsDriverTestCase.test_
>> ensure_shares_unmounted_1share
>> ----------------------------------------------------------------------
>> ...
>> ...
>>
>> stderr: {{{
>> cinder/tests/test_glusterfs.py:736: DeprecationWarning: With-statements
>> now directly support multiple context managers
>> mock.patch.object(self._driver, '_ensure_share_unmounted')
>> }}}
>>
>> Traceback (most recent call last):
>> File "cinder/tests/test_glusterfs.py", line 747, in
>> test_ensure_shares_unmounted_1share
>> '127.7.7.7:/gluster1')
>> File "/usr/lib/python2.7/site-packages/mock.py", line 845, in
>> assert_called_once_with
>> raise AssertionError(msg)
>> AssertionError: Expected to be called once. Called 0 times.
>>
>>
>> Can you help with why
>> 'mock_ensure_share_unmounted.assert_called_once()' check passes
>> but
>> 'mock_ensure_share_unmounted.assert_called_once_with('127.
>> 7.7.7:/gluster1')
>> check fails ?
>>
>
> Sure. This is because assert_called_once() is not a method of mock.Mock()
> and therefore is "magic-mocked" to return a mock.MagicMock() itself.
>
> assert_called_once_with(), however, *is* an actual method of the
> mock.Mock() object and therefore is failing because the
> mock_unsure_share_unmounted mock was not called once with the expected
> arguments.
>
> The way to avoid the above problem is to use something called autospec'ing.
>
> You can read more about this intricacy of mock here:
>
> http://www.voidspace.org.uk/python/mock/helpers.html#autospeccing
>
> Best,
> -jay
>
> In glusterfs.py ...
>>
>> def _ensure_shares_unmounted(self):
>> self._load_shares_config(self.configuration.glusterfs_shares_config)
>> for share in self.shares.keys():
>> try:
>> self._ensure_share_unmounted(share)
>> except Exception as exc:
>> LOG.warning(_('Exception during unmounting %s') % (exc,))
>>
>>
>> thanx,
>> deepak
>>
>>
>>
>> _______________________________________________
>> OpenStack-dev mailing list
>> OpenStack-dev at lists.openstack.org
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20140429/1edb41d8/attachment-0001.html>
More information about the OpenStack-dev
mailing list