public string ResumeJob(IDSFDataObject dsfDataObject, string jobId, bool overrideVariables, string environment) { try { var monitoringApi = _jobStorage.GetMonitoringApi(); var jobDetails = monitoringApi.JobDetails(jobId); var currentState = jobDetails.History.OrderBy(s => s.CreatedAt).LastOrDefault(); if (currentState?.StateName != "Scheduled" && currentState?.StateName != "Failed") { return(GlobalConstants.Failed); } var values = jobDetails.Job.Args[0] as Dictionary <string, StringBuilder>; values.TryGetValue("environment", out StringBuilder persistedEnvironment); var decryptEnvironment = persistedEnvironment.ToString().CanBeDecrypted() ? DpapiWrapper.Decrypt(persistedEnvironment.ToString()) : persistedEnvironment.ToString(); if (overrideVariables) { if (values.ContainsKey("environment")) { values["environment"] = new StringBuilder(environment); } } else { values["environment"] = new StringBuilder(decryptEnvironment); } values.TryGetValue("currentuserprincipal", out StringBuilder currentUserPrincipal); var decryptCurrentUserPrincipal = currentUserPrincipal.ToString().CanBeDecrypted() ? DpapiWrapper.Decrypt(currentUserPrincipal.ToString()) : currentUserPrincipal.ToString(); if (values.ContainsKey("environment")) { values["currentuserprincipal"] = new StringBuilder(decryptCurrentUserPrincipal); } var workflowResume = new WorkflowResume(); var result = workflowResume.Execute(values, null); var serializer = new Dev2JsonSerializer(); var executeMessage = serializer.Deserialize <ExecuteMessage>(result); if (executeMessage.HasError) { var failedState = new FailedState(new Exception(executeMessage.Message?.ToString())); _client.ChangeState(jobId, failedState, ScheduledState.StateName); return(GlobalConstants.Failed); } values.TryGetValue("resourceID", out StringBuilder workflowId); values.TryGetValue("environment", out StringBuilder environments); values.TryGetValue("startActivityId", out StringBuilder startActivityId); values.TryGetValue("versionNumber", out StringBuilder versionNumber); values.TryGetValue("currentprincipal", out StringBuilder currentprincipal); _stateNotifier = dsfDataObject.StateNotifier; var audit = new Audit { WorkflowID = workflowId?.ToString(), Environment = environments?.ToString(), VersionNumber = versionNumber?.ToString(), NextActivityId = startActivityId?.ToString(), AuditDate = DateTime.Now, AuditType = "LogResumeExecutionState", LogLevel = LogLevel.Info, User = currentprincipal?.ToString() }; _stateNotifier?.LogAdditionalDetail(audit, nameof(ResumeJob)); var manuallyResumedState = new ManuallyResumedState(environments?.ToString()); _client.ChangeState(jobId, manuallyResumedState, currentState?.StateName); return(GlobalConstants.Success); } catch (Exception ex) { _stateNotifier?.LogExecuteException(ex, this); Dev2Logger.Error(nameof(ResumeJob), ex, GlobalConstants.WarewolfError); throw new Exception(ex.Message); } }
public void TriggersCatalog_SaveTriggerQueue_WhenHasTriggerId_ShouldSave_NotUpdateTriggerId() { var queueTriggersPath = QueueTriggersPath; var source = "TestResource"; var queue = "TestQueueName"; var workflowName = "TestWorkflow"; var triggerId = Guid.NewGuid(); var mockResource = new Mock <IResource>(); mockResource.Setup(resource => resource.ResourceName).Returns(source); mockResource.Setup(resource => resource.ResourceID).Returns(Guid.NewGuid()); var triggerQueueEvent = new TriggerQueue { QueueSourceId = mockResource.Object.ResourceID, QueueName = queue, WorkflowName = workflowName, TriggerId = triggerId }; var serializer = new Dev2.Common.Serializers.Dev2JsonSerializer(); var mockSerializer = new Mock <IBuilderSerializer>(); mockSerializer.Setup(o => o.Serialize(It.IsAny <ITriggerQueue>())).Returns(serializer.Serialize(triggerQueueEvent)); var serializerInstance = mockSerializer.Object; var path = queueTriggersPath + "\\" + triggerId + ".bite"; var directory = new Mock <IDirectory>().Object; var mockFile = new Mock <IFile>(); var savedData = string.Empty; mockFile.Setup(o => o.WriteAllText(It.IsAny <string>(), It.IsAny <string>())).Callback <string, string>((filename, data) => { savedData = data; }); var file = mockFile.Object; var fileSystemWatcherWrapper = new Mock <IFileSystemWatcher>().Object; var triggerCatalog = GetTriggersCatalog(directory, file, queueTriggersPath, serializerInstance, fileSystemWatcherWrapper); triggerCatalog.SaveTriggerQueue(triggerQueueEvent); mockFile.Verify(o => o.WriteAllText(It.IsAny <string>(), It.IsAny <string>()), Times.Once); var isEncrypted = DpapiWrapper.CanBeDecrypted(savedData); Assert.IsTrue(isEncrypted); var decryptedTrigger = DpapiWrapper.Decrypt(savedData); var theSavedTrigger = serializer.Deserialize <ITriggerQueue>(decryptedTrigger); Assert.IsNotNull(theSavedTrigger); Assert.AreEqual(workflowName, theSavedTrigger.WorkflowName); Assert.AreEqual(triggerId, theSavedTrigger.TriggerId); mockFile.Setup(o => o.Exists(path)).Returns(() => savedData != string.Empty); triggerCatalog.DeleteTriggerQueue(triggerQueueEvent); mockFile.Verify(o => o.Delete(path), Times.Once); Assert.AreEqual(0, triggerCatalog.Queues.Count); }