Пример #1
0
def test_connect_room_connected_other(httpretty, room_name, service_type,
                                      connected):
    RavemPlugin.settings.set("api_endpoint", RAVEM_TEST_API_ENDPOINT)
    different_vc_room = 123
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + "rooms/details",
        status=200,
        content_type="application/json",
        body=json.dumps({
            "roomName":
            room_name,
            "deviceType":
            service_type,
            "services": [{
                "status": connected,
                "eventName": different_vc_room,
                "name": "videoconference",
            }],
        }),
    )

    vc_room = MagicMock()
    vc_room.type = service_type

    with pytest.raises(RavemException) as excinfo:
        connect_room(room_name, vc_room)

    assert str(excinfo.value) == \
        f"The room {room_name} is connected to another videoconference room: {different_vc_room}"
    assert excinfo.value.reason == "connected-other"
def test_unknown_service(httpretty):
    RavemPlugin.settings.set("api_endpoint", RAVEM_TEST_API_ENDPOINT)
    room_name = 'test'
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + "rooms/details",
        status=200,
        content_type="application/json",
        body=json.dumps({
            "roomName":
            room_name,
            "deviceType":
            'zoom',
            "services": [{
                "status": False,
                "eventName": None,
                "name": "videoconference",
            }],
        }),
    )
    vc_room = MagicMock()
    vc_room.type = 'foo'

    with pytest.raises(RavemException) as excinfo:
        connect_room(room_name, vc_room, force=True)

    assert str(excinfo.value
               ) == f"{vc_room.type} is not supported in the room {room_name}"
Пример #3
0
def test_connect_room_force_fail(caplog, httpretty, room_name, service_type,
                                 connected, data):
    RavemPlugin.settings.set("api_endpoint", RAVEM_TEST_API_ENDPOINT)
    RavemPlugin.settings.set("polling_limit", 3)
    RavemPlugin.settings.set("polling_interval", 100)
    different_vc_room = "different_vc_room"
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + "rooms/details",
        status=200,
        content_type="application/json",
        body=json.dumps({
            "roomName":
            room_name,
            "deviceType":
            service_type,
            "services": [{
                "status": connected,
                "eventName": different_vc_room,
                "name": "videoconference",
            }],
        }),
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + service_type + "/disconnect",
        status=200,
        content_type="application/json",
        body=json.dumps({"result": "OK"}),
    )

    vc_room = MagicMock()
    vc_room.type = service_type
    vc_room.data = data

    with pytest.raises(RavemException) as excinfo:
        connect_room(room_name, vc_room, force=True)

    assert (
        str(excinfo.value) ==
        f"Failed to disconnect the room {room_name} from the videoconference room {different_vc_room} "
        "with an unknown error")
    log = extract_logs(caplog, one=True, name="indico.plugin.ravem")
    assert (
        log.message ==
        f"Failed to disconnect the room {room_name} from the videoconference room {different_vc_room} "
        "with an unknown error")

    assert len(httpretty.httpretty.latest_requests
               ) == 2 + RavemPlugin.settings.get("polling_limit")
    request = httpretty.httpretty.latest_requests[1]
    assert request.path.startswith(RAVEM_TEST_PATH + service_type +
                                   "/disconnect")
    assert request.parsed_body == {"roomName": room_name}
