Exemplo n.º 1
0
        public void ServiceQueue_1_Writer_1_Reader(ServiceQueueRotationAlgorithm algorithm)
        {
            using (var serviceQueue = new ServiceQueue(algorithm))
            using (var reader = new ServiceQueueReader())
            using (var writer = new ServiceQueueWriter())
            {
                var endpoint = GetEndpoint();
                serviceQueue.Bind(endpoint);

                var counterSignal = new CounterSignal(NumberOfMessages, 0);
                reader.MessageReceived += (s, m) => counterSignal.Increment();

                reader.Connect(endpoint);
                writer.Connect(endpoint);

                var messageSent = new TestMessage();

                var sw = Stopwatch.StartNew();
                for (var i = 0; i < NumberOfMessages; i++)
                {
                    writer.SendMessage(messageSent);
                }
                Assert.IsTrue(counterSignal.Wait(TimeOut), "Timeout waiting for message");
                sw.Stop();

                Assert.Inconclusive("{0} elapsed reading {1} messages ({2:N0} per second)", sw.Elapsed, NumberOfMessages, NumberOfMessages / sw.Elapsed.TotalSeconds);

            }
        }
Exemplo n.º 2
0
        private void ServiceQueue_1_Writer_n_Readers(ServiceQueueRotationAlgorithm algorithm, int readers)
        {
            using (var serviceQueue = new ServiceQueue(algorithm))
                using (var writer = new ServiceQueueWriter())
                {
                    var endpoint = GetEndpoint();
                    serviceQueue.Bind(endpoint);

                    var counterSignal = new CounterSignal(NumberOfMessages, 0);

                    for (var i = 0; i < readers; i++)
                    {
                        var reader = new ServiceQueueReader();
                        reader.MessageReceived += (s, m) => counterSignal.Increment();

                        reader.Connect(endpoint);
                    }

                    writer.Connect(endpoint);

                    var messageSent = new TestMessage();

                    var sw = Stopwatch.StartNew();
                    for (var i = 0; i < NumberOfMessages; i++)
                    {
                        writer.SendMessage(messageSent);
                    }
                    Assert.IsTrue(counterSignal.Wait(TimeOut), "Timeout waiting for message");
                    sw.Stop();

                    Assert.Inconclusive("{0} elapsed reading {1} messages ({2:N0} per second)", sw.Elapsed, NumberOfMessages, NumberOfMessages / sw.Elapsed.TotalSeconds);
                }
        }
        public void ServiceQueue_connect_AddMessageFrame_single_message_received(ServiceQueueRotationAlgorithm rotationAlgorithm)
        {
            var endpoint = new RedFoxEndpoint("/path");

            using (var serviceQueue = new ServiceQueue(rotationAlgorithm))
            using (var serviceQueueReader = new ServiceQueueReader())
            {
                IMessage messageReceived = null;
                var received = new ManualResetEventSlim();
                serviceQueueReader.MessageReceived += (s, m) =>
                {
                    messageReceived = m;
                    received.Set();
                };

                serviceQueue.Bind(endpoint);
                serviceQueueReader.Connect(endpoint);

                var testMessage = new TestMessage();
                var testMessageFrame = new MessageFrameCreator(DefaultMessageSerialization.Instance).CreateFromMessage(testMessage);

                serviceQueue.AddMessageFrame(testMessageFrame);

                Assert.IsTrue(received.Wait(TimeSpan.FromSeconds(1)));
                Assert.AreEqual(testMessage, messageReceived);
            }
        }
Exemplo n.º 4
0
        public void ServiceQueue_AddMessageFrame_connect_single_message_received(ServiceQueueRotationAlgorithm rotationAlgorithm)
        {
            var endpoint = new RedFoxEndpoint("/path");

            using (var serviceQueue = new ServiceQueue(rotationAlgorithm))
                using (var serviceQueueReader = new ServiceQueueReader())
                {
                    IMessage messageReceived = null;
                    var      received        = new ManualResetEventSlim();
                    serviceQueueReader.MessageReceived += (s, m) =>
                    {
                        messageReceived = m;
                        received.Set();
                    };

                    var testMessage      = new TestMessage();
                    var testMessageFrame = new MessageFrameCreator(DefaultMessageSerialization.Instance).CreateFromMessage(testMessage);

                    serviceQueue.AddMessageFrame(testMessageFrame);

                    serviceQueue.Bind(endpoint);
                    serviceQueueReader.Connect(endpoint);

                    Assert.IsTrue(received.Wait(TimeSpan.FromSeconds(1)));
                    Assert.AreEqual(testMessage, messageReceived);
                }
        }
