Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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();
        }
Пример #13
0
        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);
            }
        }
Пример #14
0
        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();
        }