示例#1
0
        public void one_subscriber_connects_to_one_publisher_receives_message_then_second_subscriber_connects_both_receive_message(RedFoxTransport transport)
        {
            using (var publisher = new Publisher())
                using (var subscriber1 = new TestSubscriber())
                    using (var subscriber2 = new TestSubscriber())
                    {
                        var endpoint = TestHelpers.CreateEndpointForTransport(transport);

                        publisher.Bind(endpoint);
                        subscriber1.Connect(endpoint);

                        Thread.Sleep(100);

                        var broadcastMessage = new TestMessage {
                            Text = "Hello"
                        };
                        publisher.Broadcast(broadcastMessage);

                        Assert.AreEqual(broadcastMessage, subscriber1.TestMustReceiveMessageWithin(Timeout));

                        subscriber2.Connect(endpoint);

                        Thread.Sleep(100);

                        publisher.Broadcast(broadcastMessage);

                        Assert.AreEqual(broadcastMessage, subscriber1.TestMustReceiveMessageWithin(Timeout));
                        Assert.AreEqual(broadcastMessage, subscriber2.TestMustReceiveMessageWithin(Timeout));
                    }
        }
        public void One_Publisher_One_Subscriber_Batch_Broadcast()
        {
            using (var publisher = new Publisher())
            using (var subscriber = new Subscriber())
            {
                var endpoint = GetEndpoint();
                publisher.Bind(endpoint);
                subscriber.Connect(endpoint);

                Thread.Sleep(100);

                var counterSignal = new CounterSignal(NumberOfMessagesToReceive);
                subscriber.MessageReceived += (s, m) => counterSignal.Increment();

                var messageSent = new TestMessage();

                var batch = new List<TestMessage>();
                for (var i = 0; i < NumberOfMessagesToReceive; i++)
                    batch.Add(messageSent);

                var sw = Stopwatch.StartNew();
                publisher.Broadcast(batch);
                Assert.IsTrue(counterSignal.Wait(TimeOut), "Timeout waiting for message");
                sw.Stop();

                Assert.Inconclusive("{0} elapsed reading {1} messages ({2:N0} per second)", sw.Elapsed, NumberOfMessagesToReceive, NumberOfMessagesToReceive / sw.Elapsed.TotalSeconds);
            }
        }
