Sort child versions before generating fingerprint

We need to sort the version dictionary to ensure py27
and py34 generate the same fingerprint.

Depends-On: I0f07858e96ea3baf46f8a453e253b9ed29c7f7e2
Depends-On: I33bd2d9dff9cb7dc1a50177db7286b7317966784
Change-Id: I0adc3d696c90dfe20d35bdf06f033eb3a2491fd0
This commit is contained in:
Davanum Srinivas
2015-06-30 14:20:31 -04:00
committed by Davanum Srinivas (dims)
parent 520b4496fb
commit adb66403bd
2 changed files with 15 additions and 2 deletions

View File

@@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from collections import OrderedDict
import hashlib import hashlib
import inspect import inspect
import logging import logging
@@ -145,7 +146,9 @@ class ObjectVersionChecker(object):
# but many other things may require a version bump (method behavior # but many other things may require a version bump (method behavior
# and return value changes, for example). # and return value changes, for example).
if hasattr(obj_class, 'child_versions'): if hasattr(obj_class, 'child_versions'):
relevant_data = (obj_fields, methods, obj_class.child_versions) relevant_data = (obj_fields, methods,
OrderedDict(
sorted(obj_class.child_versions.items())))
else: else:
relevant_data = (obj_fields, methods) relevant_data = (obj_fields, methods)
fingerprint = '%s-%s' % (obj_class.VERSION, hashlib.md5( fingerprint = '%s-%s' % (obj_class.VERSION, hashlib.md5(

View File

@@ -149,6 +149,16 @@ class RandomMixInWithNoFields(object):
@base.VersionedObjectRegistry.register @base.VersionedObjectRegistry.register
class TestSubclassedObject(RandomMixInWithNoFields, MyObj): class TestSubclassedObject(RandomMixInWithNoFields, MyObj):
fields = {'new_field': fields.Field(fields.String())} fields = {'new_field': fields.Field(fields.String())}
child_versions = {
'1.0': '1.0',
'1.1': '1.1',
'1.2': '1.1',
'1.3': '1.2',
'1.4': '1.3',
'1.5': '1.4',
'1.6': '1.5',
'1.7': '1.6',
}
class TestRegistry(test.TestCase): class TestRegistry(test.TestCase):
@@ -421,7 +431,7 @@ class TestFixture(_BaseTestCase):
hashes = checker.get_hashes() hashes = checker.get_hashes()
# NOTE(danms): If this object's version or hash changes, this needs # NOTE(danms): If this object's version or hash changes, this needs
# to change. Otherwise, leave it alone. # to change. Otherwise, leave it alone.
self.assertEqual('1.6-b56dbb7efe42a7ceb137d958fc4066cf', self.assertEqual('1.6-7157ceb869f8f63fb9a955e6a7080ad7',
hashes['TestSubclassedObject']) hashes['TestSubclassedObject'])
def test_test_hashes(self): def test_test_hashes(self):