Utilize newly added tasks database fields

Made provision to pass image_id, request_id and user_id information
while creating new task.

Partially-Implements: blueprint messages-api
Change-Id: I299a222eeef81431143db3ba7fc08365c924326b
This commit is contained in:
Abhishek Kekane 2021-02-09 09:41:15 +00:00
parent 8f7ad9f45d
commit d54449af44
22 changed files with 248 additions and 30 deletions

View File

@ -1,4 +1,3 @@
# Copyright 2012 OpenStack Foundation.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
@ -333,7 +332,10 @@ class ImagesController(object):
try:
import_task = task_factory.new_task(task_type='api_image_import',
owner=ctxt.owner,
task_input=task_input)
task_input=task_input,
image_id=image_id,
user_id=ctxt.user_id,
request_id=ctxt.request_id)
# NOTE(danms): Try to grab the lock for this task
try:

View File

@ -74,9 +74,13 @@ class TasksController(object):
executor_factory = self.gateway.get_task_executor_factory(ctxt)
task_repo = self.gateway.get_task_repo(ctxt)
try:
new_task = task_factory.new_task(task_type=task['type'],
owner=ctxt.owner,
task_input=task['input'])
new_task = task_factory.new_task(
task_type=task['type'],
owner=ctxt.owner,
task_input=task['input'],
image_id=task['input'].get('image_id'),
user_id=ctxt.user_id,
request_id=ctxt.request_id)
task_repo.add(new_task)
task_executor = executor_factory.new_task_executor(ctxt)
pool = common.get_thread_pool("tasks_pool")
@ -281,6 +285,12 @@ class ResponseSerializer(wsgi.JSONResponseSerializer):
'self': self._get_task_location(task),
'schema': '/v2/schemas/task'
}
if task.image_id:
task_view['image_id'] = task.image_id
if task.request_id:
task_view['request_id'] = task.request_id
if task.user_id:
task_view['user_id'] = task.user_id
if task.expires_at:
task_view['expires_at'] = timeutils.isotime(task.expires_at)
task_view = schema.filter(task_view) # domain
@ -376,6 +386,18 @@ _TASK_SCHEMA = {
" when appropriate (usually on failure)"),
"type": "string",
},
"image_id": {
"description": _("Image associated with the task"),
"type": "string",
},
"request_id": {
"description": _("Human-readable informative request-id"),
"type": "string",
},
"user_id": {
"description": _("User associated with the task"),
"type": "string",
},
"expires_at": {
"description": _("Datetime when this resource would be"
" subject to removal"),

View File

@ -343,6 +343,9 @@ class TaskRepo(object):
task_input=db_task['input'],
result=db_task['result'],
message=db_task['message'],
image_id=db_task['image_id'],
user_id=db_task['user_id'],
request_id=db_task['request_id'],
)
def _format_task_stub_from_db(self, db_task):
@ -354,6 +357,9 @@ class TaskRepo(object):
expires_at=db_task['expires_at'],
created_at=db_task['created_at'],
updated_at=db_task['updated_at'],
image_id=db_task['image_id'],
user_id=db_task['user_id'],
request_id=db_task['request_id'],
)
def _format_task_to_db(self, task):
@ -367,6 +373,9 @@ class TaskRepo(object):
'expires_at': task.expires_at,
'created_at': task.created_at,
'updated_at': task.updated_at,
'image_id': task.image_id,
'request_id': task.request_id,
'user_id': task.user_id,
}
return task

View File

@ -177,6 +177,9 @@ def _task_format(task_id, **values):
'updated_at': dt,
'deleted_at': None,
'deleted': False,
'image_id': None,
'request_id': None,
'user_id': None,
}
task.update(values)
return task
@ -922,7 +925,8 @@ def task_create(context, values):
required_attributes = ['type', 'status', 'input']
allowed_attributes = ['id', 'type', 'status', 'input', 'result', 'owner',
'message', 'expires_at', 'created_at',
'updated_at', 'deleted_at', 'deleted']
'updated_at', 'deleted_at', 'deleted',
'image_id', 'request_id', 'user_id']
if task_id in DATA['tasks']:
raise exception.Duplicate()

View File

@ -1807,7 +1807,10 @@ def _task_format(task_ref, task_info_ref=None):
'created_at': task_ref['created_at'],
'updated_at': task_ref['updated_at'],
'deleted_at': task_ref['deleted_at'],
'deleted': task_ref['deleted']
'deleted': task_ref['deleted'],
'image_id': task_ref['image_id'],
'request_id': task_ref['request_id'],
'user_id': task_ref['user_id'],
}
if task_info_ref:

