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}"
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}
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] }
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)
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] }
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] }
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)
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)
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"
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()], }
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] }
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 }