Beispiel #1
0
def test_priority(pool):
    dummy1 = create_dummy('dummy1')
    sched.meta.assign_val(dummy1, priority=3)
    dummy2 = create_dummy('dummy2')
    sched.meta.assign_val(dummy2, priority=4)
    s = sched.Sched([dummy2, dummy1])
    res = list(s.run(pool()))
    assert res == [TaskRes(dummy1), TaskRes(dummy2)]
    sched.meta.assign_val(dummy1, priority=4)
    sched.meta.assign_val(dummy2, priority=3)
    s = sched.Sched([dummy2, dummy1])
    res = list(s.run(pool()))
    assert res == [TaskRes(dummy2), TaskRes(dummy1)]
Beispiel #2
0
def test_kwargs(pool):
    dummy1 = create_dummy_with_kwargs('dummy1')
    args = {'testargs': 1234}
    sched.meta.assign_val(dummy1, kwargs=args)
    s = sched.Sched([dummy1])
    res = list(s.run(pool()))
    assert res == [TaskRes(dummy1, ret=args)]
Beispiel #3
0
def test_shared_kwargs(pool):
    dummy1 = create_dummy_shared_kwargs('dummy1', 1234)
    args = {'testargs': 2345}
    sched.meta.assign_val(dummy1, kwargs=args)
    s = sched.Sched([dummy1])
    res = list(s.run(pool()))
    assert res == [TaskRes(dummy1, shared={'dummy1': 1234}, ret=args)]
Beispiel #4
0
def test_return_exception(pool):
    dummy1 = create_dummy_with_exception('dummy1', NameError())
    s = sched.Sched([dummy1])
    res = list(s.run(pool()))
    dummy1res = res[0]
    assert dummy1res.task == dummy1
    assert dummy1res.excinfo.type == NameError
    assert isinstance(dummy1res.excinfo.val, NameError)
Beispiel #5
0
def test_requires_provides(pool):
    dummy1 = create_dummy('dummy1')
    sched.meta.assign_val(dummy1, requires=['dep'], priority=1)
    dummy2 = create_dummy('dummy2')
    sched.meta.assign_val(dummy2, provides=['dep'], priority=2)
    s = sched.Sched([dummy2, dummy1])
    res = list(s.run(pool()))
    assert res == [TaskRes(dummy2), TaskRes(dummy1)]
Beispiel #6
0
def test_add_tasks(pool):
    dummy1 = create_dummy('dummy1')
    dummy2 = create_dummy('dummy2')
    s = sched.Sched([dummy1])
    s.add_tasks([dummy2])
    res = list(s.run(pool()))
    assert TaskRes(dummy1) in res
    assert TaskRes(dummy2) in res
Beispiel #7
0
def test_claims(pool):
    q = mp.Queue()
    dummy1 = create_dummy_that_types('dummy1')
    sched.meta.assign_val(dummy1, claims=['res'], priority=1, kwargs={'q': q})
    dummy2 = create_dummy_that_types('dummy2')
    sched.meta.assign_val(dummy2, claims=['res'], priority=2, kwargs={'q': q})
    s = sched.Sched([dummy1, dummy2])
    res = list(s.run(pool(workers=1)))
    assert res == [TaskRes(dummy1), TaskRes(dummy2)]
    output = ''.join(map(lambda x: q.get(), range(q.qsize())))
    assert output == '1111122222'
    #s.add_tasks([dummy1, dummy2])
    s = sched.Sched([dummy1, dummy2])
    res = list(s.run(pool(workers=2)))
    assert TaskRes(dummy1) in res
    assert TaskRes(dummy2) in res
    output = ''.join(map(lambda x: str(q.get()), range(q.qsize())))
    assert output == '1111122222'
Beispiel #8
0
def test_unpicklable_ret_shared(pool):
    nonpickl = create_dummy('')
    dummy1 = create_dummy_with_shared('dummy1', nonpickl, ret=nonpickl)
    s = sched.Sched([dummy1])
    res = list(s.run(pool()))
    dummy1res = res[0]
    assert dummy1res.task == dummy1
    assert dummy1res.excinfo.type == AttributeError
    assert "Can't pickle" in str(dummy1res.excinfo.val)
