Python's Popen class requires a list of command arguments to be passed to it. The way it handles spaces is to escape them as literals. thus ['grep foo', 'f'] != ['grep', 'foo', 'f'] (the later will work as expected, the later will have an error, since it's very unlikely that you have a command 'grep foo' on your system).
This adds a check to the Test.command.setter function to error out if a command is set with a space in an element. This has been tested against all.py, cl.py, igt.py, xts.py, and deqp_gles3.py, and all of them work correctly. Signed-off-by: Dylan Baker <[email protected]> --- framework/test/base.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/framework/test/base.py b/framework/test/base.py index 8a4bf99..4981d3d 100644 --- a/framework/test/base.py +++ b/framework/test/base.py @@ -42,10 +42,16 @@ from framework.results import TestResult __all__ = [ 'Test', + 'CommandSpaceException', 'WindowResizeMixin', ] +class CommandSpaceException(Exception): + """Exception raised if there is a space in a test command element.""" + pass + + class ProcessTimeout(threading.Thread): """ Timeout class for test processes @@ -123,9 +129,9 @@ class Test(object): def __init__(self, command, run_concurrent=False): assert isinstance(command, list), command - + self._command = None self.run_concurrent = run_concurrent - self._command = copy.copy(command) + self.command = command self.env = {} self.result = TestResult({'result': 'fail'}) self.cwd = None @@ -178,6 +184,16 @@ class Test(object): '--tool=memcheck'] + self._command return self._command + @command.setter + def command(self, commandlist): + """If there is a space in the command list raise an exception.""" + for each in commandlist: + if ' ' in each: + raise CommandSpaceException( + 'In command {}, a space was found in element {}'.format( + commandlist, each)) + self._command = copy.copy(commandlist) + @abc.abstractmethod def interpret_result(self): """ Convert the raw output of the test into a form piglit understands -- 2.3.5 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
