public void Send_And_Receive_Standard_Request_With_Encryption() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.CryptographyConfiguration.Enabled = true; t2.CryptographyConfiguration.Enabled = true; t1.Connect(); t2.Connect(); t2.RequestReceived += (s, e) => { CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; t2.SendResponse(new CalculateResponse() { Sum = receivedRequest.A + receivedRequest.B }, e.Message.Token); }; t1.RequestReceived += (s, e) => { CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; t1.SendResponse(new CalculateResponse() { Sum = receivedRequest.A + receivedRequest.B }, e.Message.Token); }; var request = new CalculateRequest() { A = 10, B = 15 }; CalculateResponse response1 = null; CalculateResponse response2 = null; Task.Factory.StartNew(() => { response1 = t2.SendRequest <CalculateRequest, CalculateResponse>(request); response1 = t2.SendRequest <CalculateRequest, CalculateResponse>(request); }).GetAwaiter().GetResult(); Task.Factory.StartNew(() => { response2 = t1.SendRequest <CalculateRequest, CalculateResponse>(request); response2 = t1.SendRequest <CalculateRequest, CalculateResponse>(request); }).GetAwaiter().GetResult(); Thread.Sleep(4000); t1.Dispose(true); t2.Dispose(true); Assert.AreEqual(response1.Sum, request.A + request.B); Assert.AreEqual(response2.Sum, request.A + request.B); }
public void Disconnection_Request() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Connect(); t2.Connect(); t2.RequestReceived += (x, e) => { t2.SendResponseAsync(new CalculateResponse(), e.Message.Token); }; t1.SendRequest <CalculateRequest, CalculateResponse>(new CalculateRequest()); t2.Disconnect(); Thread.Sleep(1000); Assert.IsTrue(t1.State == ResonanceComponentState.Failed); Assert.IsTrue(t1.FailedStateException is ResonanceConnectionClosedException); t1.Dispose(true); t2.Dispose(true); }
public void Decoder_Exception_Throws_Exception() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Decoder = new CorruptedDecoder(); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Connect(); t2.Connect(); t2.RequestReceived += (s, e) => { CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; //Should be calculate response... t2.SendResponse(new CalculateResponse(), e.Message.Token); }; var request = new CalculateRequest(); Assert.ThrowsException <CorruptedDecoderException>(() => { var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request); }); t1.Dispose(true); t2.Dispose(true); }
public void Transporter_Failes_With_Adapter() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.FailsWithAdapter = true; t1.Connect(); var request = new CalculateRequest() { A = 10, B = 15 }; try { var response = t1.SendRequest(request); Assert.Fail("Expected an exception."); } catch { } Assert.IsTrue(t1.State == ResonanceComponentState.Failed); Assert.IsTrue(t1.FailedStateException.InnerException is KeyNotFoundException); Assert.IsTrue(t1.FailedStateException.InnerException == t1.Adapter.FailedStateException); t1.Dispose(true); }
public void Request_Timeout_Throws_Exception() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Connect(); t2.Connect(); t2.RequestReceived += (s, e) => { Thread.Sleep(1000); CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; t2.SendResponse(new CalculateResponse() { Sum = receivedRequest.A + receivedRequest.B }, e.Message.Token); }; var request = new CalculateRequest() { A = 10, B = 15 }; Assert.ThrowsException <TimeoutException>(() => { var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request, new ResonanceRequestConfig() { Timeout = TimeSpan.FromSeconds(0.5) }); }); t1.Dispose(true); t2.Dispose(true); }
public void Send_And_Receive_Standard_Request_With_Compression() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Encoder.CompressionConfiguration.Enabled = true; t2.Encoder.CompressionConfiguration.Enabled = true; t1.Connect(); t2.Connect(); t2.RequestReceived += (s, e) => { CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; t2.SendResponse(new CalculateResponse() { Sum = receivedRequest.A + receivedRequest.B }, e.Message.Token); }; var request = new CalculateRequest() { A = 10, B = 15 }; var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request); t1.Dispose(true); t2.Dispose(true); Assert.AreEqual(response.Sum, request.A + request.B); }
public void Send_And_Receive_Standard_Request() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Connect(); t2.Connect(); t2.RequestReceived += (s, e) => { Assert.IsTrue(t1.TotalPendingOutgoingMessages == 1); CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; t2.SendResponse(new CalculateResponse() { Sum = receivedRequest.A + receivedRequest.B }, e.Message.Token); }; var request = new CalculateRequest() { A = 10, B = 15 }; var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request, new ResonanceRequestConfig() { LoggingMode = ResonanceMessageLoggingMode.Content }); t1.Dispose(true); t2.Dispose(true); Assert.AreEqual(response.Sum, request.A + request.B); }
public void Request_Handler_Async_With_Response_With_Transporter() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Connect(); t2.Connect(); Handlers handlers = new Handlers(); IDisposable handler = t2.CreateHandlerBuilder() .ForRequest <CalculateRequest>() .WithResponse <CalculateResponse>() .IncludeTransporter() .IsAsync() .Build(handlers.HandleRequestAsyncWithResponseWithTransporter); var request = new CalculateRequest() { A = 10, B = 15 }; var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request); Assert.AreEqual(response.Sum, request.A + request.B); Assert.AreEqual(_receivedTransporter, t2); handler.Dispose(); Assert.ThrowsException <TimeoutException>(() => { t1.SendRequest <CalculateRequest, CalculateResponse>(request, new ResonanceRequestConfig() { Timeout = TimeSpan.FromSeconds(1) }); }); t1.Dispose(true); t2.Dispose(true); }
public void Request_Response_Handler() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Connect(); t2.Connect(); t2.RegisterRequestHandler <CalculateRequest, CalculateResponse>(CalculateRequest_Response_Handler); var request = new CalculateRequest() { A = 10, B = 15 }; var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request); t1.Dispose(true); t2.Dispose(true); Assert.AreEqual(response.Sum, request.A + request.B); }
public void Transporter_Does_Not_Fail_With_Adapter() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.FailsWithAdapter = false; t1.Connect(); var request = new CalculateRequest() { A = 10, B = 15 }; Assert.ThrowsException <KeyNotFoundException>(() => { var response = t1.SendRequest(request); }); Assert.IsTrue(t1.Adapter.State == ResonanceComponentState.Failed && t1.State == ResonanceComponentState.Connected); t1.Dispose(true); }
public void Request_Cancellation_Token_Throws_Exception() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Connect(); t2.Connect(); CancellationTokenSource cts = new CancellationTokenSource(); cts.CancelAfter(200); Assert.ThrowsException <OperationCanceledException>(() => { var response = t1.SendRequest <CalculateRequest, CalculateResponse>(new CalculateRequest(), new ResonanceRequestConfig() { CancellationToken = cts.Token, }); }); t1.Dispose(true); t2.Dispose(true); }
public void Send_And_Receive_Standard_Request_With_Error() { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.Connect(); t2.Connect(); t2.RequestReceived += (s, e) => { CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; t2.SendErrorResponse("Error Message", e.Message.Token); }; Assert.ThrowsException <ResonanceResponseException>(() => { var response = t1.SendRequest <CalculateRequest, CalculateResponse>(new CalculateRequest()); }, "Error Message"); t1.Dispose(true); t2.Dispose(true); Dispose(); }
public void Handshake_With_Different_Encryption_Configuration_And_Conditions() { if (IsRunningOnAzurePipelines) { return; } for (int i = 0; i < 10; i++) { ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST")); ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST")); t1.CryptographyConfiguration.Enabled = i % 2 == 0; t2.CryptographyConfiguration.Enabled = i % 3 == 0; t1.Connect(); t2.Connect(); t2.RequestReceived += (s, e) => { CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; t2.SendResponse(new CalculateResponse() { Sum = receivedRequest.A + receivedRequest.B }, e.Message.Token); }; t1.RequestReceived += (s, e) => { CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; t1.SendResponse(new CalculateResponse() { Sum = receivedRequest.A + receivedRequest.B }, e.Message.Token); }; var request = new CalculateRequest() { A = 10, B = 15 }; CalculateResponse response1 = null; CalculateResponse response2 = null; if (i % 2 == 0) { Task.Factory.StartNew(() => { response1 = t2.SendRequest <CalculateRequest, CalculateResponse>(request); }); Task.Factory.StartNew(() => { response2 = t1.SendRequest <CalculateRequest, CalculateResponse>(request); }); } else { response1 = t2.SendRequest <CalculateRequest, CalculateResponse>(request); response2 = t1.SendRequest <CalculateRequest, CalculateResponse>(request); } Thread.Sleep(1000); Assert.IsNotNull(response1); Assert.IsNotNull(response2); if (t1.CryptographyConfiguration.Enabled && t2.CryptographyConfiguration.Enabled) { Assert.IsTrue(t1.IsChannelSecure); Assert.IsTrue(t2.IsChannelSecure); } else { Assert.IsFalse(t1.IsChannelSecure); Assert.IsFalse(t2.IsChannelSecure); } t1.Dispose(true); t2.Dispose(true); Assert.IsNotNull(response1); Assert.IsNotNull(response2); Assert.AreEqual(response1.Sum, request.A + request.B); Assert.AreEqual(response2.Sum, request.A + request.B); } }
public void Udp_Discovery_And_Tcp_Transporter_Connection() { ResonanceUdpDiscoveryService <DiscoveryInfoTransporter, JsonEncoder> service = new ResonanceUdpDiscoveryService <DiscoveryInfoTransporter, JsonEncoder>(new DiscoveryInfoTransporter() { TcpServerPort = 9999 }, 1984); service.Start(); ResonanceUdpDiscoveryClient <DiscoveryInfoTransporter, JsonDecoder> client = new ResonanceUdpDiscoveryClient <DiscoveryInfoTransporter, JsonDecoder>(1984); var services = client.Discover(TimeSpan.FromSeconds(10), 1); Assert.IsTrue(services.Count == 1); Assert.IsTrue(services[0].DiscoveryInfo.TcpServerPort == service.DiscoveryInfo.TcpServerPort); service.Dispose(); client.Dispose(); var discoveredService = services.First(); ResonanceTransporter t1 = new ResonanceTransporter(new TcpAdapter(discoveredService.Address, discoveredService.DiscoveryInfo.TcpServerPort)); ResonanceTransporter t2 = new ResonanceTransporter(); ResonanceTcpServer server = new ResonanceTcpServer(9999); server.Start(); server.ConnectionRequest += (x, e) => { t2.Adapter = e.Accept(); t2.Connect(); }; t1.Connect(); while (t2.State != ResonanceComponentState.Connected) { Thread.Sleep(10); } t2.RequestReceived += (s, e) => { CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; t2.SendResponse(new CalculateResponse() { Sum = receivedRequest.A + receivedRequest.B }, e.Message.Token); }; var request = new CalculateRequest() { A = 10, B = 15 }; var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request); Assert.AreEqual(response.Sum, request.A + request.B); t1.Dispose(true); t2.Dispose(true); server.Dispose(); }