Guid ExecuteWf(ErrorResultTO to, IServiceTestModelTO test) { Guid result = new Guid(); var wfappUtils = new WfApplicationUtils(); ErrorResultTO invokeErrors = new ErrorResultTO(); var resourceId = DataObject.ResourceID; if (test?.Inputs != null) { AddRecordsetsInputs(test.Inputs.Where(input => DataListUtil.IsValueRecordset(input.Variable) && !input.Variable.Contains("@")), DataObject.Environment); foreach (var input in test.Inputs) { var variable = DataListUtil.AddBracketsToValueIfNotExist(input.Variable); var value = input.Value; if (variable.StartsWith("[[@")) { var jContainer = JsonConvert.DeserializeObject(value) as JObject; DataObject.Environment.AddToJsonObjects(variable, jContainer); } else if (!DataListUtil.IsValueRecordset(input.Variable)) { string errorMessage; if (ExecutionEnvironment.IsValidVariableExpression(input.Value, out errorMessage, 0)) { DataObject.Environment.AllErrors.Add("Cannot use variables as input value."); } else { if (!input.EmptyIsNull || !string.IsNullOrEmpty(value)) { DataObject.Environment.Assign(variable, value, 0); } } } } } Dev2JsonSerializer serializer = new Dev2JsonSerializer(); try { IExecutionToken exeToken = new ExecutionToken { IsUserCanceled = false }; DataObject.ExecutionToken = exeToken; if (DataObject.IsDebugMode()) { var debugState = wfappUtils.GetDebugState(DataObject, StateType.Start, DataObject.Environment.HasErrors(), DataObject.Environment.FetchErrors(), invokeErrors, DateTime.Now, true, false, false); wfappUtils.WriteDebug(DataObject, debugState); } var testRunResult = Eval(resourceId, DataObject, test); if (DataObject.IsDebugMode()) { if (!DataObject.StopExecution) { var debugState = wfappUtils.GetDebugState(DataObject, StateType.End, DataObject.Environment.HasErrors(), DataObject.Environment.FetchErrors(), invokeErrors, DataObject.StartTime, false, true, true); DebugItem outputDebugItem = new DebugItem(); if (test != null) { var msg = test.FailureMessage; if (test.TestPassed) { msg = Warewolf.Resource.Messages.Messages.Test_PassedResult; } outputDebugItem.AddRange(new DebugItemServiceTestStaticDataParams(msg, test.TestFailing).GetDebugItemResult()); } debugState.AssertResultList.Add(outputDebugItem); wfappUtils.WriteDebug(DataObject, debugState); } var testAggregateDebugState = wfappUtils.GetDebugState(DataObject, StateType.TestAggregate, false, string.Empty, new ErrorResultTO(), DataObject.StartTime, false, false, false); AggregateTestResult(resourceId, test); DebugItem itemToAdd = new DebugItem(); if (test != null) { var msg = test.FailureMessage; if (test.TestPassed) { msg = Warewolf.Resource.Messages.Messages.Test_PassedResult; } itemToAdd.AddRange(new DebugItemServiceTestStaticDataParams(msg, test.TestFailing).GetDebugItemResult()); } testAggregateDebugState.AssertResultList.Add(itemToAdd); wfappUtils.WriteDebug(DataObject, testAggregateDebugState); if (testRunResult != null) { if (test != null) { test.Result.DebugForTest = TestDebugMessageRepo.Instance.FetchDebugItems(resourceId, test.TestName); } _request.ExecuteResult = serializer.SerializeToBuilder(testRunResult); } } else { AggregateTestResult(resourceId, test); if (test != null) { _request.ExecuteResult = serializer.SerializeToBuilder(test); } } result = DataObject.DataListID; } catch (InvalidWorkflowException iwe) { Dev2Logger.Error(iwe); var msg = iwe.Message; int start = msg.IndexOf("Flowchart ", StringComparison.Ordinal); to?.AddError(start > 0 ? GlobalConstants.NoStartNodeError : iwe.Message); var failureMessage = DataObject.Environment.FetchErrors(); wfappUtils.DispatchDebugState(DataObject, StateType.End, DataObject.Environment.HasErrors(), failureMessage, out invokeErrors, DataObject.StartTime, false, true); // ReSharper disable once PossibleNullReferenceException test.TestFailing = false; test.TestPassed = false; test.TestPending = false; test.TestInvalid = true; test.LastRunDate = DateTime.Now; Common.Utilities.PerformActionInsideImpersonatedContext(Common.Utilities.ServerUser, () => { TestCatalog.Instance.SaveTest(resourceId, test); }); var testRunResult = new TestRunResult { TestName = test.TestName }; if (test.TestInvalid) { testRunResult.RunTestResult = RunResult.TestInvalid; testRunResult.Message = failureMessage; Dev2Logger.Error($"Test {DataObject.TestName} for Resource {DataObject.ServiceName} ID {DataObject.ResourceID} marked invalid in exception for no start node"); } testRunResult.DebugForTest = TestDebugMessageRepo.Instance.FetchDebugItems(resourceId, test.TestName); if (_request != null) { _request.ExecuteResult = serializer.SerializeToBuilder(testRunResult); } } catch (Exception ex) { Dev2Logger.Error(ex); to.AddError(ex.Message); var failureMessage = DataObject.Environment.FetchErrors(); wfappUtils.DispatchDebugState(DataObject, StateType.End, DataObject.Environment.HasErrors(), failureMessage, out invokeErrors, DataObject.StartTime, false, true); // ReSharper disable once PossibleNullReferenceException test.TestFailing = false; test.TestPassed = false; test.TestPending = false; test.TestInvalid = true; test.LastRunDate = DateTime.Now; Common.Utilities.PerformActionInsideImpersonatedContext(Common.Utilities.ServerUser, () => { TestCatalog.Instance.SaveTest(resourceId, test); }); var testRunResult = new TestRunResult { TestName = test.TestName }; if (test.TestInvalid) { testRunResult.RunTestResult = RunResult.TestInvalid; testRunResult.Message = ex.Message; Dev2Logger.Error($"Test {DataObject.TestName} for Resource {DataObject.ServiceName} ID {DataObject.ResourceID} marked invalid in general exception"); } testRunResult.DebugForTest = TestDebugMessageRepo.Instance.FetchDebugItems(resourceId, test.TestName); _request.ExecuteResult = serializer.SerializeToBuilder(testRunResult); } return(result); }
Guid ExecuteWf(IServiceTestModelTO test, WfApplicationUtils wfappUtils, ErrorResultTO invokeErrors, Guid resourceId, Dev2JsonSerializer serializer) { Guid result; IExecutionToken exeToken = new ExecutionToken { IsUserCanceled = false }; DataObject.ExecutionToken = exeToken; if (DataObject.IsDebugMode()) { var debugState = wfappUtils.GetDebugState(DataObject, StateType.Start, DataObject.Environment.HasErrors(), DataObject.Environment.FetchErrors(), invokeErrors, DateTime.Now, true, false, false); wfappUtils.TryWriteDebug(DataObject, debugState); } var testRunResult = Eval(resourceId, DataObject, test); if (DataObject.IsDebugMode()) { if (!DataObject.StopExecution) { var debugState = wfappUtils.GetDebugState(DataObject, StateType.End, DataObject.Environment.HasErrors(), DataObject.Environment.FetchErrors(), invokeErrors, DataObject.StartTime, false, true, true); var outputDebugItem = new DebugItem(); if (test != null) { var msg = test.TestPassed ? Warewolf.Resource.Messages.Messages.Test_PassedResult : test.FailureMessage; outputDebugItem.AddRange(new DebugItemServiceTestStaticDataParams(msg, test.TestFailing).GetDebugItemResult()); } debugState.AssertResultList.Add(outputDebugItem); wfappUtils.TryWriteDebug(DataObject, debugState); } DebugState testAggregateDebugState; if (DataObject.StopExecution && DataObject.Environment.HasErrors()) { var existingErrors = DataObject.Environment.FetchErrors(); DataObject.Environment.AllErrors.Clear(); testAggregateDebugState = wfappUtils.GetDebugState(DataObject, StateType.TestAggregate, DataObject.Environment.HasErrors(), string.Empty, new ErrorResultTO(), DataObject.StartTime, false, false, false); SetTestFailureBasedOnExpectedError(test, existingErrors); } else { testAggregateDebugState = wfappUtils.GetDebugState(DataObject, StateType.TestAggregate, false, string.Empty, new ErrorResultTO(), DataObject.StartTime, false, false, false); AggregateTestResult(resourceId, test); } var itemToAdd = new DebugItem(); if (test != null) { var msg = test.FailureMessage; if (test.TestPassed) { msg = Warewolf.Resource.Messages.Messages.Test_PassedResult; } itemToAdd.AddRange(new DebugItemServiceTestStaticDataParams(msg, test.TestFailing).GetDebugItemResult()); } testAggregateDebugState.AssertResultList.Add(itemToAdd); wfappUtils.TryWriteDebug(DataObject, testAggregateDebugState); if (testRunResult != null) { if (test?.Result != null) { test.Result.DebugForTest = TestDebugMessageRepo.Instance.FetchDebugItems(resourceId, test.TestName); } _request.ExecuteResult = serializer.SerializeToBuilder(testRunResult); } } else { if (DataObject.StopExecution && DataObject.Environment.HasErrors()) { var existingErrors = DataObject.Environment.FetchErrors(); DataObject.Environment.AllErrors.Clear(); SetTestFailureBasedOnExpectedError(test, existingErrors); _request.ExecuteResult = serializer.SerializeToBuilder(test); } else { AggregateTestResult(resourceId, test); if (test != null) { _request.ExecuteResult = serializer.SerializeToBuilder(test); } } } result = DataObject.DataListID; return(result); }