View File

@ -356,6 +356,7 @@ class Task(object):
_supported_task_status = ('pending', 'processing', 'success', 'failure')
def __init__(self, task_id, task_type, status, owner,
image_id, user_id, request_id,
expires_at, created_at, updated_at,
task_input, result, message):
@ -379,6 +380,9 @@ class Task(object):
self.task_input = task_input
self.result = result
self.message = message
self.image_id = image_id
self.request_id = request_id
self.user_id = user_id
@property
def status(self):
@ -449,7 +453,8 @@ class Task(object):
class TaskStub(object):
def __init__(self, task_id, task_type, status, owner,
expires_at, created_at, updated_at):
expires_at, created_at, updated_at,
image_id, user_id, request_id):
self.task_id = task_id
self._status = status
self.type = task_type
@ -457,6 +462,9 @@ class TaskStub(object):
self.expires_at = expires_at
self.created_at = created_at
self.updated_at = updated_at
self.image_id = image_id
self.request_id = request_id
self.user_id = user_id
@property
def status(self):
@ -465,8 +473,8 @@ class TaskStub(object):
class TaskFactory(object):
def new_task(self, task_type, owner,
task_input=None, **kwargs):
def new_task(self, task_type, owner, image_id, user_id,
request_id, task_input=None, **kwargs):
task_id = str(uuid.uuid4())
status = 'pending'
# Note(nikhil): expires_at would be set on the task, only when it
@ -479,12 +487,15 @@ class TaskFactory(object):
task_type,
status,
owner,
image_id,
user_id,
request_id,
expires_at,
created_at,
updated_at,
task_input,
kwargs.get('result'),
kwargs.get('message')
kwargs.get('message'),
)

View File

@ -237,6 +237,9 @@ class Task(object):
task_input = _proxy('base', 'task_input')
result = _proxy('base', 'result')
message = _proxy('base', 'message')
image_id = _proxy('base', 'image_id')
request_id = _proxy('base', 'request_id')
user_id = _proxy('base', 'user_id')
def begin_processing(self):
self.base.begin_processing()

View File

