Ok, this looks good, applied to next, thanks Julius! On Thu, Feb 7, 2013 at 2:48 PM, Julius Gawlas <[email protected]> wrote: > Added --hostless option to job create + few checks for parameters > incosistency (hostless implies no hosts, synch count labels etc) > and some unit tests. > --- > cli/job.py | 29 ++++++++++++++++++++++------- > cli/job_unittest.py | 28 ++++++++++++++++++++++++++++ > 2 files changed, 50 insertions(+), 7 deletions(-) > > diff --git a/cli/job.py b/cli/job.py > index 1702805..ad18525 100644 > --- a/cli/job.py > +++ b/cli/job.py > @@ -445,6 +445,9 @@ class job_create(job_create_or_clone): > metavar='TIMEOUT') > self.parser.add_option('--max_runtime', > help='Job maximum runtime in hours') > + self.parser.add_option('--hostless', > + help='Specify a hostless job', > + action='store_true', default=False) > > > def _get_kernel_data(self, kernel_list, cmdline, config_list=None): > @@ -498,11 +501,20 @@ class job_create(job_create_or_clone): > options, leftover = super(job_create, self).parse( > parse_info=[deps_info]) > > - if (len(self.hosts) == 0 and not self.one_time_hosts > - and not options.labels and not options.atomic_group): > - self.invalid_syntax('Must specify at least one machine ' > - 'or an atomic group ' > - '(-m, -M, -b, -G or --one-time-hosts).') > + if options.hostless: > + if (self.hosts or self.one_time_hosts > + or options.labels or options.atomic_group > + or options.synch_count): > + self.invalid_syntax('If hostless is specified cannot specify' > + ' machine, atomic group or synch count' > + ' (-m, -M, -b, -G, --synch_count') > + else: > + if (len(self.hosts) == 0 and not self.one_time_hosts > + and not options.labels and not options.atomic_group): > + self.invalid_syntax('Must specify at least one machine, ' > + 'atomic group or hostless' > + '(-m, -M, -b, -G, --one-time-hosts ' > + 'or hostless).') > if not options.control_file and not options.test: > self.invalid_syntax('Must specify either --test or > --control-file' > ' to create a job.') > @@ -565,6 +577,9 @@ class job_create(job_create_or_clone): > else: > self.data['control_type'] = 'Client' > > + if options.hostless: > + self.data['hostless'] = True > + > return options, leftover > > > @@ -599,9 +614,9 @@ class job_create(job_create_or_clone): > deps = sorted(deps.union(cf_info['dependencies'])) > self.data['dependencies'] = list(deps) > > - if 'synch_count' not in self.data: > + if 'synch_count' not in self.data and 'hostless' not in self.data: > self.data['synch_count'] = 1 > - > + > return self.create_job() > > > diff --git a/cli/job_unittest.py b/cli/job_unittest.py > index 5981c6f..982effd 100755 > --- a/cli/job_unittest.py > +++ b/cli/job_unittest.py > @@ -1370,6 +1370,34 @@ class job_create_unittest(cli_mock.cli_unittest): > self.assertEqual(testjob.failed['Failed to find labels'], > {'No labels matching <XYZ>': set(['label*'])}) > > + def test_execute_create_job_hostless(self): > + data = self.data.copy() > + data['hostless'] = True > + data['hosts'] = [] > + data['control_type'] = 'Server' > + del data['synch_count'] > + file_temp = cli_mock.create_file(self.ctrl_file) > + self.run_cmd(argv=['atest', 'job', 'create', '-s', '-f', > file_temp.name, > + '--hostless', 'test_job0'], > + rpcs=[('create_job', data, True, 42)], > + out_words_ok=['test_job0', 'Created'],) > + file_temp.clean() > + > + def test_execute_create_job_hostless_bad_args_hosts(self): > + testjob = job.job_create() > + file_temp = cli_mock.create_file(self.ctrl_file) > + sys.argv = ['atest', 'job', 'create', '--hostless', > + '-s', '-f', file_temp.name, > + '-m', 'myhost', > + 'test_hosteless_job0'] > + self.god.mock_io() > + (sys.exit.expect_call(mock.anything_comparator()) > + .and_raises(cli_mock.ExitException)) > + self.assertRaises(cli_mock.ExitException, testjob.parse) > + self.god.unmock_io() > + self.god.check_playback() > + file_temp.clean() > + > > class job_clone_unittest(cli_mock.cli_unittest): > job_data = {'control_file': u'NAME = \'Server Sleeptest\'\nAUTHOR = > \'[email protected] (Martin Bligh)\'\nTIME = \'SHORT\'\nTEST_CLASS = > \'Software\'\nTEST_CATEGORY = \'Functional\'\nTEST_TYPE = > \'server\'\nEXPERIMENTAL = \'False\'\n\nDOC = """\nruns sleep for one second > on the list of machines.\n"""\n\ndef run(machine):\n host = > hosts.create_host(machine)\n > job.run_test(\'sleeptest\')\n\njob.parallel_simple(run, machines)\n', > -- > 1.7.7.6 > > _______________________________________________ > Autotest-kernel mailing list > [email protected] > https://www.redhat.com/mailman/listinfo/autotest-kernel
-- Lucas _______________________________________________ Autotest-kernel mailing list [email protected] https://www.redhat.com/mailman/listinfo/autotest-kernel
