コード例 #1
0
 def test_submit_priority(self):
     cp, uuids = cli.submit('ls',
                            self.cook_url,
                            submit_flags='--priority 0')
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(0, jobs[0]['priority'])
     cp, uuids = cli.submit('ls',
                            self.cook_url,
                            submit_flags='--priority 100')
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(100, jobs[0]['priority'])
     cp, uuids = cli.submit('ls',
                            self.cook_url,
                            submit_flags='--priority -1')
     self.assertEqual(2, cp.returncode, cp.stderr)
     self.assertIn('--priority/-p: invalid choice', cli.decode(cp.stderr))
     cp, uuids = cli.submit('ls',
                            self.cook_url,
                            submit_flags='--priority 101')
     self.assertEqual(2, cp.returncode, cp.stderr)
     self.assertIn('--priority/-p: invalid choice', cli.decode(cp.stderr))
コード例 #2
0
    def test_entity_ref_support(self):
        # Submit to cluster #1
        cp, uuids = cli.submit('job1', self.cook_url_1)
        self.assertEqual(0, cp.returncode, cp.stderr)
        uuid = uuids[0]

        # Submit to cluster #2 with the same uuid
        cp, uuids = cli.submit('job2',
                               self.cook_url_2,
                               submit_flags=f'--uuid {uuid}')
        self.assertEqual(0, cp.returncode, cp.stderr)

        config = self.__two_cluster_config()
        with cli.temp_config_file(config) as path:
            flags = f'--config {path}'
            # Query for both jobs with uuid
            cp, jobs = cli.show_jobs([uuid], flags=flags)
            self.assertEqual(0, cp.returncode, cp.stderr)
            self.assertEqual(2, len(jobs), jobs)
            self.assertEqual(uuid, jobs[0]['uuid'])
            self.assertEqual(uuid, jobs[1]['uuid'])
            # Query cook1 with entity ref
            cp, jobs = cli.show_jobs([f'{self.cook_url_1}/jobs/{uuid}'],
                                     flags=flags)
            self.assertEqual(0, cp.returncode, cp.stderr)
            self.assertEqual(1, len(jobs), jobs)
            self.assertEqual(uuid, jobs[0]['uuid'])
            self.assertEqual('job1', jobs[0]['command'])
            # Query cook2 with entity ref
            cp, jobs = cli.show_jobs([f'{self.cook_url_2}/jobs/{uuid}'],
                                     flags=flags)
            self.assertEqual(0, cp.returncode, cp.stderr)
            self.assertEqual(1, len(jobs), jobs)
            self.assertEqual(uuid, jobs[0]['uuid'])
            self.assertEqual('job2', jobs[0]['command'])
コード例 #3
0
    def test_complex_commands(self):
        desired_command = '(foo -x \'def bar = "baz"\')'
        # Incorrectly submitted command
        command = '"(foo -x \'def bar = "baz"\')"'
        cp, uuids = cli.submit(command, self.cook_url)
        self.assertEqual(0, cp.returncode, cp.stderr)
        cp, jobs = cli.show_json(uuids, self.cook_url)
        self.assertEqual(0, cp.returncode, cp.stderr)
        self.assertEqual(desired_command.replace('"', ''), jobs[0]['command'])
        # Correctly submitted command
        command = '"(foo -x \'def bar = \\"baz\\"\')"'
        cp, uuids = cli.submit(command, self.cook_url)
        self.assertEqual(0, cp.returncode, cp.stderr)
        cp, jobs = cli.show_json(uuids, self.cook_url)
        self.assertEqual(0, cp.returncode, cp.stderr)
        self.assertEqual(desired_command, jobs[0]['command'])

        desired_command = "export HOME=$MESOS_DIRECTORY; export LOGNAME=$(whoami); JAVA_OPTS='-Xmx15000m' foo"
        # Incorrectly submitted command
        command = "'export HOME=$MESOS_DIRECTORY; export LOGNAME=$(whoami); JAVA_OPTS='-Xmx15000m' foo'"
        cp, uuids = cli.submit(command, self.cook_url)
        self.assertEqual(0, cp.returncode, cp.stderr)
        cp, jobs = cli.show_json(uuids, self.cook_url)
        self.assertEqual(0, cp.returncode, cp.stderr)
        self.assertEqual(desired_command.replace("'", ''), jobs[0]['command'])
        # Correctly submitted command
        command = "'export HOME=$MESOS_DIRECTORY; export LOGNAME=$(whoami); JAVA_OPTS='\"'\"'-Xmx15000m'\"'\"' foo'"
        cp, uuids = cli.submit(command, self.cook_url)
        self.assertEqual(0, cp.returncode, cp.stderr)
        cp, jobs = cli.show_json(uuids, self.cook_url)
        self.assertEqual(0, cp.returncode, cp.stderr)
        self.assertEqual(desired_command, jobs[0]['command'])