Пример #4
0
def test_connect_room(httpretty, room_name, status, endpoint, vidyo_id, data):
    RavemPlugin.settings.set('api_endpoint', RAVEM_TEST_API_ENDPOINT)
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + 'getstatus',
        status=200,
        content_type='application/json',
        body=json.dumps({
            'result': {
                'name': room_name,
                'vc_endpoint_legacy_hostname': data.get('legacy_hostname'),
                'vc_endpoint_vidyo_username': data.get('vidyo_username'),
                'vc_endpoint_legacy_ip': data.get('legacy_ip'),
                'vc_endpoint_vidyo_extension': data.get('vidyo_extension'),
                'services': [{
                    'status': status,
                    'event_name': data.get('event_name'),
                    'name': 'videoconference',
                    'event_type': data.get('event_type')
                }],
                'common_name': data.get('common_name')
            }})
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + 'videoconference/connect',
        status=200,
        content_type='application/json',
        body=json.dumps({'result': 'OK'})
    )

    vc_room = MagicMock()
    vc_room.name = data.get('event_name')
    vc_room.data = {'vidyo_id': vidyo_id}

    connect_room(room_name, vc_room)

    assert len(httpretty.httpretty.latest_requests) == 2
    status_request = httpretty.httpretty.latest_requests[0]
    request = httpretty.last_request()

    assert request.path.startswith(RAVEM_TEST_PATH + 'videoconference/connect')
    assert request.querystring == {
        'vidyo_room_id': [vidyo_id],
        'query': [endpoint()],
    }

    assert status_request.path.startswith(RAVEM_TEST_PATH + 'getstatus')
    assert status_request.querystring == {
        'service_name': ['videoconference'],
        'where': ['room_name'],
        'value': [room_name]
    }
Пример #5
0
 def _process(self):
     force = request.args.get('force') == '1'
     try:
         connect_room(self.room_name, self.event_vc_room.vc_room, force=force,
                      room_special_name=self.room_special_name)
     except RavemOperationException as err:
         response = {'success': False, 'reason': err.reason, 'message': err.message}
     except RavemException as err:
         response = {'success': False, 'reason': 'operation-failed', 'message': err.message}
     else:
         response = {'success': True}
     return jsonify(response)
Пример #6
0
def test_connect_room_already_connected(httpretty, room_name, status, vidyo_id, data):
    RavemPlugin.settings.set('api_endpoint', RAVEM_TEST_API_ENDPOINT)
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + 'getstatus',
        status=200,
        content_type='application/json',
        body=json.dumps({
            'result': {
                'name': room_name,
                'vc_endpoint_legacy_hostname': data.get('legacy_hostname'),
                'vc_endpoint_vidyo_username': data.get('vidyo_username'),
                'vc_endpoint_legacy_ip': data.get('legacy_ip'),
                'vc_endpoint_vidyo_extension': data.get('vidyo_extension'),
                'services': [{
                    'status': status,
                    'event_name': data.get('event_name'),
                    'name': 'videoconference',
                    'event_type': data.get('event_type')
                }],
                'common_name': data.get('common_name')
            }})
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + 'videoconference/connect',
        status=200,
        content_type='application/json',
        body=json.dumps({'error': 'Call already disconnected'})
    )

    vc_room = MagicMock()
    vc_room.name = data.get('event_name')
    vc_room.data = {'vidyo_id': vidyo_id}

    with pytest.raises(RavemOperationException) as excinfo:
        connect_room(room_name, vc_room)

    assert excinfo.value.message == "The room {0} is already connected to the vidyo room {1}" \
                                    .format(room_name, vc_room.name)
    assert excinfo.value.reason == 'already-connected'

    assert len(httpretty.httpretty.latest_requests) == 1
    status_request = httpretty.last_request()

    assert status_request.path.startswith(RAVEM_TEST_PATH + 'getstatus')
    assert status_request.querystring == {
        'service_name': ['videoconference'],
        'where': ['room_name'],
        'value': [room_name]
    }
