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])
예제 #2
0
    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)
예제 #4
0
    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