Esempio n. 1
0
        public async Task TestRpcSuccessWithTimeout()
        {
            var requestTopic  = "command/request";
            var responseTopic = "command/response";
            var request       = new TestRpcMessage()
            {
                CommandId = Guid.NewGuid()
            };
            var rpcClient        = _factory.Services.GetService <RpcMqttClient>();
            var clientRepository = _factory.Services.GetService <MqttClientRepository>();
            var pushDeviceClient = await clientRepository.Subscribe("_", (s, bytes) => Task.CompletedTask);

            var deviceClient = clientRepository.Subscribe(requestTopic, messageHandler: (s, bytes)
                                                          => pushDeviceClient.PublishAsync(responseTopic, bytes.DeserializeJsonBytes <TestRpcMessage>()));

            var result = await rpcClient
                         .ProcessRpcRequest <TestRpcMessage, TestRpcMessage>(responseTopic, requestTopic, request, TimeSpan.FromSeconds(5))
                         .ConfigureAwait(false);


            Assert.Equal(result.CommandId, request.CommandId);
        }
Esempio n. 2
0
        public async Task TestRpcFailedWithTimeout()
        {
            var requestTopic  = "command/request";
            var responseTopic = "command/response";
            var request       = new TestRpcMessage()
            {
                CommandId = Guid.NewGuid()
            };
            var rpcClient        = _factory.Services.GetService <RpcMqttClient>();
            var clientRepository = _factory.Services.GetService <MqttClientRepository>();
            var pushDeviceClient = await clientRepository.Subscribe("_", (s, bytes) => Task.CompletedTask);

            var deviceClient = clientRepository.Subscribe(requestTopic, (s, bytes)
                                                          => pushDeviceClient.PublishAsync(responseTopic, bytes.DeserializeJsonBytes <TestRpcMessage>()));


            var callTask = rpcClient
                           .ProcessRpcRequest <TestRpcMessage, TestRpcMessage>(responseTopic, requestTopic, request,
                                                                               TimeSpan.FromMilliseconds(10));

            var exception = await Assert.ThrowsAsync <TimeoutException>(async() => await callTask);

            Assert.Contains(request.CommandId.ToString(), exception.Message);
        }