public void GetExtensionsReturnsExtensionsCollection() { const string BookmarkName = "Test"; var activity = new Sequence { Activities = { new ActivityExtensionTest { AddExtensionProvider = true }, new TestBookmark<int> { BookmarkName = BookmarkName }, new ActivityExtensionTest { AddExtensionProvider = true }, } }; var traceTrackingParticipant = new TraceTrackingParticipant(); var listTrackingParticipant = new ListTrackingParticipant(); var workflowApplication = new WorkflowApplication(activity); // Add a couple of singleton extensions workflowApplication.Extensions.Add(traceTrackingParticipant); workflowApplication.Extensions.Add(listTrackingParticipant); // foreach (var extension in workflowApplication.Extensions) // { // Doh! this won't work // foreach statement cannot operate on variables of type // 'System.Activities.Hosting.WorkflowInstanceExtensionManager' // because 'System.Activities.Hosting.WorkflowInstanceExtensionManager' // does not contain a public definition for 'GetEnumerator' // } // Run it so that the activity will create an extension workflowApplication.RunEpisode(BookmarkName, Constants.Timeout); // Resume and run to completion workflowApplication.ResumeEpisodeBookmark(BookmarkName, 1); // Now I can get the Singleton Extensions as a collection var extensions = workflowApplication.GetSingletonExtensions(); Assert.IsNotNull(extensions); Assert.AreEqual(2, extensions.Count); // Note: Extensions created by AddDefaultExtensionProvider will not appear in the collection Assert.IsTrue(extensions.Contains(traceTrackingParticipant)); Assert.IsTrue(extensions.Contains(listTrackingParticipant)); foreach (var extension in extensions) { Debug.WriteLine("Found singleton extension " + extension); } }
public void WhenPersistedInstanceLoadedRunEpisodeShouldComplete() { var activity = new TestBookmark<int> { BookmarkName = "Test" }; var workflowApplication = new WorkflowApplication(activity) { InstanceStore = new MemoryStore(), PersistableIdle = args => PersistableIdleAction.Unload, }; // Episodes can end with until unloaded, aborted, completed, timeout // Run episode until unloaded because of persistable idle event var workflowIdleEpisodeResult = workflowApplication.RunEpisode(Constants.Timeout) as WorkflowIdleEpisodeResult; Assert.IsNotNull(workflowIdleEpisodeResult); // Cannot resume the same WorkflowApplication - it will cause a System.InvalidOperationException // Message=WorkflowInstance (guid) cannot be modified after it has started running. var workflowApplicationResume = new WorkflowApplication(activity) { InstanceStore = new MemoryStore(), }; // Load the instance with a new WorkflowApplication workflowApplicationResume.Load(workflowIdleEpisodeResult.InstanceId); // Resume and complete var result = workflowApplicationResume.ResumeEpisodeBookmark("Test", 1); Assert.IsInstanceOfType(result, typeof(WorkflowCompletedEpisodeResult)); Assert.AreEqual(ActivityInstanceState.Closed, result.State); AssertOutArgument.AreEqual(((WorkflowCompletedEpisodeResult)result).Outputs, "Result", 1); }
public void WhenActivityRunsToTargetResumeContinuesUntilTrackingReportsActivityState() { const string WaitForBookmarkName = "TestBookmark"; var workflowApplication = new WorkflowApplication( new Sequence { Activities = { new Delay { Duration = TimeSpan.FromMilliseconds(1) }, new Delay { Duration = TimeSpan.FromMilliseconds(1) }, new Delay { Duration = TimeSpan.FromMilliseconds(1) }, new TestBookmark<int> { BookmarkName = WaitForBookmarkName }, new Delay { Duration = TimeSpan.FromMilliseconds(1) }, new Delay { Duration = TimeSpan.FromMilliseconds(1) }, new Delay { Duration = TimeSpan.FromMilliseconds(1) }, new TestBookmark<int> { BookmarkName = WaitForBookmarkName }, } }); // Run through three idle events and end the episode when idle with a bookmark "TestBookmark" Assert.AreEqual( ActivityInstanceState.Executing, workflowApplication.RunEpisode(WaitForBookmarkName, Constants.Timeout).State); // Assert.AreEqual(ActivityInstanceState.Executing, workflowApplication.RunEpisode(WaitForBookmarkName, TimeSpan.FromHours(1)).State); Debug.WriteLine("Running to idle second time TestBookmark"); // var result = workflowApplication.ResumeEpisodeBookmark(WaitForBookmarkName, 1, WaitForBookmarkName, this.DefaultTimeout); var result = workflowApplication.ResumeEpisodeBookmark( WaitForBookmarkName, 1, WaitForBookmarkName, TimeSpan.FromHours(1)); Assert.IsInstanceOfType(result, typeof(WorkflowIdleEpisodeResult)); Assert.AreEqual(ActivityInstanceState.Executing, result.State); }