Added audit & strategy ObjectField for ActionPlan

In this changeset, I added the "audit" and the "strategy "ObjectField
which can either be loaded by setting the new "eager" parameter as True
or not loaded (as before) by setting it to False.
The advantage of introducing this eager parameter is that this way,
we can reduce to a minimum the overhead of DB queries whenever the
related object fields is not actually needed.

Change-Id: Ieca6fa438cbf2267f5ae2ea0d059b2953e65076b
Partially-Implements: blueprint watcher-versioned-objects
This commit is contained in:
Vincent Françoise
2016-10-03 17:43:50 +02:00
parent f9df54c555
commit 060c369838
8 changed files with 306 additions and 194 deletions

View File

@@ -274,9 +274,9 @@ class TestPurgeCommand(base.DbTestCase):
id=self._generate_id(),
uuid=utils.generate_uuid())
action_plan4 = obj_utils.create_test_action_plan(
self.context, audit_id=audit4.id,
id=self._generate_id(),
uuid=utils.generate_uuid())
self.context,
id=self._generate_id(), uuid=utils.generate_uuid(),
audit_id=audit4.id, strategy_id=self.strategy1.id)
action4 = obj_utils.create_test_action(
self.context, action_plan_id=action_plan4.id,
id=self._generate_id(),
@@ -292,9 +292,9 @@ class TestPurgeCommand(base.DbTestCase):
id=self._generate_id(),
uuid=utils.generate_uuid())
action_plan5 = obj_utils.create_test_action_plan(
self.context, audit_id=audit5.id,
id=self._generate_id(),
uuid=utils.generate_uuid())
self.context,
id=self._generate_id(), uuid=utils.generate_uuid(),
audit_id=audit5.id, strategy_id=self.strategy1.id)
action5 = obj_utils.create_test_action(
self.context, action_plan_id=action_plan5.id,
id=self._generate_id(),
@@ -367,13 +367,13 @@ class TestPurgeCommand(base.DbTestCase):
strategy_id=None, id=self._generate_id(),
uuid=utils.generate_uuid())
audit4 = obj_utils.create_test_audit(
self.context, audit_template_id=audit_template4.id,
id=self._generate_id(),
uuid=utils.generate_uuid())
self.context,
id=self._generate_id(), uuid=utils.generate_uuid(),
audit_template_id=audit_template4.id)
action_plan4 = obj_utils.create_test_action_plan(
self.context, audit_id=audit4.id,
id=self._generate_id(),
uuid=utils.generate_uuid())
self.context,
id=self._generate_id(), uuid=utils.generate_uuid(),
audit_id=audit4.id, strategy_id=self.strategy1.id)
action4 = obj_utils.create_test_action(
self.context, action_plan_id=action_plan4.id,
id=self._generate_id(),
@@ -389,9 +389,9 @@ class TestPurgeCommand(base.DbTestCase):
id=self._generate_id(),
uuid=utils.generate_uuid())
action_plan5 = obj_utils.create_test_action_plan(
self.context, audit_id=audit5.id,
id=self._generate_id(),
uuid=utils.generate_uuid())
self.context,
id=self._generate_id(), uuid=utils.generate_uuid(),
audit_id=audit5.id, strategy_id=self.strategy1.id)
action5 = obj_utils.create_test_action(
self.context, action_plan_id=action_plan5.id,
id=self._generate_id(),

View File

@@ -137,7 +137,7 @@ def create_test_action(**kwargs):
def get_test_action_plan(**kwargs):
return {
action_plan_data = {
'id': kwargs.get('id', 1),
'uuid': kwargs.get('uuid', '76be87bd-3422-43f9-93a0-e85a577e3061'),
'state': kwargs.get('state', objects.action_plan.State.ONGOING),
@@ -150,6 +150,15 @@ def get_test_action_plan(**kwargs):
'deleted_at': kwargs.get('deleted_at'),
}
# ObjectField doesn't allow None nor dict, so if we want to simulate a
# non-eager object loading, the field should not be referenced at all.
if kwargs.get('audit'):
action_plan_data['audit'] = kwargs.get('audit')
if kwargs.get('strategy'):
action_plan_data['strategy'] = kwargs.get('strategy')
return action_plan_data
def create_test_action_plan(**kwargs):
"""Create test action plan entry in DB and return Action Plan DB object.