Beispiel #1
0
def test_activity_timeouts(monkeypatch, generators):
    """Test the creation of an activity timeouts.

    More details: the timeout of a task is 120s, the schedule to start is 1000,
    100 activities are going to be scheduled when the generator is set. The
    schedule_to_start for all activities instance is: 10000 * 100 = 100k. The
    schedule to close is 100k + duration of an activity (which is 120s * 2).
    """

    timeout = 120
    start_timeout = 1000

    @task.decorate(timeout=timeout)
    def local_task():
        return

    monkeypatch.setattr(activity.Activity, '__init__', lambda self: None)
    current_activity = activity.Activity()
    current_activity.hydrate(dict(schedule_to_start=start_timeout))
    current_activity.generators = generators
    current_activity.runner = runner.Sync(local_task.fill(), local_task.fill())

    total_generators = pow(10, len(current_activity.generators))
    schedule_to_start = start_timeout * total_generators
    for instance in current_activity.instances({}):
        assert current_activity.pool_size == total_generators
        assert instance.schedule_to_start == schedule_to_start
        assert instance.timeout == timeout * 2
        assert instance.schedule_to_close == (schedule_to_start +
                                              instance.timeout)
Beispiel #2
0
def test_aynchronous_tasks(monkeypatch):
    """Test asynchronous tasks.
    """

    monkeypatch.setattr(activity.Activity, '__init__', lambda self: None)
    monkeypatch.setattr(activity.Activity, 'heartbeat', lambda self: None)

    tasks = [MagicMock() for i in range(5)]
    tasks[2].return_value = dict(oi='mondo')
    tasks[4].return_value = dict(bonjour='monde')
    expected_response = dict(
        list(tasks[2].return_value.items()) +
        list(tasks[4].return_value.items()))

    workers = 2
    current_runner = runner.Async(*tasks, max_workers=workers)

    assert current_runner.max_workers == workers
    assert len(current_runner.tasks) == len(tasks)

    current_activity = activity.Activity()
    current_activity.hydrate(dict(runner=current_runner))

    context = dict(hello='world')
    resp = current_runner.execute(current_activity, context)

    for current_task in tasks:
        assert current_task.called

    assert resp == expected_response
Beispiel #3
0
def test_instances_creation(monkeypatch, generators):
    """Test the creation of an activity instance id with the use of a local
    context.
    """

    monkeypatch.setattr(activity.Activity, '__init__', lambda self: None)

    local_activity = activity.Activity()
    external_activity = activity.ExternalActivity(timeout=60)

    for current_activity in [local_activity, external_activity]:
        current_activity.generators = generators

        if len(current_activity.generators):
            instances = list(current_activity.instances(dict()))
            assert len(instances) == pow(10, len(generators))
            for instance in instances:
                assert isinstance(instance.local_context.get('i'), int)

                if len(generators) == 2:
                    assert isinstance(instance.local_context.get('d'), int)
        else:
            instances = list(current_activity.instances(dict()))
            assert len(instances) == 1
            assert isinstance(instances[0].local_context, dict)
            # Context is empty since no generator was used.
            assert not instances[0].local_context
Beispiel #4
0
def test_hydrate_activity(monkeypatch, boto_client):
    """Test the hydratation of an activity.
    """

    current_activity = activity.Activity(boto_client)
    current_activity.hydrate(
        dict(name='activity',
             domain='domain',
             requires=[],
             on_exception=lambda actor, exception: print(exception),
             tasks=[lambda: dict('val')]))
Beispiel #5
0
def test_hydrate_activity(monkeypatch):
    """Test the hydratation of an activity.
    """

    monkeypatch.setattr(activity.Activity, '__init__', lambda self: None)
    current_activity = activity.Activity()
    current_activity.hydrate(
        dict(name='activity',
             domain='domain',
             requires=[],
             tasks=[lambda: dict('val')]))
Beispiel #6
0
def test_execute_activity(monkeypatch):
    """Test the execution of an activity.
    """

    monkeypatch.setattr(activity.Activity, '__init__', lambda self: None)
    resp = dict(task_resp='something')
    custom_task = MagicMock(return_value=resp)

    current_activity = activity.Activity()
    current_activity.tasks = task.SyncTasks(custom_task)

    val = current_activity.execute_activity(dict(foo='bar'))

    assert custom_task.called
    assert val == resp
Beispiel #7
0
def activity_run(monkeypatch,
                 poll=None,
                 complete=None,
                 fail=None,
                 execute=None):
    """Create an activity.
    """

    monkeypatch.setattr(activity.Activity, '__init__', lambda self: None)

    current_activity = activity.Activity()
    poll = poll or dict()

    monkeypatch.setattr(current_activity, 'execute_activity', execute
                        or MagicMock(return_value=dict()))
    monkeypatch.setattr(current_activity, 'poll', MagicMock(return_value=poll))
    monkeypatch.setattr(current_activity, 'complete', complete or MagicMock())
    monkeypatch.setattr(current_activity, 'fail', fail or MagicMock())
    return current_activity
Beispiel #8
0
def test_execute_activity(monkeypatch, boto_client):
    """Test the execution of an activity.
    """

    monkeypatch.setattr(activity.ActivityExecution, 'heartbeat',
                        lambda self: None)

    resp = dict(task_resp='something')
    custom_task = MagicMock(return_value=resp)

    current_activity = activity.Activity(boto_client)
    current_activity.runner = runner.Sync(custom_task)

    val = current_activity.execute_activity(
        activity.ActivityExecution(boto_client, 'activityId', 'taskToken',
                                   '{"context": "value"}'))

    assert custom_task.called
    assert val == resp
Beispiel #9
0
def test_synchronous_tasks(monkeypatch):
    """Test synchronous tasks.
    """

    monkeypatch.setattr(activity.Activity, '__init__', lambda self: None)
    monkeypatch.setattr(activity.Activity, 'heartbeat', lambda self: None)

    resp = dict(foo='bar')
    current_runner = runner.Sync(MagicMock(), MagicMock(return_value=resp))
    current_activity = activity.Activity()
    current_activity.hydrate(dict(runner=current_runner))

    result = current_runner.execute(current_activity, EMPTY_CONTEXT)

    assert len(current_runner.tasks) == 2

    for current_task in task.flatten(current_runner.tasks, EMPTY_CONTEXT):
        assert current_task.called

    assert resp == result
Beispiel #10
0
def activity_run(monkeypatch,
                 boto_client,
                 poll=None,
                 complete=None,
                 fail=None,
                 execute=None):
    """Create an activity.
    """

    current_activity = activity.Activity(boto_client)
    poll = poll or dict()

    monkeypatch.setattr(current_activity, 'execute_activity', execute
                        or MagicMock(return_value=dict()))
    monkeypatch.setattr(boto_client, 'poll_for_activity_task',
                        MagicMock(return_value=poll))
    monkeypatch.setattr(boto_client, 'respond_activity_task_completed',
                        complete or MagicMock())
    monkeypatch.setattr(boto_client, 'respond_activity_task_failed', fail
                        or MagicMock())

    return current_activity