Beispiel #9
0
def test_provided_not_required():
    dummy1 = create_dummy('dummy1')
    sched.meta.assign_val(dummy1, provides=['one'])
    with warnings.catch_warnings(record=True) as caught:
        s = sched.Sched([dummy1])
    assert len(caught) == 1  # only one warning
    assert caught[0].category == util.PexenWarning
    assert "Dep 'one' provided by" in str(caught[0].message)
    assert "but not required by any task" in str(caught[0].message)
Beispiel #10
0
def test_kwargs_without_args(pool):
    dummy1 = create_dummy('dummy1')
    args = {'testargs': 1234}
    sched.meta.assign_val(dummy1, kwargs=args)
    s = sched.Sched([dummy1])
    res = list(s.run(pool()))
    dummy1res = res[0]
    assert dummy1res.task == dummy1
    assert dummy1res.excinfo.type == TypeError
    assert "unexpected keyword argument" in str(dummy1res.excinfo.val)
Beispiel #11
0
def test_wait_for_deps(pool):
    # when frontline gets exhausted while there are still some tasks
    # to run within deps references, the planner should not exit
    dummy1 = create_dummy('dummy1')
    sched.meta.assign_val(dummy1, provides=['one'])
    dummy2 = create_dummy('dummy2')
    sched.meta.assign_val(dummy2, requires=['one'], provides=['two'])
    dummy3 = create_dummy('dummy3')
    sched.meta.assign_val(dummy3, requires=['two'])
    s = sched.Sched([dummy1, dummy2, dummy3])
    res = list(s.run(pool(workers=4)))
    assert res == [TaskRes(dummy1), TaskRes(dummy2), TaskRes(dummy3)]
Beispiel #12
0
def test_shared(pool):
    dummy1 = create_dummy_with_shared('dummy1', 1234)
    sched.meta.assign_val(dummy1, requires=['dep'])
    dummy2 = create_dummy_with_shared('dummy2', 2345)
    sched.meta.assign_val(dummy2, provides=['dep'])
    s = sched.Sched([dummy2, dummy1])
    res = list(s.run(pool()))
    dummy2res, dummy1res = res  # order guaranteed by dep
    assert dummy2res == TaskRes(dummy2, shared={'dummy2': 2345})
    assert dummy1res == TaskRes(dummy1,
                                shared={
                                    'dummy2': 2345,
                                    'dummy1': 1234
                                })
Beispiel #13
0
def test_failed_locks_controlled(pool):
    dummy1 = create_dummy('dummy1')
    sched.meta.assign_val(dummy1, priority=2, claims=['res'])
    dummy2 = create_dummy_with_exception('dummy2', sched.TaskFailError())
    sched.meta.assign_val(dummy2, priority=1, claims=['res'])
    s = sched.Sched([dummy1, dummy2])
    with warnings.catch_warnings(record=True) as caught:
        res = list(s.run(pool()))
    assert len(res) == 2  # dummy1 did run
    dummy2res, dummy1res = res
    assert dummy2res.task == dummy2
    assert dummy2res.excinfo.type == sched.TaskFailError
    assert isinstance(dummy2res.excinfo.val, sched.TaskFailError)
    assert dummy1res.task == dummy1
    assert len(caught) == 0  # no warnings
Beispiel #14
0
def test_failed_locks(pool, exc):
    dummy1 = create_dummy('dummy1')
    sched.meta.assign_val(dummy1, priority=2, claims=['res'])
    dummy2 = create_dummy_with_exception('dummy2', exc)
    sched.meta.assign_val(dummy2, priority=1, claims=['res'])
    s = sched.Sched([dummy1, dummy2])
    with warnings.catch_warnings(record=True) as caught:
        res = list(s.run(pool()))
    assert len(res) == 1  # dummy1 didn't run
    dummy2res = res[0]
    assert dummy2res.task == dummy2
    assert dummy2res.excinfo.type == type(exc)
    assert isinstance(dummy2res.excinfo.val, type(exc))
    assert len(caught) == 1  # only one warning
    assert caught[0].category == util.PexenWarning
    assert "1 locks still held at exit" in str(caught[0].message)