@ -102,7 +102,10 @@ class TestTasks(functional.FunctionalTest):
u'status',
u'type',
u'result',
u'updated_at'])
u'updated_at',
u'request_id',
u'user_id',
])
self.assertEqual(checked_keys, set(task.keys()))
expected_task = {
'status': 'pending',

View File

@ -74,7 +74,11 @@ class TestConvertImageTask(test_utils.BaseTestCase):
task_ttl = CONF.task.task_time_to_live
self.task_type = 'import'
request_id = 'fake_request_id'
user_id = 'fake_user'
self.task = self.task_factory.new_task(self.task_type, TENANT1,
self.image_id, user_id,
request_id,
task_time_to_live=task_ttl,
task_input=task_input)

View File

@ -70,7 +70,10 @@ class TestInjectImageMetadataTask(test_utils.BaseTestCase):
task_ttl = CONF.task.task_time_to_live
self.task_type = 'import'
request_id = 'fake_request_id'
user_id = 'fake_user'
self.task = self.task_factory.new_task(self.task_type, TENANT1,
UUID1, user_id, request_id,
task_time_to_live=task_ttl,
task_input=task_input)

View File

@ -64,7 +64,10 @@ class TestImportTask(test_utils.BaseTestCase):
task_ttl = CONF.task.task_time_to_live
self.task_type = 'import'
request_id = 'fake_request_id'
user_id = 'fake_user'
self.task = self.task_factory.new_task(self.task_type, TENANT1,
UUID1, user_id, request_id,
task_time_to_live=task_ttl,
task_input=task_input)

View File

@ -90,7 +90,11 @@ class TestCopyImageTask(test_utils.BaseTestCase):
task_ttl = CONF.task.task_time_to_live
self.task_type = 'import'
request_id = 'fake_request_id'
user_id = 'fake_user'
self.task = self.task_factory.new_task(self.task_type, TENANT1,
self.image_id, user_id,
request_id,
task_time_to_live=task_ttl,
task_input=task_input)

View File

@ -86,7 +86,10 @@ class TestImportTask(test_utils.BaseTestCase):
task_ttl = CONF.task.task_time_to_live
self.task_type = 'import'
request_id = 'fake_request_id'
user_id = 'fake_user'
self.task = self.task_factory.new_task(self.task_type, TENANT1,
UUID1, user_id, request_id,
task_time_to_live=task_ttl,
task_input=task_input)

View File

@ -44,7 +44,11 @@ class TestImportTask(test_utils.BaseTestCase):
task_ttl = CONF.task.task_time_to_live
self.task_type = 'import'
image_id = 'fake_image_id'
user_id = 'fake_user'
request_id = 'fake_request_id'
self.task = self.task_factory.new_task(self.task_type, TENANT1,
image_id, user_id, request_id,
task_time_to_live=task_ttl,
task_input=task_input)

View File

@ -56,7 +56,11 @@ class TestWebDownloadTask(test_utils.BaseTestCase):
task_ttl = CONF.task.task_time_to_live
self.task_type = 'import'
request_id = 'fake_request_id'
user_id = 'fake_user'
self.task = self.task_factory.new_task(self.task_type, TENANT1,
self.image_id, user_id,
request_id,
task_time_to_live=task_ttl,
task_input=task_input)

View File

@ -63,8 +63,13 @@ class TestTaskExecutor(test_utils.BaseTestCase):
task_ttl = CONF.task.task_time_to_live
self.task_type = 'import'
image_id = 'fake-image-id'
request_id = 'fake_request_id'
user_id = 'fake_user'
self.task_factory = domain.TaskFactory()
self.task = self.task_factory.new_task(self.task_type, TENANT1,
image_id, user_id,
request_id,
task_time_to_live=task_ttl,
task_input=task_input)

View File

@ -871,8 +871,12 @@ class TestImmutableTask(utils.BaseTestCase):
task_factory = glance.domain.TaskFactory()
self.context = glance.context.RequestContext(tenant=TENANT2)
task_type = 'import'
image_id = 'fake_image_id'
user_id = 'fake_user'
request_id = 'fake_request_id'
owner = TENANT2
task = task_factory.new_task(task_type, owner)
task = task_factory.new_task(task_type, owner, image_id,
user_id, request_id)
self.task = authorization.ImmutableTaskProxy(task)
def _test_change(self, attr, value):
@ -938,8 +942,12 @@ class TestImmutableTaskStub(utils.BaseTestCase):
task_factory = glance.domain.TaskFactory()
self.context = glance.context.RequestContext(tenant=TENANT2)
task_type = 'import'
image_id = 'fake_image_id'
user_id = 'fake_user'
request_id = 'fake_request_id'
owner = TENANT2
task = task_factory.new_task(task_type, owner)
task = task_factory.new_task(task_type, owner, image_id,
user_id, request_id)
self.task = authorization.ImmutableTaskStubProxy(task)
def _test_change(self, attr, value):
@ -992,6 +1000,9 @@ class TestTaskFactoryProxy(utils.BaseTestCase):
self.task_type = 'import'
self.task_input = '{"loc": "fake"}'
self.owner = 'foo'
self.image_id = 'fake_image_id'
self.user_id = 'fake_user'
self.request_id = 'fake_request_id'
self.request1 = unittest_utils.get_fake_request(tenant=TENANT1)
self.request2 = unittest_utils.get_fake_request(tenant=TENANT2)
@ -999,7 +1010,9 @@ class TestTaskFactoryProxy(utils.BaseTestCase):
def test_task_create_default_owner(self):
owner = self.request1.context.owner
task = self.task_factory.new_task(task_type=self.task_type,
owner=owner)
owner=owner, image_id=self.image_id,
user_id=self.user_id,
request_id=self.request_id)
self.assertEqual(TENANT1, task.owner)
def test_task_create_wrong_owner(self):
@ -1007,14 +1020,18 @@ class TestTaskFactoryProxy(utils.BaseTestCase):
self.task_factory.new_task,
task_type=self.task_type,
task_input=self.task_input,
owner=self.owner)
owner=self.owner, image_id=self.image_id,
user_id=self.user_id,
request_id=self.request_id)
def test_task_create_owner_as_None(self):
self.assertRaises(exception.Forbidden,
self.task_factory.new_task,
task_type=self.task_type,
task_input=self.task_input,
owner=None)
owner=None, image_id=self.image_id,
user_id=self.user_id,
request_id=self.request_id)
def test_task_create_admin_context_owner_as_None(self):
self.context.is_admin = True
@ -1022,7 +1039,9 @@ class TestTaskFactoryProxy(utils.BaseTestCase):
self.task_factory.new_task,
task_type=self.task_type,
task_input=self.task_input,
owner=None)
owner=None, image_id=self.image_id,
user_id=self.user_id,
request_id=self.request_id)
class TestTaskRepoProxy(utils.BaseTestCase):
@ -1049,11 +1068,17 @@ class TestTaskRepoProxy(utils.BaseTestCase):
super(TestTaskRepoProxy, self).setUp()
task_factory = glance.domain.TaskFactory()
task_type = 'import'
image_id = 'fake_image_id'
user_id = 'fake_user'
request_id = 'fake_request_id'
owner = None
self.fixtures = [
task_factory.new_task(task_type, owner),
task_factory.new_task(task_type, owner),
task_factory.new_task(task_type, owner),
task_factory.new_task(task_type, owner, image_id,
user_id, request_id),
task_factory.new_task(task_type, owner, image_id,
user_id, request_id),
task_factory.new_task(task_type, owner, image_id,
user_id, request_id),
]
self.context = glance.context.RequestContext(tenant=TENANT1)
task_repo = self.TaskRepoStub(self.fixtures)

