示例#1
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);
        }
示例#2
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);
        }
示例#3
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);
        }
示例#4
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);
        }
示例#5
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);
        }
示例#6
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);
            }
        }
示例#7
0
        public void Send_And_Receive_Continuous_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) =>
            {
                ProgressRequest receivedRequest = e.Message.Object as ProgressRequest;

                Task.Factory.StartNew(() =>
                {
                    for (int i = 0; i < receivedRequest.Count; i++)
                    {
                        t2.SendResponse(new ProgressResponse()
                        {
                            Value = i
                        }, e.Message.Token);
                        Thread.Sleep(receivedRequest.Interval);
                    }

                    t2.SendErrorResponse("Test Exception", e.Message.Token);

                    Thread.Sleep(receivedRequest.Interval);

                    t2.SendResponse(new ProgressResponse()
                    {
                        Value = receivedRequest.Count
                    }, e.Message.Token, new ResonanceResponseConfig()
                    {
                        Completed = true
                    });
                });
            };

            int  currentValue = -1;
            bool isCompleted  = false;
            bool hasError     = false;

            var request = new ProgressRequest()
            {
                Count = 100, Interval = TimeSpan.FromMilliseconds(30)
            };
            var subscription = t1.SendContinuousRequest <ProgressRequest, ProgressResponse>(request).Subscribe((response) =>
            {
                //Response

                Assert.IsTrue(response.Value == currentValue + 1);

                currentValue = response.Value;
            }, (ex) =>
            {
                //Error
                hasError = true;

                Assert.AreEqual(ex.Message, "Test Exception");
            }, () =>
            {
                //Completed
                isCompleted = true;
            });

            Assert.ThrowsException <ResonanceResponseException>(() =>
            {
                subscription.Wait();
            }, "Test Exception");

            Assert.AreEqual(currentValue, request.Count - 1);
            Assert.IsFalse(isCompleted);
            Assert.IsTrue(hasError);

            t1.Dispose(true);
            t2.Dispose(true);
        }
示例#8
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();
        }