Пример #1
0
def test_iter_job_args_fail(tmpdir):
    submit_dir = str(tmpdir.mkdir('submit'))

    # Check _iter_job_args raises a ValueError if input Job is not built
    job = Job('testjob', example_script, submit=submit_dir)
    with pytest.raises(ValueError) as excinfo:
        i = _iter_job_args(job)
        node_name, arg = next(i)
    error = ('Job {} must be built before adding it to a '
             'Dagman'.format(job.name))
    assert error == str(excinfo.value)

    # Check _iter_job_args raises a StopIteration exception on a Job w/o args
    job.build()
    with pytest.raises(StopIteration):
        i = _iter_job_args(job)
        node_name, arg = next(i)

    # Check _iter_job_args raises a TypeError when input is not a Job
    with pytest.raises(TypeError) as excinfo:
        not_job = 'thisisastring'
        i = _iter_job_args(not_job)
        node_name, arg = next(i)
    error = 'Expecting a Job object, got {}'.format(type(not_job))
    assert error == str(excinfo.value)
Пример #2
0
def test_init_arguments_type_fail():
    with pytest.raises(TypeError) as excinfo:
        job_with_arg = Job(name='jobname',
                           executable=example_script,
                           arguments=50)
        job_with_arg.build()
    error = 'arguments must be a string or an iterable'
    assert error == str(excinfo.value)
Пример #3
0
def test_build_executeable_not_found_fail(tmpdir):
    submit_dir = str(tmpdir.mkdir('submit'))
    with pytest.raises(IOError) as excinfo:
        ex = '/path/to/executable'
        job = Job('jobname', ex, submit=submit_dir)
        job.build(makedirs=False)
    error = 'The executable {} does not exist'.format(ex)
    assert error == str(excinfo.value)
Пример #4
0
def test_job_submit_env_variable_dir(tmpdir, monkeypatch):
    # Use monkeypatch fixture to set pycondor environment variable
    dir_path = str(tmpdir.mkdir('submit'))
    monkeypatch.setenv('PYCONDOR_SUBMIT_DIR', dir_path)

    job = Job('jobname', example_script)
    job.build()
    tmpdir_path = os.path.join(str(tmpdir), 'submit')
    job_path = os.path.dirname(getattr(job, 'submit_file'))
    assert tmpdir_path == job_path
Пример #5
0
def test_job_args_and_queue_raises(tmpdir):
    submit_dir = str(tmpdir.join('submit'))

    with pytest.raises(NotImplementedError) as excinfo:
        job = Job('job', example_script, submit=submit_dir, queue=2)
        job.add_args(str(i) for i in range(10))
        job.build()
    error = ('At this time multiple arguments and queue values '
             'are only supported through Dagman')
    assert error == str(excinfo.value)
Пример #6
0
def test_job_env_variable_dir(tmpdir, monkeypatch, env_var):
    submit_dir = str(tmpdir)
    # Use monkeypatch fixture to set pycondor environment variable
    dir_path = str(tmpdir.mkdir(env_var))
    monkeypatch.setenv('PYCONDOR_{}_DIR'.format(env_var.upper()), dir_path)

    job = Job('jobname', example_script, submit=submit_dir)
    job.build()
    tmpdir_path = os.path.join(str(tmpdir), env_var)
    job_path = os.path.dirname(getattr(job, '{}_file'.format(env_var)))
    assert tmpdir_path == job_path
Пример #7
0
def test_job_subdag_build(tmpdir):
    submit_dir = str(tmpdir.join('submit'))

    extra_lines = ['first extra line', 'second extra line']
    job = Job('job',
              example_script,
              submit=submit_dir,
              extra_lines=extra_lines)
    job.build()

    with open(job.submit_file, 'r') as f:
        assert set(extra_lines) <= set(line.rstrip('\n') for line in f)
Пример #8
0
def test_submit_job_parents_raises(tmpdir, monkeypatch_condor_submit):
    # Test submitting a Job with parents (not in a Dagman) raises an error
    submit = str(tmpdir)
    job = Job('jobname', example_script, submit=submit)
    parent_job = Job('parent_jobname', example_script, submit=submit)
    job.add_parent(parent_job)
    job.build()
    with pytest.raises(ValueError) as excinfo:
        job.submit_job()
    error = ('Attempting to submit a Job with parents. '
             'Interjob relationships requires Dagman.')
    assert error == str(excinfo.value)
Пример #9
0
def test_iter_job_args(tmpdir):
    # Check node names yielded by _iter_job_args
    submit_dir = str(tmpdir.mkdir('submit'))

    job = Job('testjob', example_script, submit=submit_dir)
    job.add_arg('argument1', name='arg1')
    job.add_arg('argument2')
    job.build()
    for idx, (node_name, jobarg) in enumerate(_iter_job_args(job)):
        if jobarg.name is not None:
            assert node_name == '{}_{}'.format(job.submit_name, jobarg.name)
        else:
            assert node_name == '{}_arg_{}'.format(job.submit_name, idx)
Пример #10
0
def test_queue_written_to_submit_file(tmpdir):
    # Test to check that the queue parameter is properly written
    # to submit file when Job is created. See issue #38.

    submit_dir = str(tmpdir.mkdir('submit'))

    # Build Job object with queue=5
    job = Job('jobname', example_script, submit=submit_dir, queue=5)
    job.build(fancyname=False)

    # Read the built submit file and check that the 'queue 5' is
    # contained in the file.
    with open(job.submit_file, 'r') as f:
        lines = f.readlines()
    assert 'queue 5' in lines
Пример #11
0
def test_job_dag_submit_file_same(tmpdir, dagman):
    # Test to check that the submit file for a Job with no arguments is the
    # same whether built from a Dagman or not. See issue #38.

    submit_dir = str(tmpdir.mkdir('submit'))
    # Build Job object that will be built outside of a Dagman
    job_outside_dag = Job('test_job',
                          example_script,
                          submit=submit_dir,
                          queue=5)
    job_outside_dag.build(fancyname=False)

    # Build Job object that will be built inside of a Dagman
    job_inside_dag = Job('test_job',
                         example_script,
                         submit=submit_dir,
                         queue=5)
    dagman.add_job(job_inside_dag)
    dagman.build(fancyname=False)

    # Check that the contents of the two Job submit files are the same
    assert filecmp.cmp(job_outside_dag.submit_file,
                       job_inside_dag.submit_file,
                       shallow=False)
Пример #12
0
def test_init_retry_type_fail():
    with pytest.raises(TypeError) as excinfo:
        job_with_retry = Job('jobname', example_script, retry='20')
        job_with_retry.build()
    error = 'retry must be an int'
    assert error == str(excinfo.value)
Пример #13
0
def test_init_arg_type_fail():
    with pytest.raises(TypeError) as excinfo:
        job_with_arg = Job('jobname', example_script, argument=50)
        job_with_arg.build()
    error = 'arg must be a string'
    assert error == str(excinfo.value)