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); } }
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); } }
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 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); } } }
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); } }