Merge "Add filters to 'fuel2 task list' command"

This commit is contained in:
Jenkins 2016-09-14 08:50:23 +00:00 committed by Gerrit Code Review
commit fe7d9a93ed
5 changed files with 98 additions and 9 deletions

View File

@ -131,6 +131,35 @@ class TaskList(TaskMixIn, base.BaseListCommand):
'result',
'dry_run',
'progress')
filters = {'cluster_id': 'env',
'statuses': 'statuses',
'transaction_types': 'names'}
def get_parser(self, prog_name):
parser = super(TaskList, self).get_parser(prog_name)
parser.add_argument(
'-e',
'--env',
type=int,
help='Show list of tasks that belong to specified environment')
parser.add_argument(
'-t',
'--statuses',
type=str,
choices=['pending', 'error', 'ready', 'running'],
nargs='+',
help='Show list of tasks with specified statuses')
parser.add_argument(
'-n',
'--names',
type=str,
nargs='+',
help='Show list of tasks with specified names')
return parser
class TaskShow(TaskMixIn, base.BaseShowCommand):

View File

@ -29,7 +29,7 @@ class TestTaskCommand(test_engine.BaseCLITest):
super(TestTaskCommand, self).setUp()
self.m_client.get_all.return_value = [utils.get_fake_task()
for i in range(10)]
for _ in range(10)]
self.m_client.get_by_id.return_value = utils.get_fake_task()
self.current_path = os.path.join(os.path.abspath(os.curdir))
@ -40,6 +40,30 @@ class TestTaskCommand(test_engine.BaseCLITest):
self.m_get_client.assert_called_once_with('task', mock.ANY)
self.m_client.get_all.assert_called_once_with()
def test_task_list_w_parameters(self):
env_id = 45
statuses = ['ready', 'error']
names = ['provision', 'dump']
args = 'task list -e {env_id} -t {statuses} -n {names}'.format(
env_id=env_id,
statuses=' '.join(statuses),
names=' '.join(names))
self.exec_command(args)
self.m_get_client.assert_called_once_with('task', mock.ANY)
self.m_client.get_all.assert_called_once_with(cluster_id=env_id,
statuses=statuses,
transaction_types=names)
@mock.patch('sys.stderr')
def test_task_list_w_wrong_parameters(self, mocked_stderr):
statuses = ['ready', 'wrong_status']
args = 'task list -t {statuses}'.format(statuses=' '.join(statuses))
self.assertRaises(SystemExit, self.exec_command, args)
self.assertIn('-t/--statuses: invalid choice',
mocked_stderr.write.call_args_list[-1][0][0])
def test_task_show(self):
task_id = 42
args = 'task show {task_id}'.format(task_id=task_id)

View File

@ -35,17 +35,46 @@ class TestTaskFacade(test_api.BaseLibTest):
def test_task_list(self):
matcher = self.m_request.get(self.res_uri, json=self.fake_task)
matcher = self.m_request.get(self.res_uri, json=self.fake_tasks)
self.client.get_all()
self.assertTrue(self.res_uri, matcher.called)
def test_task_list_w_parameters(self):
env_id = 36
statuses = ['ready', 'error']
names = ['dump', 'provision']
fake_tasks = [
utils.get_fake_task(task_id=45, cluster=env_id,
status=statuses[0], name=names[0]),
utils.get_fake_task(task_id=46, cluster=env_id,
status=statuses[0], name=names[1]),
utils.get_fake_task(task_id=49, cluster=env_id,
status=[1], name=names[1]),
]
params = ('?cluster_id={env_id}'
'&statuses={statuses}'
'&transaction_types={names}')
expected_url = self.res_uri + params.format(
env_id=env_id,
statuses=','.join(statuses),
names=','.join(names))
matcher = self.m_request.get(expected_url, json=fake_tasks)
tasks = self.client.get_all(cluster_id=env_id,
statuses=statuses,
transaction_types=names)
self.assertTrue(matcher.called)
self.assertEqual(3, len(tasks))
def test_task_show(self):
task_id = 42
expected_uri = self.get_object_uri(self.res_uri, task_id)
matcher = self.m_request.get(expected_uri, json=self.fake_tasks)
matcher = self.m_request.get(expected_uri, json=self.fake_task)
self.client.get_by_id(task_id)
@ -54,7 +83,7 @@ class TestTaskFacade(test_api.BaseLibTest):
def test_task_delete(self):
task_id = 42
expected_uri = self.get_object_uri(self.res_uri, task_id)
matcher = self.m_request.delete(expected_uri, json=self.fake_tasks)
matcher = self.m_request.delete(expected_uri, json=self.fake_task)
self.client.delete_by_id(task_id, force=False)
@ -64,7 +93,7 @@ class TestTaskFacade(test_api.BaseLibTest):
def test_task_delete_force(self):
task_id = 42
expected_uri = self.get_object_uri(self.res_uri, task_id)
matcher = self.m_request.delete(expected_uri, json=self.fake_tasks)
matcher = self.m_request.delete(expected_uri, json=self.fake_task)
self.client.delete_by_id(task_id, force=True)

View File

@ -39,7 +39,14 @@ class BaseV1Client(object):
)
def get_all(self, **kwargs):
result = self._entity_wrapper.get_all_data(**kwargs)
filters = {}
for k, v in six.iteritems(kwargs):
if isinstance(v, list):
if v:
filters[k] = ','.join(str(s) for s in v)
elif v is not None:
filters[k] = str(v)
result = self._entity_wrapper.get_all_data(**filters)
return result

View File

@ -26,11 +26,11 @@ class TaskClient(base_v1.BaseV1Client):
:param task_id: Id of a task to delete.
:type task_id: int
:param force: Force deletion of a task without
concidering its state
considering its state
"""
env_obj = self._entity_wrapper(obj_id=task_id)
env_obj.delete(force=force)
task_obj = self._entity_wrapper(obj_id=task_id)
task_obj.delete(force=force)
def get_client(connection):