View File

@ -800,13 +800,20 @@ class TestTaskRepo(test_utils.BaseTestCase):
def test_add_task(self):
task_type = 'import'
task = self.task_factory.new_task(task_type, None,
image_id = 'fake_image_id'
user_id = 'fake_user'
request_id = 'fake_request_id'
task = self.task_factory.new_task(task_type, None, image_id,
user_id, request_id,
task_input=self.fake_task_input)
self.assertEqual(task.updated_at, task.created_at)
self.task_repo.add(task)
retrieved_task = self.task_repo.get(task.task_id)
self.assertEqual(task.updated_at, retrieved_task.updated_at)
self.assertEqual(self.fake_task_input, retrieved_task.task_input)
self.assertEqual(image_id, task.image_id)
self.assertEqual(user_id, task.user_id)
self.assertEqual(request_id, task.request_id)
def test_save_task(self):
task = self.task_repo.get(UUID1)

View File

@ -325,7 +325,11 @@ class TestTaskFactory(test_utils.BaseTestCase):
task_type = 'import'
owner = TENANT1
task_input = 'input'
image_id = 'fake_image_id'
user_id = 'fake_user'
request_id = 'fake_request_id'
task = self.task_factory.new_task(task_type, owner,
image_id, user_id, request_id,
task_input=task_input,
result='test_result',
message='test_message')
@ -339,15 +343,21 @@ class TestTaskFactory(test_utils.BaseTestCase):
self.assertEqual(task_input, task.task_input)
self.assertEqual('test_message', task.message)
self.assertEqual('test_result', task.result)
self.assertEqual(image_id, task.image_id)
self.assertEqual(user_id, task.user_id)
self.assertEqual(request_id, task.request_id)
def test_new_task_invalid_type(self):
task_type = 'blah'
image_id = 'fake_image_id'
user_id = 'fake_user'
request_id = 'fake_request_id'
owner = TENANT1
self.assertRaises(
exception.InvalidTaskType,
self.task_factory.new_task,
task_type,
owner,
owner, image_id, user_id, request_id
)
@ -357,10 +367,14 @@ class TestTask(test_utils.BaseTestCase):
super(TestTask, self).setUp()
self.task_factory = domain.TaskFactory()
task_type = 'import'
image_id = 'fake_image_id'
user_id = 'fake_user'
request_id = 'fake_request_id'
owner = TENANT1
task_ttl = CONF.task.task_time_to_live
self.task = self.task_factory.new_task(task_type,
owner,
owner, image_id, user_id,
request_id,
task_time_to_live=task_ttl)
def test_task_invalid_status(self):
@ -373,6 +387,9 @@ class TestTask(test_utils.BaseTestCase):
task_type='import',
status=status,
owner=None,
image_id='fake_image_id',
user_id='fake_user',
request_id='fake_request_id',
expires_at=None,
created_at=timeutils.utcnow(),
updated_at=timeutils.utcnow(),
@ -485,6 +502,9 @@ class TestTaskStub(test_utils.BaseTestCase):
self.task_type = 'import'
self.owner = TENANT1
self.task_ttl = CONF.task.task_time_to_live
self.image_id = 'fake_image_id'
self.user_id = 'fake_user'
self.request_id = 'fake_request_id'
def test_task_stub_init(self):
self.task_factory = domain.TaskFactory()
@ -495,7 +515,10 @@ class TestTaskStub(test_utils.BaseTestCase):
self.owner,
'expires_at',
'created_at',
'updated_at'
'updated_at',
self.image_id,
self.user_id,
self.request_id,
)
self.assertEqual(self.task_id, task.task_id)
self.assertEqual(self.task_type, task.type)
@ -504,6 +527,9 @@ class TestTaskStub(test_utils.BaseTestCase):
self.assertEqual('expires_at', task.expires_at)
self.assertEqual('created_at', task.created_at)
self.assertEqual('updated_at', task.updated_at)
self.assertEqual(self.image_id, task.image_id)
self.assertEqual(self.user_id, task.user_id)
self.assertEqual(self.request_id, task.request_id)
def test_task_stub_get_status(self):
status = 'pending'
@ -514,7 +540,10 @@ class TestTaskStub(test_utils.BaseTestCase):
self.owner,
'expires_at',
'created_at',
'updated_at'
'updated_at',
self.image_id,
self.user_id,
self.request_id,
)
self.assertEqual(status, task.status)

