diff options
author | Richard Maw <richard.maw@gmail.com> | 2014-10-11 23:53:28 +0100 |
---|---|---|
committer | Richard Maw <richard.maw@gmail.com> | 2014-10-15 14:10:05 +0000 |
commit | 69dcbb0a55db2422759819e46d8d5ce0121a1a82 (patch) | |
tree | 72f752202d4a8d39b85c397be088b46dc7fab5e8 | |
parent | 16c307a779b929eb4c0010fc20e12df4f28b3247 (diff) | |
download | cmdtest-69dcbb0a55db2422759819e46d8d5ce0121a1a82.tar.gz |
yarn: Move scenario setup into ScenarioRunner
Now you should call .run_scenarios instead of .run_scenario, and pass
testdir to the ScenarioRunner class.
You can still call .run_scenario directly instead. The testdir argument
isn't required when used that way.
-rwxr-xr-x | yarn | 52 | ||||
-rw-r--r-- | yarnlib/scenario_runner.py | 49 |
2 files changed, 55 insertions, 46 deletions
@@ -162,13 +162,12 @@ class YarnRunner(cliapp.Application): pre_step_cb=self.pre_step, post_step_cb=self.post_step, pre_scenario_cb=self.pre_scenario, - post_scenario_cb=self.post_scenario) + post_scenario_cb=self.post_scenario, + testdir=self.tempdir) start_time = time.time() - failed_scenarios = [] - for scenario in self.select_scenarios(scenarios): - if not self.run_scenario(scenario_runner, scenario): - failed_scenarios.append(scenario) + failed_scenarios = ( + scenario_runner.run_scenarios(self.select_scenarios(scenarios))) duration = time.time() - start_time if not self.settings['snapshot']: @@ -250,22 +249,6 @@ class YarnRunner(cliapp.Application): return scenarios - def run_scenario(self, scenario_runner, scenario): - os.mkdir(self.scenario_dir(self.tempdir, scenario)) - datadir = self.datadir(self.tempdir, scenario) - os.mkdir(datadir) - homedir = self.homedir(datadir) - os.mkdir(homedir) - - ud = self.pre_scenario(scenario, datadir, homedir) - ok = scenario_runner.run_scenario(scenario, datadir, homedir) - self.post_scenario(scenario, datadir, homedir, ud) - - return ok - - def homedir(self, datadir): - return os.path.join(datadir, 'HOME') - def parse_env(self): for option_arg in self.settings['env']: if '=' not in option_arg: @@ -339,16 +322,10 @@ class YarnRunner(cliapp.Application): self.snapshot_datadir(self.tempdir, step_env['DATADIR'], scenario, step_number, step) - def scenario_dir(self, tempdir, scenario): - return os.path.join(tempdir, self.nice(scenario.name)) - - def datadir(self, tempdir, scenario): - sd = self.scenario_dir(tempdir, scenario) - return os.path.join(sd, 'datadir') - def snapshot_dir(self, tempdir, scenario, step, step_number): - sd = self.scenario_dir(tempdir, scenario) - base = '%03d-%s-%s' % (step_number, step.what, self.nice(step.text)) + sd = yarnlib.ScenarioRunner.scenario_dir(tempdir, scenario) + base = '%03d-%s-%s' % (step_number, step.what, + yarnlib.ScenarioRunner.nice(step.text)) return os.path.join(sd, base) def snapshot_datadir(self, tempdir, datadir, scenario, step_number, step): @@ -358,21 +335,6 @@ class YarnRunner(cliapp.Application): if exit != 0: logging.warning('Snapshot copy failed:\n%s\n%s' % (out, err)) - def nice(self, name): - # Quote a scenario or step name so it forms a nice filename. - nice_chars = "abcdefghijklmnopqrstuvwxyz" - nice_chars += nice_chars.upper() - nice_chars += "0123456789-." - - nice = [] - for c in name: - if c in nice_chars: - nice.append(c) - elif not nice or nice[-1] != '_': - nice.append('_') - nice = ''.join(nice) - return nice - def indent(self, s): return ''.join(' %s\n' % line for line in s.splitlines()) diff --git a/yarnlib/scenario_runner.py b/yarnlib/scenario_runner.py index 28172e4..cb74859 100644 --- a/yarnlib/scenario_runner.py +++ b/yarnlib/scenario_runner.py @@ -103,13 +103,32 @@ class ScenarioRunner(object): pre_step_cb=default_pre_step, post_step_cb=default_post_step, pre_scenario_cb=lambda *x: None, post_scenario_cb=lambda *x: None, - cmdrunner=cliapp.runcmd_unchecked): + cmdrunner=cliapp.runcmd_unchecked, testdir=None): self.shell_prelude = shell_prelude self.srcdir = srcdir self.env = self.clean_env(extra_env, SRCDIR=srcdir) self.pre_step_cb = pre_step_cb self.post_step_cb = post_step_cb + self.pre_scenario_cb = pre_scenario_cb + self.post_scenario_cb = post_scenario_cb self.cmdrunner = cmdrunner + self.testdir = testdir + + def run_scenarios(self, scenarios): + failed = [] + for scenario in scenarios: + scenario_dir = self.scenario_dir(self.testdir, scenario) + os.mkdir(scenario_dir) + datadir = self.datadir(scenario_dir) + os.mkdir(datadir) + homedir = self.homedir(datadir) + os.mkdir(homedir) + + ud = self.pre_scenario_cb(scenario, datadir, homedir) + if not self.run_scenario(scenario, datadir, homedir): + failed.append(scenario) + self.post_scenario_cb(scenario, datadir, homedir, ud) + return failed def run_scenario(self, scenario, datadir, homedir): assuming = [s for s in scenario.steps if s.what == 'ASSUMING'] @@ -202,3 +221,31 @@ class ScenarioRunner(object): env.update(kwarg_env) return env + + @classmethod + def scenario_dir(cls, testdir, scenario): + return os.path.join(testdir, cls.nice(scenario.name)) + + @staticmethod + def datadir(scenario_dir): + return os.path.join(scenario_dir, 'datadir') + + @staticmethod + def homedir(datadir): + return os.path.join(datadir, 'HOME') + + @staticmethod + def nice(name): + # Quote a scenario or step name so it forms a nice filename. + nice_chars = "abcdefghijklmnopqrstuvwxyz" + nice_chars += nice_chars.upper() + nice_chars += "0123456789-." + + nice = [] + for c in name: + if c in nice_chars: + nice.append(c) + elif not nice or nice[-1] != '_': + nice.append('_') + nice = ''.join(nice) + return nice |