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); } }
public void message_frame_should_have_MessageTypeId_from_serialized_message() { var messageFrameCreator = new MessageFrameCreator(DefaultMessageSerialization.Instance); var message = new TestMessage(); var messageFrame = messageFrameCreator.CreateFromMessage(message); Assert.AreEqual(message.MessageTypeId, messageFrame.MessageTypeId); }
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); } }
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 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); } }
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 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); } }