CCR tips and tricks - part 4

Sometimes when working with causalities you want to clear all causalities. One common case where you want to do this is when you use a throttling port (more on that in a later post). Here is a simple test showing how to clear causalities (line 30).

  1: [TestClass]
 2: public class 
 3: Given_a_causality_when_unhandled_exception_is_thrown_after_clearing_causalities
 4: {
 5:     private DispatcherQueue dispatcherQueue = new DispatcherQueue();
 6:     private Exception causalityException = null;
 7:     private string exceptionMessage = "My unhandled exception";
 8:  
 9:     [TestInitialize]
 10:     public void Setup()
 11:     {
 12:         var mre = new ManualResetEvent(false);
 13:         Port<Exception> exceptionPort = new Port<Exception>();
 14:         Causality causality = new Causality(
 15:             string.Format("CausalityForTests: {0}", Guid.NewGuid()), 
 16:             exceptionPort);
 17:         Arbiter.Activate(dispatcherQueue, exceptionPort.Receive(
 18:             (e) =>
 19:             {
 20:                 causalityException = e;
 21:                 mre.Set();
 22:             }));
 23:         Dispatcher.AddCausality(causality);
 24:  
 25:         Arbiter.Activate(
 26:             dispatcherQueue,
 27:             Arbiter.FromHandler(
 28:                 () =>
 29:                     {
 30:                         Dispatcher.ClearCausalities();
 31:                         throw new Exception(exceptionMessage);
 32:                     }));
 33:         Assert.IsFalse(
 34:             mre.WaitOne(TimeSpan.FromSeconds(3)), 
 35:             "Causality should not get exception");
 36:     }
 37:  
 38:     [TestMethod]
 39:     public void Then_exception_is_handled_by_causality()
 40:     {
 41:         Assert.IsNull(causalityException);
 42:     }
 43: }