public void CanTolerateSubscriberFailure() { var latch = new CountDownLatch(2); var messageBus = new InMemoryMessageBus(); messageBus.Subscribe<SimpleMessageA>(msg => { throw new ApplicationException(); }); messageBus.Subscribe<SimpleMessageA>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); messageBus.Subscribe<SimpleMessageA>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" }); bool success = latch.Wait(900); Assert.True(success, "Failed to receive all messages."); }
public void CanSendMessageToMultipleSubscribers() { var latch = new CountDownLatch(3); var messageBus = new InMemoryMessageBus(); messageBus.Subscribe<SimpleMessageA>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); messageBus.Subscribe<SimpleMessageA>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); messageBus.Subscribe<SimpleMessageA>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" }); bool success = latch.Wait(100); Assert.True(success, "Failed to receive all messages."); }
public void CanSendMessageToMultipleSubscribers() { if (_messageBus == null) return; var latch = new CountDownLatch(3); _messageBus.Subscribe<SimpleMessageA>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); _messageBus.Subscribe<SimpleMessageA>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); _messageBus.Subscribe<SimpleMessageA>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); _messageBus.Publish(new SimpleMessageA { Data = "Hello" }); bool success = latch.Wait(15000); Assert.True(success, "Failed to receive all messages."); }
public void WillSaveOnce() { var latch = new CountDownLatch(2); var storage = new InMemoryFileStorage(); var dict = new PersistedDictionary("test.json", storage, new DefaultJsonSerializer(), 50); dict.Saved += (sender, args) => latch.Signal(); for (int i = 0; i < 10; i++) dict["test" + i] = i.ToString(); Assert.Equal(10, dict.Count); bool success = latch.Wait(250); Assert.False(success, "Dictionary was saved multiple times."); Assert.Equal(1, latch.Remaining); Assert.True(storage.Exists("test.json")); dict["test"] = "test"; Assert.Equal(11, dict.Count); success = latch.Wait(250); Assert.True(success, "Failed to save dictionary."); Assert.True(storage.Exists("test.json")); }
public void WillReceiveDerivedMessageTypes() { var latch = new CountDownLatch(2); var messageBus = new InMemoryMessageBus(); messageBus.Subscribe<ISimpleMessage>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" }); messageBus.PublishAsync(new SimpleMessageB { Data = "Hello" }); messageBus.PublishAsync(new SimpleMessageC { Data = "Hello" }); bool success = latch.Wait(100); Assert.True(success, "Failed to receive all messages."); }
public void CanSubscribeToAllMessageTypes() { var latch = new CountDownLatch(3); var messageBus = new InMemoryMessageBus(); messageBus.Subscribe<object>(msg => { latch.Signal(); }); messageBus.PublishAsync(new SimpleMessageA { Data = "Hello" }); messageBus.PublishAsync(new SimpleMessageB { Data = "Hello" }); messageBus.PublishAsync(new SimpleMessageC { Data = "Hello" }); bool success = latch.Wait(100); Assert.True(success, "Failed to receive all messages."); }
public void CanSubscribeToAllMessageTypes() { if (_messageBus == null) return; var latch = new CountDownLatch(3); _messageBus.Subscribe<object>(msg => { latch.Signal(); }); _messageBus.Publish(new SimpleMessageA { Data = "Hello" }); _messageBus.Publish(new SimpleMessageB { Data = "Hello" }); _messageBus.Publish(new SimpleMessageC { Data = "Hello" }); bool success = latch.Wait(5000); Assert.True(success, "Failed to receive all messages."); }
public void WillReceiveDerivedMessageTypes() { if (_messageBus == null) return; var latch = new CountDownLatch(2); _messageBus.Subscribe<ISimpleMessage>(msg => { Assert.Equal("Hello", msg.Data); latch.Signal(); }); _messageBus.Publish(new SimpleMessageA { Data = "Hello" }); _messageBus.Publish(new SimpleMessageB { Data = "Hello" }); _messageBus.Publish(new SimpleMessageC { Data = "Hello" }); bool success = latch.Wait(5000); Assert.True(success, "Failed to receive all messages."); }
private void DoWork(QueueEntry<SimpleWorkItem> w, CountDownLatch latch, ref int abandonCount, ref int errorCount) { Assert.Equal("Hello", w.Value.Data); latch.Signal(); // randomly complete, abandon or blowup. if (RandomHelper.GetBool()) { Console.WriteLine("Completing: {0}", w.Value.Id); w.CompleteAsync().Wait(); } else if (RandomHelper.GetBool()) { Console.WriteLine("Abandoning: {0}", w.Value.Id); w.AbandonAsync(); Interlocked.Increment(ref abandonCount); } else { Console.WriteLine("Erroring: {0}", w.Value.Id); Interlocked.Increment(ref errorCount); throw new ApplicationException(); } }