Prevent adding same OVO version twice to history

Some patches go through a lot of rebases and changes and may end up
mistakenly reusing the same history version as a prior entry.

This is usually caught on review, but just to be sure that this never
gets merged this patch adds a check to the CinderObjectVersionsHistory
add method.

Change-Id: Id5ac41ffcce86c3499e49ad60ac46038567e9fdb
This commit is contained in:
Gorka Eguileor 2016-08-04 12:58:53 +02:00
parent 34f5769922
commit 95d2943b27
2 changed files with 30 additions and 0 deletions

View File

@ -79,6 +79,10 @@ class CinderObjectVersionsHistory(dict):
return self[self.get_current()]
def add(self, ver, updates):
if ver in self.versions:
msg = 'Version %s already exists in history.' % ver
raise exception.ProgrammingError(reason=msg)
self[ver] = self[self.get_current()].copy()
self.versions.append(ver)
self[ver].update(updates)

View File

@ -31,6 +31,32 @@ from cinder.tests.unit import fake_objects
from cinder.tests.unit import objects as test_objects
class TestCinderObjectVersionHistory(test_objects.BaseObjectsTestCase):
def test_add(self):
history = test_objects.obj_base.CinderObjectVersionsHistory()
v10 = {'Backup': '2.0'}
v11 = {'Backup': '2.1'}
history.add('1.0', v10)
history.add('1.1', v11)
# We have 3 elements because we have the liberty version by default
self.assertEqual(2 + 1, len(history))
expected_v10 = history['liberty'].copy()
expected_v10.update(v10)
expected_v11 = history['liberty'].copy()
expected_v11.update(v11)
self.assertEqual('1.1', history.get_current())
self.assertEqual(expected_v11, history.get_current_versions())
self.assertEqual(expected_v10, history['1.0'])
def test_add_existing(self):
history = test_objects.obj_base.CinderObjectVersionsHistory()
history.add('1.0', {'Backup': '1.0'})
self.assertRaises(exception.ProgrammingError,
history.add, '1.0', {'Backup': '1.0'})
class TestCinderObject(test_objects.BaseObjectsTestCase):
"""Tests methods from CinderObject."""