View File

@ -633,6 +633,9 @@ class TestTaskNotifications(utils.BaseTestCase):
expires_at=None,
created_at=DATETIME,
updated_at=DATETIME,
image_id='fake_image_id',
user_id='fake_user',
request_id='fake_request_id',
)
self.task = Task(
@ -645,7 +648,10 @@ class TestTaskNotifications(utils.BaseTestCase):
updated_at=DATETIME,
task_input=task_input,
result='res',
message='blah'
message='blah',
image_id='fake_image_id',
user_id='fake_user',
request_id='fake_request_id',
)
self.context = glance.context.RequestContext(
tenant=TENANT2,
@ -694,6 +700,11 @@ class TestTaskNotifications(utils.BaseTestCase):
)
if 'location' in output_log['payload']:
self.fail('Notification contained location field.')
# Verify newly added fields 'image_id', 'user_id' and
# 'request_id' are not part of notification yet
self.assertTrue('image_id' not in output_log['payload'])
self.assertTrue('user_id' not in output_log['payload'])
self.assertTrue('request_id' not in output_log['payload'])
def test_task_create_notification_disabled(self):
self.config(disabled_notifications=['task.create'])
@ -724,6 +735,11 @@ class TestTaskNotifications(utils.BaseTestCase):
)
if 'location' in output_log['payload']:
self.fail('Notification contained location field.')
# Verify newly added fields 'image_id', 'user_id' and
# 'request_id' are not part of notification yet
self.assertTrue('image_id' not in output_log['payload'])
self.assertTrue('user_id' not in output_log['payload'])
self.assertTrue('request_id' not in output_log['payload'])
def test_task_delete_notification_disabled(self):
self.config(disabled_notifications=['task.delete'])
@ -742,6 +758,15 @@ class TestTaskNotifications(utils.BaseTestCase):
self.assertEqual('INFO', output_log['notification_type'])
self.assertEqual('task.run', output_log['event_type'])
self.assertEqual(self.task.task_id, output_log['payload']['id'])
self.assertFalse(
self.task.image_id in output_log['payload']
)
self.assertFalse(
self.task.user_id in output_log['payload']
)
self.assertFalse(
self.task.request_id in output_log['payload']
)
def test_task_run_notification_disabled(self):
self.config(disabled_notifications=['task.run'])
@ -760,6 +785,11 @@ class TestTaskNotifications(utils.BaseTestCase):
self.assertEqual('INFO', output_log['notification_type'])
self.assertEqual('task.processing', output_log['event_type'])
self.assertEqual(self.task.task_id, output_log['payload']['id'])
# Verify newly added fields 'image_id', 'user_id' and
# 'request_id' are not part of notification yet
self.assertTrue('image_id' not in output_log['payload'])
self.assertTrue('user_id' not in output_log['payload'])
self.assertTrue('request_id' not in output_log['payload'])
def test_task_processing_notification_disabled(self):
self.config(disabled_notifications=['task.processing'])
@ -776,6 +806,11 @@ class TestTaskNotifications(utils.BaseTestCase):
self.assertEqual('INFO', output_log['notification_type'])
self.assertEqual('task.success', output_log['event_type'])
self.assertEqual(self.task.task_id, output_log['payload']['id'])
# Verify newly added fields 'image_id', 'user_id' and
# 'request_id' are not part of notification yet
self.assertTrue('image_id' not in output_log['payload'])
self.assertTrue('user_id' not in output_log['payload'])
self.assertTrue('request_id' not in output_log['payload'])
def test_task_success_notification_disabled(self):
self.config(disabled_notifications=['task.processing', 'task.success'])
@ -792,6 +827,11 @@ class TestTaskNotifications(utils.BaseTestCase):
self.assertEqual('INFO', output_log['notification_type'])
self.assertEqual('task.failure', output_log['event_type'])
self.assertEqual(self.task.task_id, output_log['payload']['id'])
# Verify newly added fields 'image_id', 'user_id' and
# 'request_id' are not part of notification yet
self.assertTrue('image_id' not in output_log['payload'])
self.assertTrue('user_id' not in output_log['payload'])
self.assertTrue('request_id' not in output_log['payload'])
def test_task_failure_notification_disabled(self):
self.config(disabled_notifications=['task.failure'])