コード例 #4
0
    def test_federated_query(self):
        # Submit to cluster #1
        cp, uuids = cli.submit('ls', self.cook_url_1)
        self.assertEqual(0, cp.returncode, cp.stderr)
        uuid_1 = uuids[0]

        # Submit to cluster #2
        cp, uuids = cli.submit('ls', self.cook_url_2)
        self.assertEqual(0, cp.returncode, cp.stderr)
        uuid_2 = uuids[0]

        # Single query for both jobs, federated across clusters
        config = {'clusters': [{'name': 'cook1', 'url': self.cook_url_1},
                               {'name': 'cook2', 'url': self.cook_url_2}]}
        with cli.temp_config_file(config) as path:
            cp = cli.wait([uuid_1, uuid_2], flags='--config %s' % path)
            self.assertEqual(0, cp.returncode, cp.stderr)
            cp, jobs = cli.show_json([uuid_1, uuid_2], flags='--config %s' % path)
            uuids = [job['uuid'] for job in jobs]
            self.assertEqual(0, cp.returncode, cp.stderr)
            self.assertEqual(2, len(jobs), jobs)
            self.assertIn(str(uuid_1), uuids)
            self.assertIn(str(uuid_2), uuids)
            self.assertEqual('completed', jobs[0]['status'])
            self.assertEqual('completed', jobs[1]['status'])
コード例 #5
0
 def test_retries(self):
     # Default retries = 2
     cp, uuids = cli.submit('-- ls -al', 'localhost:99999', '--verbose')
     stderr = cli.decode(cp.stderr)
     self.assertEqual(1, cp.returncode, stderr)
     self.assertIn('Starting new HTTP connection (1)', stderr)
     self.assertIn('Starting new HTTP connection (2)', stderr)
     self.assertIn('Starting new HTTP connection (3)', stderr)
     self.assertNotIn('Starting new HTTP connection (4)', stderr)
     # Set retries = 0
     config = {'http': {'retries': 0}}
     with cli.temp_config_file(config) as path:
         cp, uuids = cli.submit('-- ls -al', 'localhost:99999',
                                '--verbose --config %s' % path)
         stderr = cli.decode(cp.stderr)
         self.assertEqual(1, cp.returncode, stderr)
         self.assertIn('Starting new HTTP connection (1)', stderr)
         self.assertNotIn('Starting new HTTP connection (2)', stderr)
     # Set retries = 4
     config = {'http': {'retries': 4}}
     with cli.temp_config_file(config) as path:
         cp, uuids = cli.submit('-- ls -al', 'localhost:99999',
                                '--verbose --config %s' % path)
         stderr = cli.decode(cp.stderr)
         self.assertEqual(1, cp.returncode, stderr)
         self.assertIn('Starting new HTTP connection (1)', stderr)
         self.assertIn('Starting new HTTP connection (2)', stderr)
         self.assertIn('Starting new HTTP connection (3)', stderr)
         self.assertIn('Starting new HTTP connection (4)', stderr)
         self.assertIn('Starting new HTTP connection (5)', stderr)
         self.assertNotIn('Starting new HTTP connection (6)', stderr)
コード例 #6
0
 def test_submit_accepts_command_from_stdin(self):
     cp, uuids = cli.submit(cook_url=self.cook_url, stdin=cli.encode('ls'))
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(1, len(uuids), uuids)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(1, len(jobs))
     cp, uuids = cli.submit(cook_url=self.cook_url, stdin=cli.encode(''))
     self.assertEqual(1, cp.returncode, cp.stderr)
     self.assertIn('must specify at least one command',
                   cli.decode(cp.stderr))