Exemplo n.º 5
0
        public void ServiceQueue_AddMessageFrame_connect_multiple_readers_LoadBalance()
        {
            var endpoint1 = new RedFoxEndpoint("/path1");
            var endpoint2 = new RedFoxEndpoint("/path2");

            using (var serviceQueue = new ServiceQueue(ServiceQueueRotationAlgorithm.LoadBalance))
                using (var serviceQueueReader1 = new ServiceQueueReader())
                    using (var serviceQueueReader2 = new ServiceQueueReader())
                    {
                        const int count   = 1000;
                        var       counter = new CounterSignal(count, 0);

                        var messagesReceived1 = new List <IMessage>();
                        serviceQueueReader1.MessageReceived += (s, m) =>
                        {
                            messagesReceived1.Add(m);
                            counter.Increment();
                        };

                        var messagesReceived2 = new List <IMessage>();
                        serviceQueueReader2.MessageReceived += (s, m) =>
                        {
                            messagesReceived2.Add(m);
                            counter.Increment();
                        };

                        var testMessage      = new TestMessage();
                        var testMessageFrame = new MessageFrameCreator(DefaultMessageSerialization.Instance).CreateFromMessage(testMessage);

                        serviceQueue.Bind(endpoint1);
                        serviceQueue.Bind(endpoint2);

                        serviceQueueReader1.Connect(endpoint1);
                        serviceQueueReader2.Connect(endpoint2);

                        for (var i = 0; i < count; i++)
                        {
                            serviceQueue.AddMessageFrame(testMessageFrame);
                        }

                        Assert.IsTrue(counter.Wait());
                        Assert.AreEqual(count, messagesReceived1.Count + messagesReceived2.Count);

                        Assert.AreNotEqual(0, messagesReceived1.Count);
                        Assert.AreNotEqual(0, messagesReceived2.Count);

                        var ratio = (decimal)messagesReceived1.Count / messagesReceived2.Count;
                        Assert.Greater(ratio, 0.9);
                        Assert.Less(ratio, 1.1);
                    }
        }
        public void Connect_with_timeout_to_non_existing_endpoint_should_throw_TimeoutException()
        {
            using (var serviceQueueReader = new ServiceQueueReader())
            {
                var endpoint = TestHelpers.CreateEndpointForTransport(RedFoxTransport.Tcp);

                var sw = Stopwatch.StartNew();

                Assert.Throws<TimeoutException>(() =>
                    serviceQueueReader.Connect(endpoint, TimeSpan.FromMilliseconds(100)));

                sw.Stop();
                Assert.GreaterOrEqual(sw.ElapsedMilliseconds, 100);
            }
        }
Exemplo n.º 7
0
        public void Connect_with_timeout_to_non_existing_endpoint_should_throw_TimeoutException()
        {
            using (var serviceQueueReader = new ServiceQueueReader())
            {
                var endpoint = TestHelpers.CreateEndpointForTransport(RedFoxTransport.Tcp);

                var sw = Stopwatch.StartNew();

                Assert.Throws <TimeoutException>(() =>
                                                 serviceQueueReader.Connect(endpoint, TimeSpan.FromMilliseconds(100)));

                sw.Stop();
                Assert.GreaterOrEqual(sw.ElapsedMilliseconds, 100);
            }
        }
        public void ServiceQueueReader_should_obey_ReceiveTimeout_in_socket_configuration_and_disconnects_on_timeout()
        {
            using (var serviceQueue = new ServiceQueue())
            using (var serviceQueueReader = new ServiceQueueReader())
            {
                var endpoint = TestHelpers.CreateEndpointForTransport(RedFoxTransport.Tcp);
                var socketConfiguration = new SocketConfiguration { ReceiveTimeout = TimeSpan.FromMilliseconds(100) };

                serviceQueue.Bind(endpoint);
                serviceQueueReader.Connect(endpoint, socketConfiguration);

                var disconnected = new ManualResetEventSlim();
                serviceQueueReader.Disconnected += disconnected.Set;

                Assert.IsTrue(disconnected.Wait(TimeSpan.FromSeconds(1)));
            }
        }
Exemplo n.º 9
0
        public void ServiceQueueReader_should_obey_ReceiveTimeout_in_socket_configuration_and_disconnects_on_timeout()
        {
            using (var serviceQueue = new ServiceQueue())
                using (var serviceQueueReader = new ServiceQueueReader())
                {
                    var endpoint            = TestHelpers.CreateEndpointForTransport(RedFoxTransport.Tcp);
                    var socketConfiguration = new SocketConfiguration {
                        ReceiveTimeout = TimeSpan.FromMilliseconds(100)
                    };

                    serviceQueue.Bind(endpoint);
                    serviceQueueReader.Connect(endpoint, socketConfiguration);

                    var disconnected = new ManualResetEventSlim();
                    serviceQueueReader.Disconnected += disconnected.Set;

                    Assert.IsTrue(disconnected.Wait(TimeSpan.FromSeconds(1)));
                }
        }
