def test_handle_request_2_e(self): """ Test that the ``handle_request()`` method returns a success response has a valid serialized :class:`SchedulerRequestResponse` embedded in the data attribute, and that this scheduler response is also set as successful, when the session and authorization are good, and the request to the scheduler is appropriate and successful (simulated in testing via a dummy scheduler client). """ ip_addr = self._session_ip_1 user = self._user_1 session = self.session_manager.create_session(ip_address=ip_addr, username=user) request = NWMRequest(session_secret=session.session_secret, version=2.0) dummy_scheduler_client = DummySchedulerClient(test_successful=True) self.handler._scheduler_client = dummy_scheduler_client response = asyncio.run(self.handler.handle_request(request=request), debug=True) data_key = NWMRequestResponse.get_data_dict_key_for_scheduler_response( ) deserialized_json_dict = response.data[data_key] scheduler_response = SchedulerRequestResponse.factory_init_from_deserialized_json( deserialized_json_dict) self.assertTrue(scheduler_response.success)
def test_handle_request_1_a(self): """ Test that the ``handle_request()`` method returns a failure response if the session for the secret cannot be found. """ ip_addr = self._session_ip_1 user = self._user_1 session = self.session_manager.create_session(ip_address=ip_addr, username=user) request = NWMRequest(session_secret=session.session_secret, version=2.0) # Now, remove the session from the manager self.session_manager.remove_session(session) response = asyncio.run(self.handler.handle_request(request=request), debug=True) self.assertFalse(response.success)
def test_handle_request_3_c(self): """ Test that the ``handle_request()`` method returns a failure response with the error job_id value when the session and authorization are good, but the request to the scheduler is not successful (simulated in testing via a dummy scheduler client). """ ip_addr = self._session_ip_1 user = self._user_1 session = self.session_manager.create_session(ip_address=ip_addr, username=user) request = NWMRequest(session_secret=session.session_secret, version=2.0) dummy_scheduler_client = DummySchedulerClient(test_successful=False) self.handler._scheduler_client = dummy_scheduler_client response = asyncio.run(self.handler.handle_request(request=request), debug=True) self.assertEquals(response.job_id, -1)
def test_handle_request_2_a(self): """ Test that the ``handle_request()`` method returns a success response when the session and authorization are good, and the request to the scheduler is appropriate and successful (simulated in testing via a dummy scheduler client). """ ip_addr = self._session_ip_1 user = self._user_1 session = self.session_manager.create_session(ip_address=ip_addr, username=user) request = NWMRequest(session_secret=session.session_secret, version=2.0) dummy_scheduler_client = DummySchedulerClient(test_successful=True) self.handler._scheduler_client = dummy_scheduler_client response = asyncio.run(self.handler.handle_request(request=request), debug=True) self.assertTrue(response.success)
def test_handle_request_1_c(self): """ Test that the ``handle_request()`` method returns an appropriate failure response with the correct failure reason if the user is not authorized. """ ip_addr = self._session_ip_1 user = self._user_1 session = self.session_manager.create_session(ip_address=ip_addr, username=user) request = NWMRequest(session_secret=session.session_secret, version=2.0) #self.session_manager._authorizer = self.fail_authorizer self.handler._authorizer = self.fail_authorizer response = asyncio.run(self.handler.handle_request(request=request), debug=True) self.assertEquals(response.reason, InitRequestResponseReason.UNAUTHORIZED.name)
def test_handle_request_1_b(self): """ Test that the ``handle_request()`` method returns an appropriate failure response with the correct failure reason if the session for the secret cannot be found. """ ip_addr = self._session_ip_1 user = self._user_1 session = self.session_manager.create_session(ip_address=ip_addr, username=user) request = NWMRequest(session_secret=session.session_secret, version=2.0) # Now, remove the session from the manager self.session_manager.remove_session(session) response = asyncio.run(self.handler.handle_request(request=request), debug=True) self.assertEqual( response.reason, InitRequestResponseReason.UNRECOGNIZED_SESSION_SECRET.name)
def test_handle_request_3_d(self): """ Test that the ``handle_request()`` method returns a failure response with a valid serialized :class:`SchedulerRequestResponse` embedded in the data attribute, when the session and authorization are good, but the request to the scheduler are not successful (simulated in testing via a dummy scheduler client). """ ip_addr = self._session_ip_1 user = self._user_1 session = self.session_manager.create_session(ip_address=ip_addr, username=user) request = NWMRequest(session_secret=session.session_secret, version=2.0) dummy_scheduler_client = DummySchedulerClient(test_successful=False) self.handler._scheduler_client = dummy_scheduler_client response = asyncio.run(self.handler.handle_request(request=request), debug=True) sched_resp = SchedulerRequestResponse.factory_init_from_deserialized_json( response.data['scheduler_response']) self.assertTrue(isinstance(sched_resp, SchedulerRequestResponse))
def _deserialize_model_request(self, model_request_hash: dict, parameters_hash: dict, **kwargs) -> MaaSRequest: """ Deserialized the serialized data for a model request, in the form of Redis hashes/mappings, into a ::class:`MaaSRequest` object. Essentially, this performs the reverse of ::method:`serialize_model_request`. The method supports optional keyword arguments. In particular, these are intended to provide future support for controlling the specific subtype of ::class:`MaaSRequest` that is created. For now, only ::class:`NWMRequest` objects are supported. Parameters ---------- model_request_hash : dict The Redis hash value for the inner ::class:`MaaSRequest` object of the scheduler request. parameters_hash : dict The ``parameters`` of the inner ::class:`MaaSRequest` object of the request. kwargs Optional keyword arguments. Returns ------- MaaSRequest The deserialize model request object. """ # TODO: consider whether there needs to be any conversion done to values (e.g., integer string to actual int) parameters = parameters_hash return NWMRequest(session_secret=model_request_hash['session_secret'], version=float(model_request_hash['version']), output=model_request_hash['output'], parameters=parameters)