コード例 #1
0
def test_handle_set_should_succeed(sender, device_state):
    with get_actuator_agent(vip_rpc_call_res=MockedAsyncResult({"foo": "bar"}), device_state=device_state) as actuator_agent:

        actuator_agent.handle_set(PEER, sender, BUS, SET_TOPIC, HEADERS, MESSAGE)

        actuator_agent.vip.rpc.call.assert_called_once()
        actuator_agent.vip.pubsub.publish.assert_called()
コード例 #2
0
def test_handle_get_should_succeed():
    with get_actuator_agent() as actuator_agent:
        actuator_agent.handle_get(PEER, SENDER, BUS, GET_TOPIC, HEADERS,
                                  MESSAGE)

        actuator_agent.vip.rpc.call.assert_called_once()
        actuator_agent.vip.pubsub.publish.assert_called_once()
コード例 #3
0
def test_request_new_schedule_should_succeed():
    with get_actuator_agent() as actuator_agent:
        result = actuator_agent.request_new_schedule(REQUESTER_ID, TASK_ID,
                                                     PRIORITY_LOW,
                                                     TIME_SLOT_REQUESTS)

        assert result["result"] == SUCCESS
コード例 #4
0
def test_get_point_should_succeed(topic, point):
    with get_actuator_agent(
            vip_rpc_call_res=MockedAsyncResult(10.0)) as actuator_agent:
        result = actuator_agent.get_point(topic, point=point)

        actuator_agent.vip.rpc.call.assert_called_once()
        assert result is not None
コード例 #5
0
def test_set_multiple_points_should_raise_lock_error_on_empty_devices():
    with pytest.raises(LockError):
        requester_id = "requester-id-1"
        topic_values = [("foo/bar", "roma_value")]

        with get_actuator_agent(
                vip_message_peer=requester_id) as actuator_agent:
            actuator_agent.set_multiple_points("request-id-1", topic_values)
コード例 #6
0
def test_set_multiple_points_should_raise_value_error(invalid_topic_values):
    with pytest.raises(ValueError):
        requester_id = "requester-id-1"

        with get_actuator_agent(
                vip_message_peer=requester_id) as actuator_agent:
            actuator_agent.set_multiple_points("request-id-1",
                                               invalid_topic_values)
コード例 #7
0
def test_get_multiple_points_should_return_errors(invalid_topics):
    with get_actuator_agent() as actuator_agent:

        results, errors = actuator_agent.get_multiple_points(invalid_topics)

        assert isinstance(results, dict)
        assert isinstance(errors, dict)
        assert len(errors) == 1
コード例 #8
0
def test_scrape_all_should_succeed():
    with get_actuator_agent(
            vip_rpc_call_res=MockedAsyncResult({})) as actuator_agent:
        topic = "whan/that/aprille"

        result = actuator_agent.scrape_all(topic)

        assert isinstance(result, dict)
コード例 #9
0
def test_revert_device_should_raise_lock_error_on_empty_devices():
    with pytest.raises(LockError):
        requester_id = "request-id-1"
        topic = "foo/bar"

        with get_actuator_agent(
                vip_message_peer="requester-id-1") as actuator_agent:
            actuator_agent.revert_device(requester_id, topic)
コード例 #10
0
def test_request_cancel_schedule_should_succeed_happy_path():
    true_request_result = RequestResult(True, {}, "")

    with get_actuator_agent(
            cancel_schedule_result=true_request_result) as actuator_agent:
        result = actuator_agent.request_cancel_schedule(REQUESTER_ID, TASK_ID)

        assert result["result"] == SUCCESS
コード例 #11
0
def test_set_point_should_raise_type_error(rpc_peer):
    with pytest.raises(TypeError, match="Agent id must be a nonempty string"):
        requester_id = "requester-id-1"
        topic = "foo/bar"
        value = "some value"
        point = None

        with get_actuator_agent(vip_message_peer=rpc_peer) as actuator_agent:
            actuator_agent.set_point(requester_id, topic, value, point=point)
コード例 #12
0
def test_set_point_should_raise_lock_error_on_non_matching_device():
    with pytest.raises(LockError):
        requester_id = "requester-id-1"
        topic = "foo/bar"
        value = "some value"

        with get_actuator_agent(
                vip_message_peer="some rpc_peer") as actuator_agent:
            actuator_agent.set_point(requester_id, topic, value)
