Fixed the __ne__ implementation in base.Resource

Any object of Resource class or its child class do not compare with
None as expected. For example if a server has been found and is
clearly not None, the test "server!=None" will be False.

This was occuring because the __eq__ implementation was returning the
'NotImplemented' keyword and the __ne__ implementation was returning
the not of __eq__, which in this case will return False as the
expected python behavior for a the not of NotImplemented is False.

Changed the __ne__ implementation to return the correct boolean value
and added the test case that fails with the older implementation and
passes in the current fix.

Change-Id: I6bf5a6e9c9eed4bbcf6678467df19dfea560b4de
Closes-Bug: #1648207
This commit is contained in:
Akshil Verma 2016-12-11 13:37:25 -06:00
parent 56bb3dae5f
commit 78e621faf7
2 changed files with 9 additions and 1 deletions

View File

@ -210,7 +210,9 @@ class Resource(RequestIdMixin):
return self._info == other._info
def __ne__(self, other):
return not self.__eq__(other)
# Using not of '==' implementation because the not of
# __eq__, when it returns NotImplemented, is returning False.
return not self == other
def is_loaded(self):
return self._loaded

View File

@ -71,6 +71,12 @@ class BaseTest(utils.TestCase):
r2 = base.Resource(None, {'name': 'joe', 'age': 12})
self.assertEqual(r1, r2)
def test_ne(self):
# Two resources of different types: never equal
r1 = base.Resource(None, {'id': 1, 'name': 'test'})
r2 = object()
self.assertNotEqual(r1, r2)
def test_findall_invalid_attribute(self):
cs = fakes.FakeClient(api_versions.APIVersion("2.0"))
# Make sure findall with an invalid attribute doesn't cause errors.