summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRui Chen <chenrui.momo@gmail.com>2015-11-28 16:04:40 +0800
committerRui Chen <chenrui.momo@gmail.com>2016-03-01 08:47:25 +0000
commiteb1cddbc28f507b117fe3b1808aea78724151e88 (patch)
tree38220e7f50de133a1cd9b1605d0256e2943f37f5
parentd4569534b42075ad78aa67732d07b22e7504a77a (diff)
downloadpython-cinderclient-eb1cddbc28f507b117fe3b1808aea78724151e88.tar.gz
Fix Resource.__eq__ mismatch semantics of object equal
The __eq__ of apiclient.base.Resource will return True, if the two objects have same id, even if they have different other attributes value. The behavior is weird and don't match the semantics of object equal. The objects that have different value should be different objects. Fix this issue and add some test cases in this patch. Change-Id: I187032e5630ac47a4f54db5058dbf9b6e15eba6d Closes-Bug: #1499369
-rw-r--r--cinderclient/openstack/common/apiclient/base.py2
-rw-r--r--cinderclient/tests/unit/test_base.py7
2 files changed, 6 insertions, 3 deletions
diff --git a/cinderclient/openstack/common/apiclient/base.py b/cinderclient/openstack/common/apiclient/base.py
index 3645f68..2c2e7e9 100644
--- a/cinderclient/openstack/common/apiclient/base.py
+++ b/cinderclient/openstack/common/apiclient/base.py
@@ -522,8 +522,6 @@ class Resource(RequestIdMixin):
# two resources of different types are not equal
if not isinstance(other, self.__class__):
return False
- if hasattr(self, 'id') and hasattr(other, 'id'):
- return self.id == other.id
return self._info == other._info
def is_loaded(self):
diff --git a/cinderclient/tests/unit/test_base.py b/cinderclient/tests/unit/test_base.py
index 67265a7..48ec60b 100644
--- a/cinderclient/tests/unit/test_base.py
+++ b/cinderclient/tests/unit/test_base.py
@@ -48,9 +48,14 @@ class BaseTest(utils.TestCase):
self.assertEqual(4, base.getid(TmpObject))
def test_eq(self):
- # Two resources of the same type with the same id: equal
+ # Two resources with same ID: never equal if their info is not equal
r1 = base.Resource(None, {'id': 1, 'name': 'hi'})
r2 = base.Resource(None, {'id': 1, 'name': 'hello'})
+ self.assertNotEqual(r1, r2)
+
+ # Two resources with same ID: equal if their info is equal
+ r1 = base.Resource(None, {'id': 1, 'name': 'hello'})
+ r2 = base.Resource(None, {'id': 1, 'name': 'hello'})
self.assertEqual(r1, r2)
# Two resoruces of different types: never equal