Fuel-cli task deletion incorrect url

* Fixed task-id argument parser
 * Added and fixed tests

 Closes-bug: #1313759

Change-Id: I107764821ad503c9f46d54a8d51002e981232c66
This commit is contained in:
Alexandr Notchenko
2014-04-29 17:18:38 +04:00
parent eee0ff4aed
commit 7ef9bce9d1
3 changed files with 53 additions and 38 deletions

View File

@@ -44,6 +44,15 @@ def group(*args, **kwargs):
return (required, ) + args
class TaskAction(argparse.Action):
"""Custom argparse.Action subclass to store task ids
:returns: list of ids
"""
def __call__(self, parser, namespace, values, option_string=None):
setattr(namespace, self.dest, map(int, chain(*values)))
class NodeAction(argparse.Action):
"""Custom argparse.Action subclass to store node identity
@@ -102,20 +111,6 @@ class SetAction(argparse.Action):
setattr(namespace, self.dest, set(values))
def parse_ids(x):
"""Parse arguments with commas and spaces
:returns: list of lists with numbers
"""
filtered = [y for y in x.split(",") if y.strip() != '']
if len(filtered) > 1:
return map(int, filtered)
elif len(filtered) == 1:
return [int(filtered[0])]
else:
return None
def get_serializer_arg(serialization_method):
return {
"args": ["--{0}".format(serialization_method)],
@@ -218,17 +213,6 @@ def get_int_arg(name, **kwargs):
return get_arg(name, **default_kwargs)
def get_multinum_arg(name, **kwargs):
default_kwargs = {
"action": "store",
"type": parse_ids,
"nargs": '+',
"default": None
}
default_kwargs.update(kwargs)
return get_arg(name, **default_kwargs)
def get_set_type_arg(name, **kwargs):
default_kwargs = {
"type": lambda v: v.split(','),
@@ -362,10 +346,15 @@ def get_node_arg(help_msg):
def get_task_arg(help_msg):
return get_multinum_arg(
"task",
flags=("--tid", "--task-id"),
help=help_msg)
default_kwargs = {
"action": TaskAction,
"flags": ("--tid", "--task-id"),
"nargs": '+',
"type": lambda v: v.split(","),
"default": None,
"help": help_msg
}
return get_arg("task", **default_kwargs)
def get_config_arg(help_msg):

View File

@@ -84,7 +84,7 @@ class BaseTestCase(TestCase):
print("Running " + " ".join(args))
handle.wait()
def run_cli_command(self, command_line, with_erros=False):
def run_cli_command(self, command_line, check_errors=False):
modified_env = os.environ.copy()
modified_env["LISTEN_PORT"] = "8003"
command_args = [" ".join((self.fuel_path, command_line))]
@@ -100,17 +100,17 @@ class BaseTestCase(TestCase):
result = CliExectutionResult(process_handle)
log.debug("command_args: '%s',stdout: '%s', stderr: '%s'",
command_args[0], result.stdout, result.stderr)
if not with_erros:
if not check_errors:
if not result.is_return_code_zero or result.has_errors:
self.fail()
return result
def run_cli_commands(self, command_lines, with_erros=False):
def run_cli_commands(self, command_lines, **kwargs):
for command in command_lines:
self.run_cli_command(command, with_erros=with_erros)
self.run_cli_command(command, **kwargs)
def check_if_required(self, command):
call = self.run_cli_command(command, with_erros=True)
call = self.run_cli_command(command, check_errors=True)
#should not work without env id
self.assertIn("required", call.stderr)
@@ -118,10 +118,10 @@ class BaseTestCase(TestCase):
call = self.run_cli_command(command)
self.assertEqual(call.stdout, msg)
def check_all_in_msg(self, command, substrs):
output = self.run_cli_command(command)
for substr in substrs:
self.assertIn(substr, output.stdout)
def check_all_in_msg(self, command, substrings, **kwargs):
output = self.run_cli_command(command, **kwargs)
for substring in substrings:
self.assertIn(substring, output.stdout)
def check_for_rows_in_table(self, command):
output = self.run_cli_command(command)

View File

@@ -100,6 +100,32 @@ class TestHandlers(BaseTestCase):
for action in actions:
self.check_all_in_msg("{0} -h".format(action), ("Examples",))
def test_task_action_urls(self):
self.check_all_in_msg(
"task --task-id 1 --debug",
[
"GET http://127.0.0.1",
"/api/v1/tasks/1/"
],
check_errors=True
)
self.check_all_in_msg(
"task --task-id 1 --delete --debug",
[
"DELETE http://127.0.0.1",
"/api/v1/tasks/1/?force=0"
],
check_errors=True
)
self.check_all_in_msg(
"task --task-id 1 --delete --force --debug",
[
"DELETE http://127.0.0.1",
"/api/v1/tasks/1/?force=1"
],
check_errors=True
)
class TestFiles(BaseTestCase):