Exemplo n.º 10
0
        public void ServiceQueue_AddMessageFrame_connect_multiple_readers_multiple_message_received(ServiceQueueRotationAlgorithm rotationAlgorithm)
        {
            var endpoint = new RedFoxEndpoint("/path");

            using (var serviceQueue = new ServiceQueue(rotationAlgorithm))
                using (var serviceQueueReader1 = new ServiceQueueReader())
                    using (var serviceQueueReader2 = new ServiceQueueReader())
                    {
                        const int count   = 1000;
                        var       counter = new CounterSignal(count, 0);

                        var messagesReceived1 = new List <IMessage>();
                        serviceQueueReader1.MessageReceived += (s, m) =>
                        {
                            messagesReceived1.Add(m);
                            counter.Increment();
                        };

                        var messagesReceived2 = new List <IMessage>();
                        serviceQueueReader2.MessageReceived += (s, m) =>
                        {
                            messagesReceived2.Add(m);
                            counter.Increment();
                        };

                        var testMessage      = new TestMessage();
                        var testMessageFrame = new MessageFrameCreator(DefaultMessageSerialization.Instance).CreateFromMessage(testMessage);

                        for (var i = 0; i < count; i++)
                        {
                            serviceQueue.AddMessageFrame(testMessageFrame);
                        }

                        serviceQueue.Bind(endpoint);

                        serviceQueueReader1.Connect(endpoint);
                        serviceQueueReader2.Connect(endpoint);

                        Assert.IsTrue(counter.Wait(TimeSpan.FromSeconds(10)));
                        Assert.AreEqual(count, messagesReceived1.Count + messagesReceived2.Count);
                    }
        }
Exemplo n.º 11
0
        public void ServiceQueue_AddMessageFrame_connect_multiple_readers_LoadBalance()
        {
            var endpoint1 = new RedFoxEndpoint("/path1");
            var endpoint2 = new RedFoxEndpoint("/path2");

            using (var serviceQueue = new ServiceQueue(ServiceQueueRotationAlgorithm.LoadBalance))
            using (var serviceQueueReader1 = new ServiceQueueReader())
            using (var serviceQueueReader2 = new ServiceQueueReader())
            {
                const int count = 1000;
                var counter = new CounterSignal(count, 0);

                var messagesReceived1 = new List<IMessage>();
                serviceQueueReader1.MessageReceived += (s, m) =>
                {
                    messagesReceived1.Add(m);
                    counter.Increment();
                };

                var messagesReceived2 = new List<IMessage>();
                serviceQueueReader2.MessageReceived += (s, m) =>
                {
                    messagesReceived2.Add(m);
                    counter.Increment();
                };

                var testMessage = new TestMessage();
                var testMessageFrame = new MessageFrameCreator(DefaultMessageSerialization.Instance).CreateFromMessage(testMessage);

                serviceQueue.Bind(endpoint1);
                serviceQueue.Bind(endpoint2);

                serviceQueueReader1.Connect(endpoint1);
                serviceQueueReader2.Connect(endpoint2);

                for (var i = 0; i < count; i++)
                    serviceQueue.AddMessageFrame(testMessageFrame);

                Assert.IsTrue(counter.Wait());
                Assert.AreEqual(count, messagesReceived1.Count + messagesReceived2.Count);

                Assert.AreNotEqual(0, messagesReceived1.Count);
                Assert.AreNotEqual(0, messagesReceived2.Count);

                var ratio = (decimal)messagesReceived1.Count / messagesReceived2.Count;
                Assert.Greater(ratio, 0.9);
                Assert.Less(ratio, 1.1);
            }
        }
Exemplo n.º 12
0
        public void ServiceQueue_AddMessageFrame_connect_multiple_readers_multiple_message_received(ServiceQueueRotationAlgorithm rotationAlgorithm)
        {
            var endpoint = new RedFoxEndpoint("/path");

            using (var serviceQueue = new ServiceQueue(rotationAlgorithm))
            using (var serviceQueueReader1 = new ServiceQueueReader())
            using (var serviceQueueReader2 = new ServiceQueueReader())
            {
                const int count = 1000;
                var counter = new CounterSignal(count, 0);

                var messagesReceived1 = new List<IMessage>();
                serviceQueueReader1.MessageReceived += (s, m) =>
                {
                    messagesReceived1.Add(m);
                    counter.Increment();
                };

                var messagesReceived2 = new List<IMessage>();
                serviceQueueReader2.MessageReceived += (s, m) =>
                {
                    messagesReceived2.Add(m);
                    counter.Increment();
                };

                var testMessage = new TestMessage();
                var testMessageFrame = new MessageFrameCreator(DefaultMessageSerialization.Instance).CreateFromMessage(testMessage);

                for (var i = 0; i < count; i++)
                    serviceQueue.AddMessageFrame(testMessageFrame);

                serviceQueue.Bind(endpoint);

                serviceQueueReader1.Connect(endpoint);
                serviceQueueReader2.Connect(endpoint);

                Assert.IsTrue(counter.Wait(TimeSpan.FromSeconds(10)));
                Assert.AreEqual(count, messagesReceived1.Count + messagesReceived2.Count);
            }
        }