Пример #7
0
def test_connect_room(httpretty, room_name, service_type, connected, data):
    RavemPlugin.settings.set("api_endpoint", RAVEM_TEST_API_ENDPOINT)
    service_api = get_api(service_type)
    vc_room_id = service_api.get_room_id(data)
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + "rooms/details",
        status=200,
        content_type="application/json",
        body=json.dumps({
            "roomName":
            room_name,
            "deviceType":
            service_type,
            "services": [{
                "status": connected,
                "eventName": None,
                "name": "videoconference",
            }],
        }),
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + service_type + "/connect",
        status=200,
        content_type="application/json",
        body=json.dumps({"result": "OK"}),
    )

    vc_room = MagicMock()
    vc_room.data = data
    vc_room.type = service_type

    connect_room(room_name, vc_room)

    assert len(httpretty.httpretty.latest_requests) == 2
    status_request = httpretty.httpretty.latest_requests[0]
    request = httpretty.last_request()

    assert request.path.startswith(RAVEM_TEST_PATH + service_type + "/connect")
    assert request.parsed_body == {
        "meetingId": vc_room_id,
        "roomName": room_name
    }

    assert status_request.path.startswith(RAVEM_TEST_PATH + "rooms/details")
    assert status_request.querystring == {
        "where": ["room_name"],
        "value": [room_name]
    }
Пример #8
0
 def _process(self):
     force = request.args.get('force') == '1'
     try:
         success = connect_room(self.room.name, self.event_vc_room.vc_room, force=force,
                                room_verbose_name=self.room.verbose_name)
         response = {'success': success}
     except RavemException as err:
         response = {'success': False, 'reason': err.reason, 'message': str(err)}
     return jsonify(response)
Пример #9
0
def test_connect_room_force_error(caplog, httpretty, room_name, service_type,
                                  connected, data):
    RavemPlugin.settings.set("api_endpoint", RAVEM_TEST_API_ENDPOINT)
    error_message = "Some internal error"
    different_vc_room = "different_vc_room"
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + "rooms/details",
        status=200,
        content_type="application/json",
        body=json.dumps({
            "roomName":
            room_name,
            "deviceType":
            service_type,
            "services": [{
                "status": connected,
                "eventName": different_vc_room,
                "name": "videoconference",
            }],
        }),
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + service_type + "/disconnect",
        status=200,
        content_type="application/json",
        body=json.dumps({"error": error_message}),
    )

    vc_room = MagicMock()
    vc_room.type = service_type
    vc_room.data = data

    with pytest.raises(RavemException) as excinfo:
        connect_room(room_name, vc_room, force=True)

    assert (
        str(excinfo.value) ==
        f"Failed to disconnect the room {room_name} from the videoconference room "
        f"{different_vc_room} with error: {error_message}")
    log = extract_logs(caplog, one=True, name="indico.plugin.ravem")
    assert log.message == str(excinfo.value)
Пример #10
0
def test_connect_room_already_connected(httpretty, room_name, service_type,
                                        connected, data):
    RavemPlugin.settings.set("api_endpoint", RAVEM_TEST_API_ENDPOINT)
    service_api = get_api(service_type)
    vc_room_id = service_api.get_room_id(data)
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + "rooms/details",
        status=200,
        content_type="application/json",
        body=json.dumps({
            "roomName":
            room_name,
            "deviceType":
            service_type,
            "services": [{
                "status": connected,
                "eventName": vc_room_id,
                "name": "videoconference",
            }],
        }),
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + service_type + "/connect",
        status=200,
        content_type="application/json",
        body=json.dumps({"error": "Call already disconnected"}),
    )

    vc_room = MagicMock()
    vc_room.type = service_type
    vc_room.data = data

    with pytest.raises(RavemException) as excinfo:
        connect_room(room_name, vc_room)

    assert str(
        excinfo.value
    ) == f"The room {room_name} is already connected to the videoconference room {vc_room_id}"
    assert excinfo.value.reason == "already-connected"