View File

@ -3053,7 +3053,10 @@ class TestImagesController(base.IsolatedUnitTest):
'backend': mock.ANY}
mock_new_task.assert_called_with(task_type='api_image_import',
owner=TENANT2,
task_input=expected_input)
task_input=expected_input,
image_id=UUID4,
user_id=request.context.user_id,
request_id=request.context.request_id)
def test_image_import_copy_not_allowed_by_policy(self):
# Make sure that if the policy check fails, we fail a copy-image with

View File

@ -56,6 +56,9 @@ def _db_fixture(task_id, **kwargs):
'input': {},
'result': None,
'owner': None,
'image_id': 'fake_image_id',
'user_id': 'fake_user',
'request_id': 'fake_request_id',
'message': None,
'expires_at': default_datetime + datetime.timedelta(days=365),
'created_at': default_datetime,
@ -79,7 +82,10 @@ def _domain_fixture(task_id, **kwargs):
'updated_at': kwargs.get('updated_at', default_datetime),
'task_input': kwargs.get('task_input', {}),
'message': kwargs.get('message'),
'result': kwargs.get('result')
'result': kwargs.get('result'),
'image_id': kwargs.get('image_id'),
'user_id': kwargs.get('user_id'),
'request_id': kwargs.get('request_id'),
}
task = glance.domain.Task(**task_properties)
return task
@ -726,19 +732,31 @@ class TestTasksSerializer(test_utils.BaseTestCase):
self.fixtures = [
_domain_fixture(UUID1, type='import', status='pending',
task_input={'loc': 'fake'}, result={},
owner=TENANT1, message='', created_at=DATETIME,
owner=TENANT1, image_id='fake_image_id',
user_id='fake_user',
request_id='fake_request_id',
message='', created_at=DATETIME,
updated_at=DATETIME),
_domain_fixture(UUID2, type='import', status='processing',
task_input={'loc': 'bake'}, owner=TENANT2,
image_id='fake_image_id',
user_id='fake_user',
request_id='fake_request_id',
message='', created_at=DATETIME,
updated_at=DATETIME, result={}),
_domain_fixture(UUID3, type='import', status='success',
task_input={'loc': 'foo'}, owner=TENANT3,
image_id='fake_image_id',
user_id='fake_user',
request_id='fake_request_id',
message='', created_at=DATETIME,
updated_at=DATETIME, result={},
expires_at=DATETIME),
_domain_fixture(UUID4, type='import', status='failure',
task_input={'loc': 'boo'}, owner=TENANT4,
image_id='fake_image_id',
user_id='fake_user',
request_id='fake_request_id',
message='', created_at=DATETIME,
updated_at=DATETIME, result={},
expires_at=DATETIME),
@ -843,6 +861,9 @@ class TestTasksSerializer(test_utils.BaseTestCase):
'expires_at': ISOTIME,
'self': '/v2/tasks/%s' % UUID4,
'schema': '/v2/schemas/task',
'image_id': 'fake_image_id',
'user_id': 'fake_user',
'request_id': 'fake_request_id',
}
response = webob.Response()
self.serializer.get(response, self.fixtures[3])
@ -863,6 +884,9 @@ class TestTasksSerializer(test_utils.BaseTestCase):
'updated_at': ISOTIME,
'self': '/v2/tasks/%s' % UUID1,
'schema': '/v2/schemas/task',
'image_id': 'fake_image_id',
'user_id': 'fake_user',
'request_id': 'fake_request_id',
}
response = webob.Response()
self.serializer.get(response, self.fixtures[0])
@ -882,6 +906,9 @@ class TestTasksSerializer(test_utils.BaseTestCase):
'updated_at': ISOTIME,
'self': '/v2/tasks/%s' % UUID2,
'schema': '/v2/schemas/task',
'image_id': 'fake_image_id',
'user_id': 'fake_user',
'request_id': 'fake_request_id',
}
response = webob.Response()