コード例 #13
0
def test_get_multiple_points_should_succeed(topics):
    mocked_rpc_call_res = MockedAsyncResult(({"result": "value"}, {}))
    with get_actuator_agent(
            vip_rpc_call_res=mocked_rpc_call_res) as actuator_agent:
        results, errors = actuator_agent.get_multiple_points(topics)

        assert isinstance(results, dict)
        assert isinstance(errors, dict)
        assert len(errors) == 0
コード例 #14
0
def test_handle_schedule_request_should_succeed_on_cancel_schedule_request_type(success):
    headers = {"type": "CANCEL_SCHEDULE", "requesterID": "id-123", "taskID": "12345"}

    with get_actuator_agent(slot_requests_res=RequestResult(success, {}, "")) as actuator_agent:
        actuator_agent.handle_schedule_request(
            PEER, SENDER, BUS, REQUEST_TOPIC, headers, create_message()
        )

        actuator_agent.vip.pubsub.publish.assert_called()
コード例 #15
0
def test_handle_set_should_handle_type_error_on_invalid_sender(caplog):
    with get_actuator_agent(vip_identity=None) as actuator_agent:
        actuator_agent.handle_set(PEER, None, BUS, SET_TOPIC, HEADERS, MESSAGE)

        actuator_agent.vip.rpc.call.assert_not_called()
        actuator_agent.vip.pubsub.publish.assert_called_once()
        assert (caplog.records[-1].message ==
                "Actuator Agent Error: {'type': 'TypeError', "
                "'value': 'Agent id must be a nonempty string'}")
コード例 #16
0
def test_handle_set_should_handle_lock_error(caplog):
    with get_actuator_agent(vip_identity=None) as actuator_agent:
        actuator_agent.handle_set(PEER, SENDER, BUS, SET_TOPIC, HEADERS, MESSAGE)

        actuator_agent.vip.rpc.call.assert_not_called()
        actuator_agent.vip.pubsub.publish.assert_called_once()
        assert (
            caplog.records[-1].message == "Actuator Agent Error: {'type': 'LockError', "
            "'value': 'caller (sender-1) does not have this lock'}"
        )
コード例 #17
0
def test_request_cancel_schedule_should_fail_on_invalid_task_id():
    false_request_result = RequestResult(False, {}, "TASK_ID_DOES_NOT_EXIST")
    invalid_task_id = "invalid-task-id"

    with get_actuator_agent(
            cancel_schedule_result=false_request_result) as actuator_agent:
        result = actuator_agent.request_cancel_schedule(
            REQUESTER_ID, invalid_task_id)

        assert result["result"] == FAILURE
        assert result["info"] == "TASK_ID_DOES_NOT_EXIST"
コード例 #18
0
def test_set_multiple_points_should_succeed(topic_values, device_state):
    requester_id = "requester-id-1"
    mocked_rpc_call_res = MockedAsyncResult(({}))
    with get_actuator_agent(
            vip_message_peer=requester_id,
            device_state=device_state,
            vip_rpc_call_res=mocked_rpc_call_res) as actuator_agent:
        result = actuator_agent.set_multiple_points("request-id-1",
                                                    topic_values)

        assert result == {}
コード例 #19
0
def test_revert_device_should_raise_lock_error_on_non_matching_requester():
    with pytest.raises(LockError):
        device_state = {
            "foo/bar": DeviceState("requester-id-1", "task-id-1", "anytime")
        }
        requester_id = "request-id-1"
        topic = "foo/bar"

        with get_actuator_agent(vip_message_peer="wrong-requester", device_state=device_state) \
                as actuator_agent:
            actuator_agent.revert_device(requester_id, topic)
コード例 #20
0
def test_handle_get_should_handle_standard_error(caplog):
    with get_actuator_agent(vip_identity=None) as actuator_agent:
        actuator_agent.handle_get(PEER, SENDER, BUS, GET_TOPIC, HEADERS, MESSAGE)

        actuator_agent.vip.rpc.call.assert_not_called()
        actuator_agent.vip.pubsub.publish.assert_called_once()
        assert (
            caplog.records[-1].message
            == "Actuator Agent Error: {'type': 'AttributeError', "
            "'value': \"'ActuatorAgent' object has no attribute 'driver_vip_identity'\"}"
        )
コード例 #21
0
def test_handle_set_should_return_none_on_none_message(caplog):
    with get_actuator_agent(vip_identity=None) as actuator_agent:
        result = actuator_agent.handle_set(PEER, SENDER, BUS, SET_TOPIC, HEADERS, None)

        assert result is None
        actuator_agent.vip.pubsub.publish.assert_called_once()
        actuator_agent.vip.rpc.call.assert_not_called()
        assert (
            caplog.records[-1].message
            == "ValueError: {'type': 'ValueError', 'value': 'missing argument'}"
        )