示例#3
0
        public void One_Publisher_Two_Subscribers_Single_Broadcasts()
        {
            using (var publisher = new Publisher())
                using (var subscriber1 = new Subscriber())
                    using (var subscriber2 = new Subscriber())
                    {
                        var endpoint = GetEndpoint();
                        publisher.Bind(endpoint);
                        subscriber1.Connect(endpoint);
                        subscriber2.Connect(endpoint);

                        Thread.Sleep(100);

                        var counterSignal = new CounterSignal(NumberOfMessagesToReceive);
                        subscriber1.MessageReceived += (s, m) => counterSignal.Increment();
                        subscriber2.MessageReceived += (s, m) => counterSignal.Increment();

                        var messageSent = new TestMessage();

                        var sw = Stopwatch.StartNew();
                        for (var i = 0; i < NumberOfMessagesToReceive / 2; i++)
                        {
                            publisher.Broadcast(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, NumberOfMessagesToReceive, NumberOfMessagesToReceive / sw.Elapsed.TotalSeconds);
                    }
        }
示例#4
0
        public void One_Publisher_Hundred_Subscribers_Single_Broadcasts()
        {
            using (var publisher = new Publisher())
            {
                var endpoint = GetEndpoint();
                publisher.Bind(endpoint);

                var counterSignal = new CounterSignal(NumberOfMessagesToReceive);
                var subscribers   = Enumerable.Range(1, 100).Select(i =>
                {
                    var sub              = new Subscriber();
                    sub.MessageReceived += (s, m) => counterSignal.Increment();
                    sub.Connect(endpoint);
                    return(sub);
                }).ToList();

                Thread.Sleep(100);

                var messageSent = new TestMessage();

                var sw = Stopwatch.StartNew();
                for (var i = 0; i < NumberOfMessagesToReceive / 100; i++)
                {
                    publisher.Broadcast(messageSent);
                }
                Assert.IsTrue(counterSignal.Wait(TimeOut), "Timeout waiting for message");
                sw.Stop();

                subscribers.ForEach(sub => sub.Dispose());

                Assert.Inconclusive("{0} elapsed reading {1} messages ({2:N0} per second)", sw.Elapsed, NumberOfMessagesToReceive, NumberOfMessagesToReceive / sw.Elapsed.TotalSeconds);
            }
        }
示例#5
0
        public void Subscribe_to_Publisher_receive_two_single_broadcasted_messages(RedFoxTransport transport)
        {
            using (var publisher = new Publisher())
                using (var subscriber = new TestSubscriber())
                {
                    var endpoint = TestHelpers.CreateEndpointForTransport(transport);

                    publisher.Bind(endpoint);
                    subscriber.Connect(endpoint);

                    Thread.Sleep(100);

                    var broadcastedMessage = new TestMessage {
                        Text = "Hello"
                    };

                    publisher.Broadcast(broadcastedMessage);
                    publisher.Broadcast(broadcastedMessage);

                    Assert.AreEqual(broadcastedMessage, subscriber.TestMustReceiveMessageWithin(Timeout));
                    Assert.AreEqual(broadcastedMessage, subscriber.TestMustReceiveMessageWithin(Timeout));
                }
        }
        public void Subscribe_to_Publisher_twice_on_same_endpoint(RedFoxTransport transport)
        {
            for (var i = 0; i < 2; i++)
            {
                using (var publisher = new Publisher())
                using (var subscriber = new TestSubscriber())
                {
                    var endpoint = TestHelpers.CreateEndpointForTransport(transport);

                    publisher.Bind(endpoint);
                    subscriber.Connect(endpoint);

                    var broadcastedMessage = new TestMessage { Text = "Hello" };
                    publisher.Broadcast(broadcastedMessage);
                }
            }
        }
示例#7
0
        public void Subscribe_to_Publisher_twice_on_same_endpoint(RedFoxTransport transport)
        {
            for (var i = 0; i < 2; i++)
            {
                using (var publisher = new Publisher())
                    using (var subscriber = new TestSubscriber())
                    {
                        var endpoint = TestHelpers.CreateEndpointForTransport(transport);

                        publisher.Bind(endpoint);
                        subscriber.Connect(endpoint);

                        var broadcastedMessage = new TestMessage {
                            Text = "Hello"
                        };
                        publisher.Broadcast(broadcastedMessage);
                    }
            }
        }
        public void Subscribe_to_Publisher_receive_single_broadcasted_message(RedFoxTransport transport)
        {
            using (var publisher = new Publisher())
            using (var subscriber = new TestSubscriber())
            {
                var endpoint = TestHelpers.CreateEndpointForTransport(transport);

                publisher.Bind(endpoint);
                subscriber.Connect(endpoint);

                Thread.Sleep(100);

                var broadcastedMessage = new TestMessage { Text = "Hello" };

                publisher.Broadcast(broadcastedMessage);

                Assert.AreEqual(broadcastedMessage, subscriber.TestMustReceiveMessageWithin(Timeout));
            }
        }
        public void One_Publisher_Hundred_Subscribers_Single_Broadcasts()
        {
            using (var publisher = new Publisher())
            {
                var endpoint = GetEndpoint();
                publisher.Bind(endpoint);

                var counterSignal = new CounterSignal(NumberOfMessagesToReceive);
                var subscribers = Enumerable.Range(1, 100).Select(i =>
                {
                    var sub = new Subscriber();
                    sub.MessageReceived += (s, m) => counterSignal.Increment();
                    sub.Connect(endpoint);
                    return sub;
                }).ToList();

                Thread.Sleep(100);

                var messageSent = new TestMessage();

                var sw = Stopwatch.StartNew();
                for (var i = 0; i < NumberOfMessagesToReceive / 100; i++)
                {
                    publisher.Broadcast(messageSent);
                }
                Assert.IsTrue(counterSignal.Wait(TimeOut), "Timeout waiting for message");
                sw.Stop();

                subscribers.ForEach(sub => sub.Dispose());

                Assert.Inconclusive("{0} elapsed reading {1} messages ({2:N0} per second)", sw.Elapsed, NumberOfMessagesToReceive, NumberOfMessagesToReceive / sw.Elapsed.TotalSeconds);
            }
        }
        public void one_subscriber_connects_to_one_publisher_receives_message_then_second_subscriber_connects_both_receive_message(RedFoxTransport transport)
        {
            using (var publisher = new Publisher())
            using (var subscriber1 = new TestSubscriber())
            using (var subscriber2 = new TestSubscriber())
            {
                var endpoint = TestHelpers.CreateEndpointForTransport(transport);

                publisher.Bind(endpoint);
                subscriber1.Connect(endpoint);

                Thread.Sleep(100);

                var broadcastMessage = new TestMessage { Text = "Hello" };
                publisher.Broadcast(broadcastMessage);

                Assert.AreEqual(broadcastMessage, subscriber1.TestMustReceiveMessageWithin(Timeout));

                subscriber2.Connect(endpoint);

                Thread.Sleep(100);

                publisher.Broadcast(broadcastMessage);

                Assert.AreEqual(broadcastMessage, subscriber1.TestMustReceiveMessageWithin(Timeout));
                Assert.AreEqual(broadcastMessage, subscriber2.TestMustReceiveMessageWithin(Timeout));
            }
        }