コード例 #7
0
 def test_no_matching_data_error_shows_only_cluster_of_interest(self):
     name = uuid.uuid4()
     config = {
         'clusters': [{
             'name': 'FOO',
             'url': f'{self.cook_url_1}'
         }, {
             'name': 'BAR',
             'url': f'{self.cook_url_2}'
         }]
     }
     with cli.temp_config_file(config) as path:
         flags = f'--config {path}'
         cp, uuids = cli.submit('ls',
                                flags=flags,
                                submit_flags=f'--name {name}')
         self.assertEqual(0, cp.returncode, cp.stderr)
         user = util.get_user(self.cook_url_1, uuids[0])
         jobs_flags = f'--user {user} --name {name} --all'
         cp, jobs = cli.jobs_json(self.cook_url_1, jobs_flags)
         self.assertEqual(0, cp.returncode, cp.stderr)
         self.assertEqual(1, len(jobs))
         cs = f'{cli.command()} {flags}'
         netloc_1 = urlparse(self.cook_url_1).netloc
         netloc_2 = urlparse(self.cook_url_2).netloc
         command = f'{cs} jobs {jobs_flags} -1 | sed "s/{netloc_1}/{netloc_2}/" | {cs} show'
         self.logger.info(command)
         cp = subprocess.run(command, shell=True, stdout=subprocess.PIPE)
         self.assertEqual(1, cp.returncode, cp.stderr)
         self.assertIn(
             'No matching data found in BAR.\nDo you need to add another cluster',
             cli.stdout(cp))
コード例 #8
0
 def test_submit_raw_multiple(self):
     command = 'ls'
     name = 'foo'
     priority = 32
     max_retries = 12
     max_runtime = 3456
     cpus = 0.1
     mem = 56
     raw_job = {
         'command': command,
         'name': name,
         'priority': priority,
         'max-retries': max_retries,
         'max-runtime': max_runtime,
         'cpus': cpus,
         'mem': mem
     }
     cp, uuids = cli.submit(stdin=cli.encode(
         json.dumps([raw_job, raw_job, raw_job])),
                            cook_url=self.cook_url,
                            submit_flags='--raw')
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(3, len(uuids), uuids)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(3, len(jobs), jobs)
     for job in jobs:
         self.assertEqual(0, cp.returncode, cp.stderr)
         self.assertEqual(command, job['command'])
         self.assertEqual(name, job['name'])
         self.assertEqual(priority, job['priority'])
         self.assertEqual(max_retries, job['max_retries'])
         self.assertEqual(max_runtime, job['max_runtime'])
         self.assertEqual(cpus, job['cpus'])
         self.assertEqual(mem, job['mem'])
コード例 #9
0
 def test_submit_raw(self):
     command = 'ls'
     juuid = uuid.uuid4()
     name = 'foo'
     priority = 32
     max_retries = 12
     max_runtime = 3456
     cpus = 0.1
     mem = 56
     raw_job = {
         'command': command,
         'uuid': str(juuid),
         'name': name,
         'priority': priority,
         'max-retries': max_retries,
         'max-runtime': max_runtime,
         'cpus': cpus,
         'mem': mem
     }
     cp, uuids = cli.submit(stdin=cli.encode(json.dumps(raw_job)),
                            cook_url=self.cook_url,
                            submit_flags='--raw')
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(str(juuid), uuids[0], uuids)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(command, jobs[0]['command'])
     self.assertEqual(name, jobs[0]['name'])
     self.assertEqual(priority, jobs[0]['priority'])
     self.assertEqual(max_retries, jobs[0]['max_retries'])
     self.assertEqual(max_runtime, jobs[0]['max_runtime'])
     self.assertEqual(cpus, jobs[0]['cpus'])
     self.assertEqual(mem, jobs[0]['mem'])