Пример #11
0
def test_connect_room_force(httpretty, room_name, status, endpoint, vidyo_id, data):
    RavemPlugin.settings.set('api_endpoint', RAVEM_TEST_API_ENDPOINT)
    RavemPlugin.settings.set('polling_limit', 3)
    RavemPlugin.settings.set('polling_interval', 100)
    different_vc_room = 'different_vc_room'
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + 'getstatus',
        responses=[
            httpretty.Response(
                status=200,
                content_type='application/json',
                body=json.dumps({
                    'result': {
                        'name': room_name,
                        'vc_endpoint_legacy_hostname': data.get('legacy_hostname'),
                        'vc_endpoint_vidyo_username': data.get('vidyo_username'),
                        'vc_endpoint_legacy_ip': data.get('legacy_ip'),
                        'vc_endpoint_vidyo_extension': data.get('vidyo_extension'),
                        'services': [{
                            'status': status,
                            'event_name': different_vc_room,
                            'name': 'videoconference',
                            'event_type': data.get('event_type')
                        }],
                        'common_name': data.get('common_name')
                    }})
            )] * RavemPlugin.settings.get('polling_limit') + [
            httpretty.Response(
                status=200,
                content_type='application/json',
                body=json.dumps({
                    'result': {
                        'name': room_name,
                        'vc_endpoint_legacy_hostname': data.get('legacy_hostname'),
                        'vc_endpoint_vidyo_username': data.get('vidyo_username'),
                        'vc_endpoint_legacy_ip': data.get('legacy_ip'),
                        'vc_endpoint_vidyo_extension': data.get('vidyo_extension'),
                        'services': [{
                            'status': 0,
                            'event_name': None,
                            'name': 'videoconference',
                            'event_type': None
                        }],
                        'common_name': data.get('common_name')
                    }})
            )
        ]
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + 'videoconference/disconnect',
        status=200,
        content_type='application/json',
        body=json.dumps({'result': 'OK'})
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + 'videoconference/connect',
        status=200,
        content_type='application/json',
        body=json.dumps({'result': 'OK'})
    )

    vc_room = MagicMock()
    vc_room.name = data.get('event_name')
    vc_room.data = {'vidyo_id': vidyo_id}

    connect_room(room_name, vc_room, force=True)

    # status, disconnect, polling attempts and connect
    number_of_requests = 2 + RavemPlugin.settings.get('polling_limit') + 1
    assert len(httpretty.httpretty.latest_requests) == number_of_requests
    for i, status_request in enumerate(httpretty.httpretty.latest_requests):
        if i == 1 or i == number_of_requests - 1:  # disconnect/connect request
            continue

        assert status_request.path.startswith(RAVEM_TEST_PATH + 'getstatus')
        assert status_request.querystring == {
            'service_name': ['videoconference'],
            'where': ['room_name'],
            'value': [room_name]
        }

    disconnect_request = httpretty.httpretty.latest_requests[1]
    assert disconnect_request.path.startswith(RAVEM_TEST_PATH + 'videoconference/disconnect')
    query = {
        'type': [data.get('event_type')],
        'where': ['room_name'],
        'value': [room_name],
    }
    if data.get('event_type') == 'vidyo':
        query['vidyo_room_name'] = [different_vc_room]
    assert disconnect_request.querystring == query

    request = httpretty.last_request()
    assert request.path.startswith(RAVEM_TEST_PATH + 'videoconference/connect')
    assert request.querystring == {
        'vidyo_room_id': [vidyo_id],
        'query': [endpoint()],
    }
