summaryrefslogtreecommitdiffstats
path: root/moonclient/moonclient/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'moonclient/moonclient/tests.py')
-rw-r--r--moonclient/moonclient/tests.py71
1 files changed, 53 insertions, 18 deletions
diff --git a/moonclient/moonclient/tests.py b/moonclient/moonclient/tests.py
index 5badf4bc..dd0dd7de 100644
--- a/moonclient/moonclient/tests.py
+++ b/moonclient/moonclient/tests.py
@@ -12,6 +12,7 @@ from cliff.command import Command
from uuid import uuid4
import os
import time
+import subprocess
class TestsLaunch(Lister):
@@ -19,7 +20,8 @@ class TestsLaunch(Lister):
log = logging.getLogger(__name__)
result_vars = dict()
- logfile = open("/tmp/moonclient_test_{}.log".format(time.strftime("%Y%m%d-%H%M%S")), "w")
+ logfile_name = "/tmp/moonclient_test_{}.log".format(time.strftime("%Y%m%d-%H%M%S"))
+ logfile = open(logfile_name, "w")
def get_parser(self, prog_name):
parser = super(TestsLaunch, self).get_parser(prog_name)
@@ -31,9 +33,12 @@ class TestsLaunch(Lister):
return parser
def __replace_var_in_str(self, data_str):
+ self.log.debug("__replace_var_in_str " + data_str)
for exp in re.findall("\$\w+", data_str):
+ self.log.debug("--->" + exp + str(self.result_vars))
if exp.replace("$", "") in self.result_vars:
data_str = re.sub(exp.replace("$", "\$") + "(?!\w)", self.result_vars[exp.replace("$", "")], data_str)
+ self.log.debug("__replace_var_in_str " + data_str)
return data_str
def __compare_results(self, expected, observed):
@@ -44,7 +49,7 @@ class TestsLaunch(Lister):
return False
def take_action(self, parsed_args):
- self.log.info("Write tests output to {}".format(self.logfile))
+ self.log.info("Write tests output to {}".format(self.logfile_name))
stdout_back = self.app.stdout
if not parsed_args.testfile:
self.log.error("You don't give a test filename.")
@@ -56,37 +61,67 @@ class TestsLaunch(Lister):
global_command_options = tests_dict["command_options"]
data = list()
for group_name, tests_list in tests_dict["tests_group"].iteritems():
+ overall_result = True
self.log.info("\n\033[1mgroup {}\033[0m".format(group_name))
self.logfile.write("{}:\n\n".format(group_name))
+ test_count = len(tests_list)
for test in tests_list:
+ result_str = ""
+ error_str = ""
data_tmp = list()
tmp_filename = os.path.join("/tmp", uuid4().hex)
tmp_filename_fd = open(tmp_filename, "w")
self.log.debug("test={}".format(test))
- if "command_options" in test:
- command = test["command"] + " " + test["command_options"]
- else:
- command = test["command"] + " " + global_command_options
- command = self.__replace_var_in_str(command)
- self.logfile.write("-----> {}\n".format(command))
- self.log.info(" \\-executing {}".format(command))
- self.app.stdout = tmp_filename_fd
- result_id = self.app.run_subcommand(shlex.split(command))
- tmp_filename_fd.close()
- self.app.stdout = stdout_back
- result_str = open(tmp_filename, "r").read()
- self.logfile.write("{}".format(result_str))
+ if "command" not in test:
+ ext_command = test["external_command"]
+ ext_command = self.__replace_var_in_str(ext_command)
+ self.logfile.write("-----> {}\n".format(ext_command))
+ self.log.info(" \\-executing external \"{}\"".format(ext_command))
+ pipe = subprocess.Popen(shlex.split(ext_command), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ com = pipe.communicate()
+ result_str = com[0]
+ error_str = com[1]
+ self.logfile.write("stdout: {}\n".format(result_str))
+ self.logfile.write("stderr: {}\n".format(error_str))
+ if "command" in test:
+ if "command_options" in test:
+ command = test["command"] + " " + test["command_options"]
+ else:
+ command = test["command"] + " " + global_command_options
+ command = self.__replace_var_in_str(command)
+ self.logfile.write("-----> {}\n".format(command))
+ self.log.info(" \\-executing {}".format(command))
+ self.app.stdout = tmp_filename_fd
+ result_id = self.app.run_subcommand(shlex.split(command))
+ tmp_filename_fd.close()
+ self.app.stdout = stdout_back
+ result_str = open(tmp_filename, "r").read()
+ self.logfile.write("{}".format(result_str))
data_tmp.append(group_name)
data_tmp.append(test["name"])
compare = self.__compare_results(self.__replace_var_in_str(test["result"]), result_str)
self.logfile.write("----->{} ({})\n\n".format(compare, self.__replace_var_in_str(test["result"])))
- if compare:
- compare = "\033[32mTrue\033[m"
- else:
+ if error_str:
compare = "\033[1m\033[31mFalse\033[m"
+ overall_result = False
+ else:
+ overall_result = overall_result and compare
+ if compare:
+ compare = "\033[32mTrue\033[m"
+ else:
+ compare = "\033[1m\033[31mFalse\033[m"
data_tmp.append(compare)
data_tmp.append(test["description"])
data.append(data_tmp)
+ data_tmp = list()
+ data_tmp.append("\033[1m" + group_name + "\033[m")
+ data_tmp.append("\033[1mOverall results ({})\033[m".format(test_count))
+ if overall_result:
+ data_tmp.append("\033[1m\033[32mTrue\033[m")
+ else:
+ data_tmp.append("\033[1m\033[31mFalse\033[m")
+ data_tmp.append(self.logfile_name)
+ data.append(data_tmp)
return (
("group_name", "test_name", "result", "description"),