Exemple #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))
Exemple #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'])
Exemple #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'])
Exemple #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'])
Exemple #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)
Exemple #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))
Exemple #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))
Exemple #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'])
Exemple #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'])
Exemple #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'])
Exemple #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'])
Exemple #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'])
Exemple #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))
Exemple #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'])
Exemple #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'])
Exemple #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))
Exemple #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)
Exemple #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)
Exemple #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)
Exemple #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'])
Exemple #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)
Exemple #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))
Exemple #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))
Exemple #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)
Exemple #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'])
Exemple #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))
Exemple #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)
Exemple #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))
Exemple #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)
Exemple #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)