Fix modify_fields_from_db for vif_details empty str

vif_details is represented as an empty string in our DB schema
when it's not defined. The 'modify_fields_from_db' method was
incorrectly attempting to feed this directly into the json decoder.

Closes-Bug: #1638703
Change-Id: I7b13fb30de71bb4dce4dbab4ffe430e1d0ef8f3a
This commit is contained in:
Kevin Benton 2016-11-02 13:45:10 -07:00
parent d400c04095
commit 660946a921
2 changed files with 13 additions and 1 deletions

View File

@ -63,7 +63,8 @@ class PortBindingBase(base.NeutronDbObject):
def modify_fields_from_db(cls, db_obj):
fields = super(PortBindingBase, cls).modify_fields_from_db(db_obj)
if 'vif_details' in fields:
fields['vif_details'] = jsonutils.loads(fields['vif_details'])
if fields['vif_details']:
fields['vif_details'] = jsonutils.loads(fields['vif_details'])
if not fields['vif_details']:
fields['vif_details'] = None
return fields

View File

@ -137,6 +137,17 @@ class PortBindingVifDetailsTestCase(testscenarios.WithScenarios,
self.context, **obj._get_composite_keys())
self.assertIsNone(obj.vif_details)
def test_null_vif_details_in_db(self):
# the null case for vif_details in our db model is an
# empty string. add that here to simulate it correctly
# in the tests
kwargs = self.get_random_fields()
kwargs['vif_details'] = ''
db_obj = self._test_class.db_model(**kwargs)
obj_fields = self._test_class.modify_fields_from_db(db_obj)
obj = self._test_class(self.context, **obj_fields)
self.assertIsNone(obj.vif_details)
class IPAllocationIfaceObjTestCase(obj_test_base.BaseObjectIfaceTestCase):