private async Task <WorkflowConfiguration> GetWorkflowConfiguration(Guid workflowId, CancellationToken cancellationToken = default) { var key = workflowId.ToString("D", CultureInfo.InvariantCulture); if (Cache.Value.TryGetValue(key, out WorkflowConfiguration workflowConfiguration)) { return(workflowConfiguration); } IWorkflowParser workflowParser = new WorkflowXmlParser(); var content = await WorkflowEngineBuilder.WorkflowStore.GetWorkflowConfiguration(workflowId, cancellationToken).ConfigureAwait(false); if (null == content) { throw new WorkflowException($"Workflow ID [{workflowId:D}] is referring to non existing workflow configuration"); } workflowConfiguration = workflowParser.Parse(content); var workflowRuntimeConfiguration = await WorkflowEngineBuilder.WorkflowRuntimeConfigurationFactory .GetWorkflowRuntimeConfiguration(workflowConfiguration, cancellationToken) .ConfigureAwait(false); if (null == workflowRuntimeConfiguration) { throw new WorkflowException($"Workflow ID [{workflowId:D}] has not matching runtime configuration"); } workflowConfiguration.RuntimeConfiguration = workflowRuntimeConfiguration; Cache.Value.Put(key, workflowConfiguration); return(workflowConfiguration); }
public void Parse_Failed_DoNotAllowDuplicatedEventDeclarationForTheSameState() { var workflowReader = new WorkflowXmlParser(); using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Diadem.Workflow.Core.UnitTests.WorkflowConfigurations.Basic.flow.package.duplicated.event.01.xml")) using (var streamReader = new StreamReader(stream)) { Assert.Throws <WorkflowConfigurationException>(() => workflowReader.Parse(streamReader.ReadToEnd())); } }
public void Parse_Failed_ActivityFailureMustReferToExistingTransition() { var workflowReader = new WorkflowXmlParser(); using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Diadem.Workflow.Core.UnitTests.WorkflowConfigurations.Basic.flow.package.07.activity.retry.failure.xml")) using (var streamReader = new StreamReader(stream)) { Assert.Throws <WorkflowConfigurationException>(() => workflowReader.Parse(streamReader.ReadToEnd())); } }
public void Parse_Simple_Xml() { WorkflowConfiguration workflowConfiguration; var workflowReader = new WorkflowXmlParser(); using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Diadem.Workflow.Core.UnitTests.WorkflowConfigurations.Basic.flow.package.01.xml")) using (var streamReader = new StreamReader(stream)) { workflowConfiguration = workflowReader.Parse(streamReader.ReadToEnd()); } Assert.IsTrue(string.Equals(workflowConfiguration.Code, "test.v.0.0.1", StringComparison.OrdinalIgnoreCase)); Assert.IsTrue(workflowConfiguration.States.Count == 4); }