コード例 #10
0
 def test_submit_with_application(self):
     # Specifying application name and version
     cp, uuids = cli.submit(
         'ls',
         self.cook_url,
         submit_flags='--application-name %s --application-version %s' %
         ('foo', '1.2.3'))
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual('foo', jobs[0]['application']['name'])
     self.assertEqual('1.2.3', jobs[0]['application']['version'])
     # Default application name
     cp, uuids = cli.submit('ls', self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual('cook-scheduler-cli', jobs[0]['application']['name'])
コード例 #11
0
    def test_config_defaults_are_respected(self):
        # Submit job with defaults in config file
        config = {
            'defaults': {
                'submit': {
                    'mem': 256,
                    'cpus': 2,
                    'priority': 16,
                    'max-retries': 2,
                    'max-runtime': 300
                }
            }
        }
        with cli.temp_config_file(config) as path:
            cp, uuids = cli.submit('ls', self.cook_url, '--config %s' % path)
            self.assertEqual(0, cp.returncode, cp.stderr)

        # Assert that the job was submitted with the defaults from the file
        cp, jobs = cli.show_json(uuids, self.cook_url)
        self.assertEqual(0, cp.returncode, cp.stderr)
        self.assertEqual(1, len(jobs))
        job = jobs[0]
        defaults = config['defaults']['submit']
        self.assertEqual(defaults['mem'], job['mem'])
        self.assertEqual(defaults['cpus'], job['cpus'])
        self.assertEqual(defaults['priority'], job['priority'])
        self.assertEqual(defaults['max-retries'], job['max_retries'])
        self.assertEqual(defaults['max-runtime'], job['max_runtime'])
コード例 #12
0
 def test_double_dash_for_end_of_options(self):
     # Double-dash for 'end of options'
     cp, uuids = cli.submit('-- ls -al', self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual('ls -al', jobs[0]['command'])
     # Double-dash along with other flags
     cp, uuids = cli.submit('-- ls -al',
                            self.cook_url,
                            submit_flags='--name foo --priority 12')
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual('ls -al', jobs[0]['command'])
     self.assertEqual('foo', jobs[0]['name'])
     self.assertEqual(12, jobs[0]['priority'])
コード例 #13
0
 def test_no_cluster(self):
     config = {'clusters': []}
     with cli.temp_config_file(config) as path:
         flags = '--config %s' % path
         cp, uuids = cli.submit('ls', flags=flags)
         self.assertEqual(1, cp.returncode, cp.stderr)
         self.assertIn('must specify at least one cluster',
                       cli.decode(cp.stderr))
コード例 #14
0
 def test_basic_submit_and_wait(self):
     cp, uuids = cli.submit('ls', self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp = cli.wait(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual('completed', jobs[0]['status'])
コード例 #15
0
 def test_quoting(self):
     cp, uuids = cli.submit('echo "Hello; exit 1"', self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp = cli.wait(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual('completed', jobs[0]['status'])
     self.assertEqual('success', jobs[0]['state'])
コード例 #16
0
 def test_submit_output_should_explain_what_happened(self):
     cp, _ = cli.submit('ls', self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertIn("succeeded", cli.stdout(cp))
     self.assertIn("Your job UUID is", cli.stdout(cp))
     cp, _ = cli.submit_stdin(['ls', 'ls', 'ls'], self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertIn("succeeded", cli.stdout(cp))
     self.assertIn("Your job UUIDs are", cli.stdout(cp))
コード例 #17
0
    def test_federated_show(self):
        # Submit to cluster #1
        cp, uuids = cli.submit('ls', self.cook_url_1)
        self.assertEqual(0, cp.returncode, cp.stderr)
        uuid_1 = uuids[0]

        # Submit to cluster #2
        cp, uuids = cli.submit('ls', self.cook_url_2)
        self.assertEqual(0, cp.returncode, cp.stderr)
        uuid_2 = uuids[0]

        # Single query for both jobs, federated across clusters
        config = self.__two_cluster_config()
        with cli.temp_config_file(config) as path:
            cp, jobs = cli.show_jobs([uuid_1, uuid_2], flags='--config %s' % path)
            uuids = [job['uuid'] for job in jobs]
            self.assertEqual(0, cp.returncode, cp.stderr)
            self.assertEqual(2, len(jobs), jobs)
            self.assertIn(str(uuid_1), uuids)
            self.assertIn(str(uuid_2), uuids)
コード例 #18
0
 def test_wait_specify_timeout_and_interval(self):
     cp, uuids = cli.submit('"sleep 60"', self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     start_time = time.time()
     cp = cli.wait(uuids, self.cook_url, wait_flags='--timeout 1')
     elapsed_time = time.time() - start_time
     self.assertEqual(1, cp.returncode, cp.stderr)
     self.assertIn('Timeout waiting', cli.decode(cp.stderr))
     self.assertLess(elapsed_time, 15)
     self.assertGreater(elapsed_time, 3)
     start_time = time.time()
     cp = cli.wait(uuids,
                   self.cook_url,
                   wait_flags='--timeout 1 --interval 1')
     elapsed_time_2 = time.time() - start_time
     self.assertEqual(1, cp.returncode, cp.stderr)
     self.assertIn('Timeout waiting', cli.decode(cp.stderr))
     self.assertLess(elapsed_time_2, 3)
コード例 #19
0
    def test_ssh(self):
        # Submit to cluster #2
        cp, uuids = cli.submit('ls', self.cook_url_2)
        self.assertEqual(0, cp.returncode, cp.stderr)
        instance = util.wait_for_instance(self.cook_url_2, uuids[0])

        # Run ssh for the submitted job, with both clusters configured
        config = self.__two_cluster_config()
        with cli.temp_config_file(config) as path:
            hostname = instance['hostname']
            env = os.environ
            env['CS_SSH'] = 'echo'
            cp = cli.ssh(uuids[0], env=env, flags=f'--config {path}')
            stdout = cli.stdout(cp)
            self.assertEqual(0, cp.returncode, cli.output(cp))
            self.assertIn(f'Attempting ssh for job instance {instance["task_id"]}', stdout)
            self.assertIn('Executing ssh', stdout)
            self.assertIn(hostname, stdout)
            self.assertIn(f'-t {hostname} cd', stdout)
            self.assertIn('; bash', stdout)
コード例 #20
0
 def test_submit_specify_fields(self):
     juuid = uuid.uuid4()
     name = 'foo'
     priority = 32
     max_retries = 12
     max_runtime = 34
     cpus = 0.1
     mem = 56
     submit_flags = '--uuid %s --name %s --priority %s --max-retries %s --max-runtime %s --cpus %s --mem %s' % \
                    (juuid, name, priority, max_retries, max_runtime, cpus, mem)
     cp, uuids = cli.submit('ls', self.cook_url, submit_flags=submit_flags)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(str(juuid), uuids[0], uuids)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(name, jobs[0]['name'])
     self.assertEqual(priority, jobs[0]['priority'])
     self.assertEqual(max_retries, jobs[0]['max_retries'])
     self.assertEqual(max_runtime, jobs[0]['max_runtime'])
     self.assertEqual(cpus, jobs[0]['cpus'])
     self.assertEqual(mem, jobs[0]['mem'])
コード例 #21
0
 def test_specifying_cluster_name_explicitly(self):
     config = {
         'clusters': [{
             'name': 'foo',
             'url': self.cook_url
         }],
         'defaults': {
             'submit': {
                 'mem': 256,
                 'cpus': 2,
                 'max-retries': 2
             }
         }
     }
     with cli.temp_config_file(config) as path:
         flags = '--config %s --cluster foo' % path
         cp, uuids = cli.submit('ls', flags=flags)
         self.assertEqual(0, cp.returncode, cp.stderr)
         cp, jobs = cli.show_json(uuids, flags=flags)
         self.assertEqual(0, cp.returncode, cp.stderr)
         cp = cli.wait(uuids, flags=flags)
         self.assertEqual(0, cp.returncode, cp.stderr)
コード例 #22
0
 def test_submit_raw_invalid(self):
     cp, _ = cli.submit(stdin=cli.encode('1'),
                        cook_url=self.cook_url,
                        submit_flags='--raw')
     self.assertEqual(1, cp.returncode, cp.stderr)
     self.assertIn('malformed JSON for raw', cli.decode(cp.stderr))
コード例 #23
0
 def test_error_if_both_cluster_and_url_specified(self):
     cp, _ = cli.submit('ls', flags='--cluster foo --url bar')
     self.assertEqual(1, cp.returncode, cp.stderr)
     self.assertIn('cannot specify both a cluster name and a cluster url',
                   cli.decode(cp.stderr))
コード例 #24
0
 def test_assume_http_if_elided(self):
     url = urlparse(self.cook_url)
     url_sans_scheme = url.netloc
     cp, uuids = cli.submit('ls', url_sans_scheme)
     self.assertEqual(0, cp.returncode, cp.stderr)
コード例 #25
0
 def test_name_default(self):
     cp, uuids = cli.submit('ls', self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp, jobs = cli.show_json(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual('%s_job' % os.environ['USER'], jobs[0]['name'])
コード例 #26
0
 def test_verbose_flag(self):
     cp, _ = cli.submit('ls', self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     cp_verbose, _ = cli.submit('ls', self.cook_url, '--verbose')
     self.assertEqual(0, cp_verbose.returncode, cp_verbose.stderr)
     self.assertTrue(len(cp_verbose.stderr) > len(cp.stderr))
コード例 #27
0
 def test_error_on_invalid_config_path(self):
     cp, uuids = cli.submit('ls',
                            flags='--config /bogus/path/%s' % uuid.uuid4())
     self.assertEqual(1, cp.returncode, cp.stderr)
コード例 #28
0
 def test_submit_raw_should_error_if_command_is_given(self):
     cp, _ = cli.submit('ls', self.cook_url, submit_flags='--raw')
     self.assertEqual(1, cp.returncode, cp.stderr)
     self.assertIn(
         'cannot specify a command at the command line when using --raw/-r',
         cli.decode(cp.stderr))
コード例 #29
0
 def test_show_running_job(self):
     cp, uuids = cli.submit('sleep 60', self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
     util.wait_for_job(self.cook_url, uuids[0], 'running')
     cp = cli.show(uuids, self.cook_url)
     self.assertEqual(0, cp.returncode, cp.stderr)
コード例 #30
0
 def test_list_by_state(self):
     name = str(uuid.uuid4())
     # waiting
     raw_job = {
         'command': 'ls',
         'name': name,
         'constraints': [['HOSTNAME', 'EQUALS', 'will not get scheduled']]
     }
     cp, uuids = cli.submit(stdin=cli.encode(json.dumps(raw_job)),
                            cook_url=self.cook_url,
                            submit_flags='--raw')
     user = util.get_user(self.cook_url, uuids[0])
     self.assertEqual(0, cp.returncode, cp.stderr)
     util.wait_for_job(self.cook_url, uuids[0], 'waiting')
     cp, jobs = self.list_jobs(name, user, 'waiting')
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(1, len(jobs))
     self.assertEqual(uuids[0], jobs[0]['uuid'])
     waiting_uuid = uuids[0]
     # running
     cp, uuids = cli.submit('sleep 60',
                            self.cook_url,
                            submit_flags='--name %s' % name)
     self.assertEqual(0, cp.returncode, cp.stderr)
     util.wait_for_job(self.cook_url, uuids[0], 'running')
     cp, jobs = self.list_jobs(name, user, 'running')
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(1, len(jobs))
     self.assertEqual(uuids[0], jobs[0]['uuid'])
     running_uuid = uuids[0]
     # completed
     cp, uuids = cli.submit('ls',
                            self.cook_url,
                            submit_flags='--name %s' % name)
     self.assertEqual(0, cp.returncode, cp.stderr)
     util.wait_for_job(self.cook_url, uuids[0], 'completed')
     cp, jobs = self.list_jobs(name, user, 'completed')
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(1, len(jobs))
     self.assertEqual(uuids[0], jobs[0]['uuid'])
     # success
     cp, jobs = self.list_jobs(name, user, 'success')
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(1, len(jobs))
     self.assertEqual(uuids[0], jobs[0]['uuid'])
     success_uuid = uuids[0]
     # failed
     cp, uuids = cli.submit('exit 1',
                            self.cook_url,
                            submit_flags='--name %s' % name)
     self.assertEqual(0, cp.returncode, cp.stderr)
     util.wait_for_job(self.cook_url, uuids[0], 'completed')
     cp, jobs = self.list_jobs(name, user, 'failed')
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(1, len(jobs))
     self.assertEqual(uuids[0], jobs[0]['uuid'])
     failed_uuid = uuids[0]
     # all
     cp, jobs = self.list_jobs(name, user, 'all')
     uuids = [j['uuid'] for j in jobs]
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(4, len(jobs))
     self.assertIn(waiting_uuid, uuids)
     self.assertIn(running_uuid, uuids)
     self.assertIn(success_uuid, uuids)
     self.assertIn(failed_uuid, uuids)
     # waiting+running
     cp, jobs = self.list_jobs(name, user, 'waiting', 'running')
     uuids = [j['uuid'] for j in jobs]
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(2, len(jobs))
     self.assertIn(waiting_uuid, uuids)
     self.assertIn(running_uuid, uuids)
     # completed+waiting
     cp, jobs = self.list_jobs(name, user, 'completed', 'waiting')
     uuids = [j['uuid'] for j in jobs]
     self.assertEqual(0, cp.returncode, cp.stderr)
     self.assertEqual(3, len(jobs))
     self.assertIn(waiting_uuid, uuids)
     self.assertIn(success_uuid, uuids)
     self.assertIn(failed_uuid, uuids)