public void HandleMultipleInstanceWorkflowException_RetryCountExceeded_SuspendsWorkflow()
        {
            BrokenWorkflow workflow = new BrokenWorkflow(BrokenWorkflow.State.Start);
            workflow.CreatedOn = DateTime.UtcNow.AddMinutes(-2);
            workflow.ResumeTrigger = BrokenWorkflow.Trigger.DoStuff.ToString();
            workflow.RetryIntervals = new int[] { 10, 10, 10 };
            workflow.RetryCount = workflow.RetryIntervals.Length;

            Exception ex = new Exception("Dummy exception");

            // execute
            IWorkflowExceptionHandler exceptionHandler = new WorkflowExceptionHandler();
            exceptionHandler.HandleMultipleInstanceWorkflowException(workflow, ex);

            Assert.AreEqual(ex.ToString(), workflow.LastException);
            Assert.AreEqual(DateTime.MinValue, workflow.ResumeOn);
            Assert.IsTrue(workflow.IsSuspended);
        }
        public void HandleSingleInstanceWorkflowException_RetryIntervalLengthNotExceeded_SleepsForSpecifiedTime()
        {
            BrokenWorkflow workflow = new BrokenWorkflow(BrokenWorkflow.State.Start);
            workflow.CreatedOn = DateTime.UtcNow.AddMinutes(-2);
            workflow.ResumeTrigger = BasicWorkflow.Trigger.DoStuff.ToString();
            workflow.RetryIntervals = new int[] { 10, 10, 10 };

            Exception ex = new Exception("Dummy exception");

            // execute
            IWorkflowExceptionHandler exceptionHandler = new WorkflowExceptionHandler();
            exceptionHandler.HandleSingleInstanceWorkflowException(workflow, ex);
            Thread.Sleep(100);

            Assert.AreEqual(ex.ToString(), workflow.LastException);
            Assert.IsTrue(workflow.ResumeOn > DateTime.UtcNow);
            Assert.IsTrue(workflow.ResumeOn < DateTime.UtcNow.AddSeconds(10));
            Assert.IsFalse(workflow.IsSuspended);
        }