Пример #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)