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); }
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); }