public async Task Should_set_exception_on_rpc_error_response() { var reqMsg = new Message(0x100500, 1, new TestRequest {TestId = 1}); var rpcResult = new RpcResult { ReqMsgId = reqMsg.MsgId, Result = new RpcError {ErrorCode = 400, ErrorMessage = "BAD_REQUEST"} }; var resMsg = new Message(0x200600, 2, rpcResult); var request = new Mock<IRequest>(); request.SetupGet(r => r.Message).Returns(reqMsg); var requestsManager = new Mock<IRequestsManager>(); requestsManager.Setup(manager => manager.Get(reqMsg.MsgId)).Returns(request.Object); var handler = new RpcResultHandler(requestsManager.Object); await handler.HandleAsync(resMsg); requestsManager.Verify(manager => manager.Get(It.IsAny<ulong>()), Times.Once); requestsManager.Verify(manager => manager.Get(reqMsg.MsgId), Times.Once); request.Verify(r => r.SetException(It.IsAny<Exception>()), Times.Once); request.Verify( r => r.SetException(It.Is<RpcErrorException>(exception => exception.Error == rpcResult.Result)), Times.Once); }
public async Task Should_set_rpc_result_to_requst() { var reqMsg = new Message(0x100500, 1, new TestRequest {TestId = 1}); var rpcResult = new RpcResult { ReqMsgId = reqMsg.MsgId, Result = new TestResponse {TestId = 1, TestText = "THIS IS RESPONSE!"} }; var resMsg = new Message(0x200600, 2, rpcResult); var request = new Mock<IRequest>(); request.SetupGet(r => r.Message).Returns(reqMsg); var requestsManager = new Mock<IRequestsManager>(); requestsManager.Setup(manager => manager.Get(reqMsg.MsgId)).Returns(request.Object); var handler = new RpcResultHandler(requestsManager.Object); await handler.HandleAsync(resMsg); requestsManager.Verify(manager => manager.Get(It.IsAny<ulong>()), Times.Once); requestsManager.Verify(manager => manager.Get(reqMsg.MsgId), Times.Once); request.Verify(r => r.SetResponse(It.IsAny<object>()), Times.Once); request.Verify(r => r.SetResponse(rpcResult.Result), Times.Once); }
public async Task Should_send_Rpc_and_receive_response() { IServiceLocator serviceLocator = TestRig.CreateTestServiceLocator(); var config = new ConnectionConfig(TestRig.AuthKey, 100500) {SessionId = 2}; var messageProcessor = serviceLocator.ResolveType<IMessageCodec>(); var request = new TestRequest {TestId = 9}; var expectedResponse = new TestResponse {TestId = 9, TestText = "Number 1"}; var rpcResult = new RpcResult {ReqMsgId = TestMessageIdsGenerator.MessageIds[0], Result = expectedResponse}; byte[] expectedResponseMessageBytes = messageProcessor.EncodeEncryptedMessage( new Message(0x0102030405060708, 3, rpcResult), config.AuthKey, config.Salt, config.SessionId, Sender.Server); SetupMockTransportWhichReturnsBytes(serviceLocator, expectedResponseMessageBytes); using (var connection = serviceLocator.ResolveType<IMTProtoClientConnection>()) { connection.Configure(config); await connection.Connect(); TestResponse response = await connection.RpcAsync<TestResponse>(request); response.Should().NotBeNull(); response.Should().Be(expectedResponse); await connection.Disconnect(); } }