Пример #12
0
def test_connect_room_force_error(caplog, httpretty, room_name, status, data):
    RavemPlugin.settings.set('api_endpoint', RAVEM_TEST_API_ENDPOINT)
    error_message = 'Some internal error'
    different_vc_room = 'different_vc_room'
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + 'getstatus',
        status=200,
        content_type='application/json',
        body=json.dumps({
            'result': {
                'name': room_name,
                'vc_endpoint_legacy_hostname': data.get('legacy_hostname'),
                'vc_endpoint_vidyo_username': data.get('vidyo_username'),
                'vc_endpoint_legacy_ip': data.get('legacy_ip'),
                'vc_endpoint_vidyo_extension': data.get('vidyo_extension'),
                'services': [{
                    'status': status,
                    'event_name': different_vc_room,
                    'name': 'videoconference',
                    'event_type': data.get('event_type')
                }],
                'common_name': data.get('common_name')
            }})
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + 'videoconference/disconnect',
        status=200,
        content_type='application/json',
        body=json.dumps({'error': error_message})
    )

    vc_room = MagicMock()
    vc_room.name = data.get('event_name')

    with pytest.raises(RavemException) as excinfo:
        connect_room(room_name, vc_room, force=True)

    assert excinfo.value.message == "Failed to disconnect the room {0} from the Vidyo room {1} with error: {2}" \
                                    .format(room_name, different_vc_room, error_message)
    log = extract_logs(caplog, one=True, name='indico.plugin.ravem')
    assert log.message == "Failed to disconnect the room {0} from the Vidyo room {1} with error: {2}" \
                          .format(room_name, different_vc_room, error_message)

    assert len(httpretty.httpretty.latest_requests) == 2
    status_request = httpretty.httpretty.latest_requests[0]
    request = httpretty.last_request()

    assert request.path.startswith(RAVEM_TEST_PATH + 'videoconference/disconnect')
    query = {
        'type': [data.get('event_type')],
        'where': ['room_name'],
        'value': [room_name],
    }
    if data.get('event_type') == 'vidyo':
        query['vidyo_room_name'] = [different_vc_room]
    assert request.querystring == query

    assert status_request.path.startswith(RAVEM_TEST_PATH + 'getstatus')
    assert status_request.querystring == {
        'service_name': ['videoconference'],
        'where': ['room_name'],
        'value': [room_name]
    }
Пример #13
0
def test_connect_room_force(httpretty, room_name, service_type, connected,
                            data):
    RavemPlugin.settings.set("api_endpoint", RAVEM_TEST_API_ENDPOINT)
    RavemPlugin.settings.set("polling_limit", 3)
    RavemPlugin.settings.set("polling_interval", 100)
    service_api = get_api(service_type)
    vc_room_id = service_api.get_room_id(data)
    different_vc_room = "different_vc_room"
    httpretty.register_uri(
        httpretty.GET,
        RAVEM_TEST_API_ENDPOINT + "rooms/details",
        status=200,
        content_type="application/json",
        responses=[
            httpretty.Response(status=200,
                               content_type='application/json',
                               body=json.dumps({
                                   "roomName":
                                   room_name,
                                   "deviceType":
                                   service_type,
                                   "services": [{
                                       "status": connected,
                                       "eventName": different_vc_room,
                                       "name": "videoconference",
                                   }],
                               }))
        ] * RavemPlugin.settings.get("polling_limit") + [
            httpretty.Response(status=200,
                               content_type='application/json',
                               body=json.dumps({
                                   "roomName":
                                   room_name,
                                   "deviceType":
                                   service_type,
                                   "services": [{
                                       "status": False,
                                       "eventName": None,
                                       "name": "videoconference",
                                   }],
                               }))
        ])
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + service_type + "/disconnect",
        status=200,
        content_type="application/json",
        body=json.dumps({"result": "OK"}),
    )
    httpretty.register_uri(
        httpretty.POST,
        RAVEM_TEST_API_ENDPOINT + service_type + "/connect",
        status=200,
        content_type="application/json",
        body=json.dumps({"result": "OK"}),
    )

    vc_room = MagicMock()
    vc_room.type = service_type
    vc_room.data = data

    connect_room(room_name, vc_room, force=True)

    # status, disconnect, polling attempts and connect
    number_of_requests = 2 + RavemPlugin.settings.get("polling_limit") + 1
    assert len(httpretty.httpretty.latest_requests) == number_of_requests

    disconnect_request = httpretty.httpretty.latest_requests[1]
    assert disconnect_request.path.startswith(RAVEM_TEST_PATH + service_type +
                                              "/disconnect")
    assert disconnect_request.parsed_body == {"roomName": room_name}

    request = httpretty.last_request()
    assert request.path.startswith(RAVEM_TEST_PATH + service_type + "/connect")
    assert request.parsed_body == {
        "roomName": room_name,
        "meetingId": vc_room_id
    }