コード例 #22
0
def test_request_new_schedule_should_fail_on_invalid_priority(
        invalid_priority, expected_info):
    false_request_result = RequestResult(False, {}, expected_info)

    with get_actuator_agent(
            slot_requests_res=false_request_result) as actuator_agent:
        result = actuator_agent.request_new_schedule(REQUESTER_ID, TASK_ID,
                                                     invalid_priority,
                                                     TIME_SLOT_REQUESTS)

        assert result["result"] == FAILURE
        assert result["info"] == expected_info
コード例 #23
0
def test_set_multiple_points_should_raise_lock_error_on_non_matching_requester(
):
    with pytest.raises(LockError):
        requester_id = "wrong-requester"
        topic_values = [("foo/bar", "roma_value")]
        device_state = {
            "foo": DeviceState("requester-id-1", "task-id-1", "anytime")
        }

        with get_actuator_agent(vip_message_peer=requester_id, device_state=device_state) \
                as actuator_agent:
            actuator_agent.set_multiple_points("request-id-1", topic_values)
コード例 #24
0
def test_request_new_schedule_should_fail_on_invalid_taskid(
        task_id, expected_info):
    false_request_result = RequestResult(False, {}, expected_info)

    with get_actuator_agent(
            slot_requests_res=false_request_result) as actuator_agent:
        result = actuator_agent.request_new_schedule(REQUESTER_ID, task_id,
                                                     PRIORITY_LOW,
                                                     TIME_SLOT_REQUESTS)

        assert result["result"] == FAILURE
        assert result["info"] == expected_info
コード例 #25
0
def test_request_new_schedule_should_fail_invalid_time_slot_requests(
        time_slot_request, expected_info):
    false_request_result = RequestResult(False, {}, expected_info)

    with get_actuator_agent(
            slot_requests_res=false_request_result) as actuator_agent:
        result = actuator_agent.request_new_schedule(REQUESTER_ID, TASK_ID,
                                                     PRIORITY_LOW,
                                                     time_slot_request)

        assert result["result"] == FAILURE
        assert result["info"] == expected_info
コード例 #26
0
def test_handle_revert_device_should_succeed():
    device_state = {
        "somedevicepath": DeviceState("sender-1", "task-id-1", "anytime")
    }

    with get_actuator_agent(device_state=device_state,
                            vip_rpc_call_res=MockedAsyncResult({"foo": "bar"})) as actuator_agent:
        actuator_agent.handle_revert_device(
            PEER, SENDER, BUS, REVERT_DEVICE_TOPIC, HEADERS, MESSAGE
        )

        actuator_agent.vip.rpc.call.assert_called_once()
        actuator_agent.vip.pubsub.publish.assert_called_once()
コード例 #27
0
def test_request_new_schedule_should_succeed_when_stop_start_times_overlap():
    start = str(datetime.now())
    end = str(datetime.now() + timedelta(seconds=1))
    end2 = str(datetime.now() + timedelta(seconds=2))
    time_slot_requests = [["fakedriver0", start, end],
                          ["fakedriver0", end, end2]]

    with get_actuator_agent() as actuator_agent:
        result = actuator_agent.request_new_schedule(REQUESTER_ID, TASK_ID,
                                                     PRIORITY_LOW,
                                                     time_slot_requests)

        assert result["result"] == SUCCESS
コード例 #28
0
def test_set_point_should_succeed(point, device_state):
    requester_id = "requester-id-1"
    topic = "foo/bar"
    value = "some value"

    with get_actuator_agent(vip_message_peer=requester_id, device_state=device_state) as \
            actuator_agent:
        result = actuator_agent.set_point(requester_id,
                                          topic,
                                          value,
                                          point=point)

        assert result is not None
コード例 #29
0
def test_handle_schedule_request_should_log_invalid_request_type(
    invalid_request_type, caplog
):
    headers = {
        "type": invalid_request_type,
        "requesterID": "id-123",
        "taskID": "12345",
        "priority": "HIGH",
    }

    with get_actuator_agent(vip_identity=None) as actuator_agent:
        actuator_agent.handle_schedule_request(
            PEER, SENDER, BUS, REQUEST_TOPIC, headers, create_message()
        )

        actuator_agent.vip.pubsub.publish.assert_called()
        assert caplog.records[-1].message == "handle-schedule_request, invalid request type"