def test_specify_service_in_request(self): service_count = 10 request_count = 100 request_received_count = [0] request_to_wrong_service_id_count = [0] requests_by_service = {} request_lock = threading.Lock() topic = UuidGenerator.generate_id_as_string() with self.create_client() as service_client: service_client.connect() def my_request(callback_service_id, request): with request_lock: request_received_count[0] += 1 if request.service_id and \ (request.service_id != callback_service_id): request_to_wrong_service_id_count[0] += 1 if request.service_id in requests_by_service: requests_by_service[request.service_id] += 1 else: requests_by_service[request.service_id] = 1 response = Response(request) service_client.send_response(response) def create_service_reg_info(): reg_info = ServiceRegistrationInfo( service_client, "registry_specified_service_id_test") callback = RequestCallback() callback.on_request = \ lambda request: my_request(reg_info.service_id, request) reg_info.add_topic(topic, callback) service_client.register_service_sync(reg_info, self.DEFAULT_TIMEOUT) return reg_info reg_infos = [create_service_reg_info() for _ in range(service_count)] with self.create_client() as request_client: request_client.connect() for _ in range(0, request_count): request = Request(topic) request.service_id = reg_infos[0].service_id response = request_client.sync_request( request, timeout=self.RESPONSE_WAIT) self.assertNotIsInstance(response, ErrorResponse) self.assertEqual(request.message_id, response.request_message_id) with request_lock: self.assertEqual(0, request_to_wrong_service_id_count[0]) self.assertEqual(request_count, request_received_count[0]) self.assertEqual(1, len(requests_by_service)) self.assertIn(reg_infos[0].service_id, requests_by_service) self.assertEqual( request_count, requests_by_service[reg_infos[0].service_id])
def test_client_receives_error_response_on_request_to_unknown_service(self): """ The idea of this test is to send a sync request to an unknown service and get a "unable to locate service" error response. """ with self.create_client() as client: test_topic = '/test/doesntexists/' + client.config._client_id client.connect() time.sleep(2) self.assertTrue(client.connected) # Send request thru dxl fabric to a service which doesn't exists msg = Request(destination_topic=test_topic) msg.service_id = UuidGenerator.generate_id_as_string() response = client.sync_request(msg, 1) # Check that we have an error response for our request self.assertTrue(isinstance(response, ErrorResponse)) self.assertEqual(response.service_id, msg.service_id)
def test_request_and_response(self): reply_to_channel = "/mcafee/client/" + UuidGenerator.generate_id_as_string() service_guid = UuidGenerator.generate_id_as_string() source_client_guid = UuidGenerator.generate_id_as_string() source_broker_guid = UuidGenerator.generate_id_as_string() request = Request(destination_topic="") request.reply_to_channel = reply_to_channel request.service_id = service_guid request._source_client_id = source_client_guid request._source_broker_id = source_broker_guid request.broker_ids = ["{66000000-0000-0000-0000-000000000001}", "{66000000-0000-0000-0000-000000000002}", "{66000000-0000-0000-0000-000000000003}"] request.client_ids = ["{25000000-0000-0000-0000-000000000001}", "{25000000-0000-0000-0000-000000000002}", "{25000000-0000-0000-0000-000000000003}"] request.payload = "REQUEST".encode() PP.pprint(vars(request)) message = request._to_bytes() PP.pprint(message) self.assertEqual(source_client_guid, request.source_client_id) result = Message._from_bytes(message) PP.pprint(vars(result)) response = Response(request=request) response.payload = "RESPONSE".encode() PP.pprint(vars(response)) message = response._to_bytes() PP.pprint(message) result = Message._from_bytes(message) PP.pprint(vars(result)) self.assertEqual(Message.MESSAGE_TYPE_RESPONSE, result.message_type)
def test_request(self): reply_to_channel = "/mcafee/client/" + UuidGenerator.generate_id_as_string() service_guid = UuidGenerator.generate_id_as_string() source_client_guid = UuidGenerator.generate_id_as_string() source_broker_guid = UuidGenerator.generate_id_as_string() request = Request(destination_topic="") request.reply_to_topic = reply_to_channel request.service_id = service_guid request._source_client_id = source_client_guid request._source_broker_id = source_broker_guid request.broker_ids = ["{66000000-0000-0000-0000-000000000001}", "{66000000-0000-0000-0000-000000000002}", "{66000000-0000-0000-0000-000000000003}"] request.client_ids = ["{25000000-0000-0000-0000-000000000001}", "{25000000-0000-0000-0000-000000000002}", "{25000000-0000-0000-0000-000000000003}"] request.payload = str.encode("REQUEST") pp.pprint(vars(request)) message = request._to_bytes() pp.pprint(message) result = Message._from_bytes(message) pp.pprint(vars(result)) assert result.reply_to_topic == reply_to_channel assert result.service_id == service_guid assert result.source_client_id == source_client_guid assert result.source_broker_id == source_broker_guid assert result.broker_ids == ["{66000000-0000-0000-0000-000000000001}", "{66000000-0000-0000-0000-000000000002}", "{66000000-0000-0000-0000-000000000003}"] assert result.client_ids == ["{25000000-0000-0000-0000-000000000001}", "{25000000-0000-0000-0000-000000000002}", "{25000000-0000-0000-0000-000000000003}"] assert result.payload == str.encode("REQUEST") assert result.message_type == Message.MESSAGE_TYPE_REQUEST