Beispiel #15
0
def test_failed_deps(pool, exc):
    dummy1 = create_dummy('dummy1')
    sched.meta.assign_val(dummy1, requires=['dep'])
    dummy2 = create_dummy_with_exception('dummy2', exc)
    sched.meta.assign_val(dummy2, provides=['dep'])
    s = sched.Sched([dummy2, dummy1])
    with warnings.catch_warnings(record=True) as caught:
        res = list(s.run(pool()))
    assert len(res) == 1  # dummy1 didn't run
    dummy2res = res[0]
    assert dummy2res.task == dummy2
    assert dummy2res.excinfo.type == type(exc)
    assert isinstance(dummy2res.excinfo.val, type(exc))
    assert len(caught) == 1  # only one warning
    assert caught[0].category == util.PexenWarning
    assert "1 tasks skipped due to unmet deps" in str(caught[0].message)
Beispiel #16
0
def test_preset_shared(pool):
    dummy1 = create_dummy_with_shared('dummy1', 1234)
    dummy2 = create_dummy_with_shared('dummy2', 2345)
    s = sched.Sched([dummy1, dummy2])
    s.add_shared(bothx=4444, dummy2=6666)
    s.add_shared(bothy=5555)
    res = list(s.run(pool()))
    assert TaskRes(dummy1,
                   shared={
                       'bothx': 4444,
                       'bothy': 5555,
                       'dummy1': 1234,
                       'dummy2': 6666
                   }) in res
    # pre-set 6666 was overwritten and propagated to parent
    assert TaskRes(dummy2,
                   shared={
                       'bothx': 4444,
                       'bothy': 5555,
                       'dummy2': 2345
                   }) in res
Beispiel #17
0
def test_task_via_init(pool):
    dummy1 = create_dummy('dummy1')
    s = sched.Sched([dummy1])
    res = list(s.run(pool()))
    assert res == [TaskRes(dummy1)]
Beispiel #18
0
def test_empty(pool):
    s = sched.Sched([])
    res = list(s.run(pool()))
    assert res == []
Beispiel #19
0
def test_empty_default():
    s = sched.Sched([])
    res = list(s.run())
    print(res)
Beispiel #20
0
def test_sanity():
    s = sched.Sched([])
Beispiel #21
0
def test_required_not_provided():
    dummy1 = create_dummy('dummy1')
    sched.meta.assign_val(dummy1, requires=['one'])
    with pytest.raises(sched.DepcheckError) as exc:
        s = sched.Sched([dummy1])
    assert "Unsatisfied requires remain: ['one']" in str(exc.value)
Beispiel #22
0
def test_unpicklable_ret_shared_thread(pool):
    nonpickl = create_dummy('')
    dummy1 = create_dummy_with_shared('dummy1', nonpickl, ret=nonpickl)
    s = sched.Sched([dummy1])
    res = list(s.run(pool()))
    assert res == [TaskRes(dummy1, shared={'dummy1': nonpickl}, ret=nonpickl)]
Beispiel #23
0
def test_lock_sanity():
    dummy1 = create_dummy('dummy1')
    sched.meta.assign_val(dummy1, uses=[1, 2, 3], claims=[4, 2, 3, 6])
    with pytest.raises(sched.MutexError) as exc:
        s = sched.Sched([dummy1])
    assert "has {2, 3} in both claims and uses" in str(exc.value)
Beispiel #24
0
def test_return_value(pool):
    dummy1 = create_dummy_with_return('dummy1', 1234)
    s = sched.Sched([dummy1])
    res = list(s.run(pool()))
    assert res == [TaskRes(dummy1, ret=1234)]