コード例 #1
0
ファイル: test_manager.py プロジェクト: rkc117/index-srv
def mock_manager(use_clock=False):
    """
    Returns an instance of repositories.Manager with a mock database, an
    empty shelf (using a dict instead of an actual shelf instance), and
    an example repository
    """
    repostore = repositories.RepositoryStore({})
    repostore._shelf = {
        'repo_a': {
            'id': 'repo_a',
            'service': {
                'location': 'http://a.test'
            }
        }
    }
    queue = Queue.Queue()
    notification_q = repositories.Notification(queue)
    scheduler = repositories.Scheduler()
    scheduler._use_clock = use_clock
    if use_clock:
        scheduler._time = iter(frange(0, 100000, 0.5)).next
    notification_q.connect_with(scheduler)
    manager = repositories.Manager(Mock(), repostore, scheduler)
    manager.db.add_entities.return_value = make_future({'errors': []})
    return scheduler, repostore, manager
コード例 #2
0
def test_scheduler_waits():
    scheduler = repositories.Scheduler()
    scheduler._time = lambda: 0

    # schedule repo0 after repo1
    # then reschedule repo0 before repo1
    yield scheduler.schedule('repo0', 1.0)
    yield scheduler.schedule('repo1', 0.75)
    yield scheduler.schedule('repo0', 0.5)

    scheduler._time = lambda: 0
    result = yield scheduler.get()
    assert result == []

    scheduler._time = lambda: 0.6
    result = yield scheduler.get()
    assert result == ['repo0']

    scheduler._time = lambda: 0.65
    result = yield scheduler.get()
    assert result == []

    scheduler._time = lambda: 0.8
    result = yield scheduler.get()
    assert result == ['repo1']

    scheduler._time = lambda: 1.1
    result = yield scheduler.get()
    assert result == []

    scheduler._time = lambda: 20
    result = yield scheduler.get()
    assert result == []
コード例 #3
0
def test_scheduler_schedule_new_repo():
    scheduler = repositories.Scheduler()
    scheduler._time = lambda: 0

    yield scheduler.schedule('repo0', 0)

    result = yield scheduler.get()
    assert result == ['repo0']
コード例 #4
0
def test_schedule_fetch_in_the_future():
    scheduler = repositories.Scheduler()
    scheduler._time = lambda: 1000
    scheduler._items = {'a': [2000, 'a']}
    scheduler._priority_q = [[2000, 'a']]

    yield scheduler.schedule('a', 100)

    assert scheduler._items['a'][0] == 1100
コード例 #5
0
def test_not_enough_items():
    scheduler = repositories.Scheduler()
    scheduler._time = lambda: 0

    yield scheduler.schedule('repo0', 1)

    scheduler._time = lambda: 2
    result = yield scheduler.get(5)

    assert result == ['repo0']
コード例 #6
0
def test_get_multiple_items():
    scheduler = repositories.Scheduler()
    scheduler._time = lambda: 0

    yield scheduler.schedule('repo0', 1)
    yield scheduler.schedule('repo1', 2)

    scheduler._time = lambda: 2
    result = yield scheduler.get(2)

    assert result == ['repo0', 'repo1']
コード例 #7
0
def test_get_rescheduled_in_the_future():
    scheduler = repositories.Scheduler()
    scheduler._time = lambda: 0

    yield scheduler.schedule('repo0', 0)
    yield scheduler.schedule('repo1', 1)
    yield scheduler.schedule('repo0', 2)

    scheduler._time = lambda: 1
    result = yield scheduler.get(5)

    assert result == ['repo1']
コード例 #8
0
def test_scheduler_receives_notification():
    queue = Queue.Queue()
    notification_q = repositories.Notification(queue)
    scheduler = repositories.Scheduler()
    notification_q.connect_with(scheduler)

    scheduler._time = lambda: 0
    notification_q.put_nowait('repo0')
    yield notification_q._check_for_notifications()

    scheduler._time = lambda: repositories.options.notify_min_delay
    result = yield scheduler.get()

    assert result == ['repo0']
コード例 #9
0
def test_scheduler_respects_order():
    scheduler = repositories.Scheduler()
    # time is 0 when scheduling and then goes up by one
    scheduler._time = iter([0, 0, 0, 1, 2, 3]).next
    scheduler._sleep = lambda x: None

    yield scheduler.schedule('repo0', 3)
    yield scheduler.schedule('repo1', 1)
    yield scheduler.schedule('repo2', 2)

    result = yield scheduler.get()
    assert result == ['repo1']
    result = yield scheduler.get()
    assert result == ['repo2']
    result = yield scheduler.get()
    assert result == ['repo0']
コード例 #10
0
def test_get_limited_multiple_items():
    scheduler = repositories.Scheduler()
    scheduler._time = lambda: 0

    yield scheduler.schedule('repo0', 1)
    yield scheduler.schedule('repo1', 2)
    yield scheduler.schedule('repo2', 3)

    scheduler._time = lambda: 3
    result = yield scheduler.get(2)

    assert result == ['repo0', 'repo1']

    # check 3 would have been included next
    result = yield scheduler.get(2)
    assert result == ['repo2']
コード例 #11
0
def test_scheduler_notification_in_same_batch_get_merged():
    queue = Queue.Queue()
    notification_q = repositories.Notification(queue)
    scheduler = repositories.Scheduler()
    scheduler._time = lambda: 0
    notification_q.connect_with(scheduler)

    notification_q.put_nowait('repo0')
    notification_q.put_nowait('repo1')
    for i in range(10):
        notification_q.put_nowait('repo0')
    yield notification_q._check_for_notifications()

    scheduler._time = lambda: repositories.options.notify_min_delay
    result = yield scheduler.get(3)

    assert set(result) == {'repo0', 'repo1'}
コード例 #12
0
def test_scheduler_reschedule():
    scheduler = repositories.Scheduler()
    # time is 0 when scheduling and then goes up by one
    scheduler._time = iter([0, 0, 0, 1, 2, 3]).next
    scheduler._sleep = lambda x: None

    # schedule repo0 after repo1
    # then reschedule repo0 before repo1
    yield scheduler.schedule('repo0', 3)
    yield scheduler.schedule('repo1', 2)
    yield scheduler.schedule('repo0', 1)

    result = yield scheduler.get()
    assert result == ['repo0']
    result = yield scheduler.get()
    assert result == ['repo1']
    result = yield scheduler.get()
    assert result == []
コード例 #13
0
def test_get_rescheduled_multiple_items():
    scheduler = repositories.Scheduler()
    scheduler._time = lambda: 0

    yield scheduler.schedule('repo0', 10)
    yield scheduler.schedule('repo1', 2)
    yield scheduler.schedule('repo2', 3)
    yield scheduler.schedule('repo0', 2)
    yield scheduler.schedule('repo1', 1)

    scheduler._time = lambda: 5
    result = yield scheduler.get(5)

    assert result == ['repo1', 'repo0', 'repo2']

    # check nothing would have been included next
    result = yield scheduler.get(2)
    assert result == []
コード例 #14
0
def test_scheduler_get_empty():
    scheduler = repositories.Scheduler()

    result = yield scheduler.get()

    assert result == []