diff --git a/src/.sonarlint/Monai.Deploy.WorkflowManager.slconfig b/src/.sonarlint/Monai.Deploy.WorkflowManager.slconfig index aaa79edd2..11c306c29 100644 --- a/src/.sonarlint/Monai.Deploy.WorkflowManager.slconfig +++ b/src/.sonarlint/Monai.Deploy.WorkflowManager.slconfig @@ -1,15 +1,15 @@ -{ - "ServerUri": "https://sonarcloud.io/", - "Organization": { - "Key": "project-monai", - "Name": "Project MONAI" - }, - "ProjectKey": "Project-MONAI_monai-deploy-workflow-manager", - "ProjectName": "monai-deploy-workflow-manager", - "Profiles": { - "CSharp": { - "ProfileKey": "AX96ONQSnTk2GEVJ9ILJ", - "ProfileTimestamp": "2022-03-31T10:15:41Z" - } - } +{ + "ServerUri": "https://sonarcloud.io/", + "Organization": { + "Key": "project-monai", + "Name": "Project MONAI" + }, + "ProjectKey": "Project-MONAI_monai-deploy-workflow-manager", + "ProjectName": "monai-deploy-workflow-manager", + "Profiles": { + "CSharp": { + "ProfileKey": "AX96ONQSnTk2GEVJ9ILJ", + "ProfileTimestamp": "2022-07-05T10:19:10Z" + } + } } \ No newline at end of file diff --git a/src/.sonarlint/project-monai_monai-deploy-workflow-manager/CSharp/SonarLint.xml b/src/.sonarlint/project-monai_monai-deploy-workflow-manager/CSharp/SonarLint.xml index c6f7cc2ab..9400e26cc 100644 --- a/src/.sonarlint/project-monai_monai-deploy-workflow-manager/CSharp/SonarLint.xml +++ b/src/.sonarlint/project-monai_monai-deploy-workflow-manager/CSharp/SonarLint.xml @@ -1,89 +1,89 @@ - - - - - sonar.cs.analyzeGeneratedCode - false - - - sonar.cs.file.suffixes - .cs - - - sonar.cs.ignoreHeaderComments - true - - - sonar.cs.roslyn.ignoreIssues - false - - - - - S107 - - - max - 7 - - - - - S110 - - - max - 5 - - - - - S1479 - - - maximum - 30 - - - - - S2342 - - - flagsAttributeFormat - ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$ - - - format - ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ - - - - - S2436 - - - max - 2 - - - maxMethod - 3 - - - - - S3776 - - - propertyThreshold - 3 - - - threshold - 15 - - - - - + + + + + sonar.cs.analyzeGeneratedCode + false + + + sonar.cs.file.suffixes + .cs + + + sonar.cs.ignoreHeaderComments + true + + + sonar.cs.roslyn.ignoreIssues + false + + + + + S107 + + + max + 7 + + + + + S110 + + + max + 5 + + + + + S1479 + + + maximum + 30 + + + + + S2342 + + + flagsAttributeFormat + ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$ + + + format + ^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$ + + + + + S2436 + + + max + 2 + + + maxMethod + 3 + + + + + S3776 + + + propertyThreshold + 3 + + + threshold + 15 + + + + + \ No newline at end of file diff --git a/src/.sonarlint/project-monai_monai-deploy-workflow-managercsharp.ruleset b/src/.sonarlint/project-monai_monai-deploy-workflow-managercsharp.ruleset index 9189ba28c..abde5d2c4 100644 --- a/src/.sonarlint/project-monai_monai-deploy-workflow-managercsharp.ruleset +++ b/src/.sonarlint/project-monai_monai-deploy-workflow-managercsharp.ruleset @@ -1,380 +1,376 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/.sonarlint/sonar.settings.json b/src/.sonarlint/sonar.settings.json new file mode 100644 index 000000000..10d827d5c --- /dev/null +++ b/src/.sonarlint/sonar.settings.json @@ -0,0 +1 @@ +{"sonar.exclusions":[],"sonar.global.exclusions":["**/build-wrapper-dump.json"],"sonar.inclusions":[]} \ No newline at end of file diff --git a/src/WorkflowManager/Database/Repositories/TasksRepository.cs b/src/WorkflowManager/Database/Repositories/TasksRepository.cs index 33490625f..f25c287da 100644 --- a/src/WorkflowManager/Database/Repositories/TasksRepository.cs +++ b/src/WorkflowManager/Database/Repositories/TasksRepository.cs @@ -113,7 +113,7 @@ public async Task> GetAllAsync(int? skip, int? limit) { var builder = Builders.Filter; - var filter = builder.Eq(wf => wf.WorkflowId, workflowInstanceId); + var filter = builder.Eq(wf => wf.Id, workflowInstanceId); var result = await _workflowInstanceCollection .Find(filter) diff --git a/src/WorkflowManager/Logging/Monai.Deploy.WorkflowManager.Logging.csproj b/src/WorkflowManager/Logging/Monai.Deploy.WorkflowManager.Logging.csproj index 5c3ceb26d..b1af8cf9c 100644 --- a/src/WorkflowManager/Logging/Monai.Deploy.WorkflowManager.Logging.csproj +++ b/src/WorkflowManager/Logging/Monai.Deploy.WorkflowManager.Logging.csproj @@ -19,8 +19,13 @@ net6.0 enable + ..\.sonarlint\project-monai_monai-deploy-workflow-managercsharp.ruleset + + + + diff --git a/src/WorkflowManager/PayloadListener/Monai.Deploy.WorkflowManager.PayloadListener.csproj b/src/WorkflowManager/PayloadListener/Monai.Deploy.WorkflowManager.PayloadListener.csproj index 069012969..072c981d3 100644 --- a/src/WorkflowManager/PayloadListener/Monai.Deploy.WorkflowManager.PayloadListener.csproj +++ b/src/WorkflowManager/PayloadListener/Monai.Deploy.WorkflowManager.PayloadListener.csproj @@ -44,6 +44,7 @@ true true + ..\.sonarlint\project-monai_monai-deploy-workflow-managercsharp.ruleset diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/TasksApi.feature b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/TasksApi.feature new file mode 100644 index 000000000..2348fa599 --- /dev/null +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Features/TasksApi.feature @@ -0,0 +1,64 @@ +# Copyright 2022 MONAI Consortium +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +Feature: Tasks Api + +API to retrieve task status. + +@Task_Api +Scenario Outline: Get details of a Task with valid payload + Given I have an endpoint /tasks + And I have a Task Request body + And I have a Workflow Instance WorkflowInstance_TaskApi_1 with no artifacts + When I send a GET request + Then I will get a 200 response + And I can see an individual task is returned + Examples: + | taskRequest | + | Valid_Task_Details_1 | + | Valid_Task_Details_2 | + +@Task_Api +Scenario Outline: Get details of a Task with invalid payload + Given I have an endpoint /tasks + And I have a Task Request body + And I have a Workflow Instance WorkflowInstance_TaskApi_1 with no artifacts + When I send a GET request + Then I will get a 400 response + Examples: + | taskRequest | + | Invalid_WorkflowID_Task_Details_1 | + | Invalid_ExecutionID_Task_Details_2 | + | Invalid_TaskID_Task_Details_3 | + +@Task_Api +Scenario Outline: Get details of a Task with non-existent id payload + Given I have an endpoint /tasks + And I have a Task Request body + And I have a Workflow Instance WorkflowInstance_TaskApi_1 with no artifacts + When I send a GET request + Then I will get a 404 response + Examples: + | taskRequest | + | Non_Existent_WorkflowID_Task_Details_1 | + | Non_Existent_ExecutionID_Task_Details_2 | + | Non_Existent_TaskID_Task_Details_3 | + +@Task_Api @ignore #/tasks/running endpoint needs some dev work to ensure the filter works correctly. Ticket https://github.com/Project-MONAI/monai-deploy-workflow-manager/issues/308 +Scenario: Get details of all Tasks + Given I have an endpoint /tasks/running?pageNumber=1&pageSize=10 + And I have a Workflow Instance WorkflowInstance_TaskApi_1 with no artifacts + When I send a GET request + Then I will get a 200 response + And I can see task payload is returned diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/CommonApiStepDefinitions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/CommonApiStepDefinitions.cs index 1f09dedf1..e04f33b7e 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/CommonApiStepDefinitions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/CommonApiStepDefinitions.cs @@ -58,6 +58,13 @@ public void GivenIHaveABody(string name) Support.HttpRequestMessageExtensions.AddJsonBody(ApiHelper.Request, DataHelper.GetWorkflowObjectTestData(name)); } + [When(@"I have a Task Request body (.*)")] + [Given(@"I have a Task Request body (.*)")] + public void GivenIHaveTaskRequestBody(string name) + { + Support.HttpRequestMessageExtensions.AddJsonBody(ApiHelper.Request, DataHelper.GetTaskRequestTestData(name)); + } + [Then(@"I will recieve the error message (.*)")] public void ThenIWillRecieveTheCorrectErrorMessage(string message) { diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/TasksApiStepDefinitions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/TasksApiStepDefinitions.cs new file mode 100644 index 000000000..a1d074147 --- /dev/null +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/StepDefinitions/TasksApiStepDefinitions.cs @@ -0,0 +1,45 @@ +/* + * Copyright 2022 MONAI Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using BoDi; +using Monai.Deploy.WorkflowManager.Contracts.Models; +using Monai.Deploy.WorkflowManager.IntegrationTests.Support; +using Newtonsoft.Json; + +namespace Monai.Deploy.WorkflowManager.WorkflowExecutor.IntegrationTests.StepDefinitions +{ + [Binding] + public class TasksApiStepDefinitions + { + public TasksApiStepDefinitions(ObjectContainer objectContainer) + { + DataHelper = objectContainer.Resolve(); + ApiHelper = objectContainer.Resolve(); + Assertions = new Assertions(objectContainer); + } + + public DataHelper DataHelper { get; } + public ApiHelper ApiHelper { get; } + public Assertions Assertions { get; } + + [Then(@"I can see an individual task is returned")] + public void ThenICanSeeAnIndividualTaskIsReturned() + { + var response = JsonConvert.DeserializeObject(ApiHelper.Response.Content.ReadAsStringAsync().Result); + Assertions.AssertTaskPayload(DataHelper.WorkflowInstances, response); + } + } +} diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs index a22d804f7..95df4b14a 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/Assertions.cs @@ -32,6 +32,22 @@ public Assertions(ObjectContainer objectContainer) MinioClient = objectContainer.Resolve(); } + public void AssertTaskPayload(List workflowInstances, TaskExecution? response) + { + foreach (var workflowInstance in workflowInstances) + { + var taskExecution = workflowInstance.Tasks.First(x => x.TaskId.Equals(response?.TaskId)); + + if (taskExecution != null) + { + taskExecution.Should().BeEquivalentTo(response, options => options.Excluding(x => x.TaskStartTime)); + return; + } + } + + throw new Exception($"TaskId={response.TaskId} was not found in any workflow instances"); + } + public void AssertWorkflowInstanceMatchesExpectedWorkflow(WorkflowInstance workflowInstance, WorkflowRevision workflowRevision, WorkflowRequestMessage workflowRequestMessage) { workflowInstance.PayloadId.Should().Match(workflowRequestMessage.PayloadId.ToString()); diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/DataHelper.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/DataHelper.cs index 0330e4c08..8239bda1a 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/DataHelper.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/Support/DataHelper.cs @@ -17,6 +17,7 @@ using Monai.Deploy.Messaging.Events; using Monai.Deploy.WorkflowManager.Contracts.Models; using Monai.Deploy.WorkflowManager.IntegrationTests.Models; +using Monai.Deploy.WorkflowManager.Models; using Monai.Deploy.WorkflowManager.WorkflowExecutor.IntegrationTests.TestData; using Polly; using Polly.Retry; @@ -57,6 +58,18 @@ public DataHelper(RabbitConsumer taskDispatchConsumer, RabbitConsumer exportRequ RetryPayloadCollections = Policy>.Handle().WaitAndRetry(retryCount: 20, sleepDurationProvider: _ => TimeSpan.FromMilliseconds(500)); } + public TasksRequest GetTaskRequestTestData(string name) + { + var taskRequest = TaskRequestsTestData.TestData.FirstOrDefault(c => c.Name.Equals(name)); + + if (taskRequest?.TaskRequest == null) + { + throw new Exception($"Task Request {name} does not have any applicable test data, please check and try again!"); + } + + return taskRequest.TaskRequest; + } + public WorkflowRevision GetWorkflowRevisionTestData(string name) { var workflowRevision = WorkflowRevisionsTestData.TestData.FirstOrDefault(c => c.Name.Equals(name)); diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/TaskRequestTestData.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/TaskRequestTestData.cs new file mode 100644 index 000000000..064acc4a6 --- /dev/null +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/TaskRequestTestData.cs @@ -0,0 +1,114 @@ +/* + * Copyright 2022 MONAI Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using Monai.Deploy.WorkflowManager.Models; + +namespace Monai.Deploy.WorkflowManager.WorkflowExecutor.IntegrationTests.TestData +{ + public class TaskRequestTestData + { + public string? Name { get; set; } + + public TasksRequest? TaskRequest { get; set; } + } + + public static class TaskRequestsTestData + { + public static List TestData = new List() + { + new TaskRequestTestData + { + Name = "Valid_Task_Details_1", + TaskRequest = new TasksRequest() + { + WorkflowInstanceId = "44a63094-9e36-4ba4-9fea-8e9b76aa875b", + ExecutionId = "8ff3ea90-0113-4071-9b92-5068956daeff", + TaskId = "7b8ea05b-8abe-4848-928d-d55f5eef1bc3", + } + }, + new TaskRequestTestData + { + Name = "Valid_Task_Details_2", + TaskRequest = new TasksRequest() + { + WorkflowInstanceId = "44a63094-9e36-4ba4-9fea-8e9b76aa875b", + ExecutionId = "a1cd5b89-85e8-4d32-b9aa-bdbc0f4bbba5", + TaskId = "953c0236-5292-4186-80ee-ef7d4073220b", + } + }, + new TaskRequestTestData + { + Name = "Invalid_WorkflowID_Task_Details_1", + TaskRequest = new TasksRequest() + { + WorkflowInstanceId = "NotAGUID", + ExecutionId = "a1cd5b89-85e8-4d32-b9aa-bdbc0f4bbba5", + TaskId = "953c0236-5292-4186-80ee-ef7d4073220b", + } + }, + new TaskRequestTestData + { + Name = "Invalid_ExecutionID_Task_Details_2", + TaskRequest = new TasksRequest() + { + WorkflowInstanceId = "44a63094-9e36-4ba4-9fea-8e9b76aa875b", + ExecutionId = "NotAGUID", + TaskId = "953c0236-5292-4186-80ee-ef7d4073220b", + } + }, + new TaskRequestTestData + { + Name = "Invalid_TaskID_Task_Details_3", + TaskRequest = new TasksRequest() + { + WorkflowInstanceId = "44a63094-9e36-4ba4-9fea-8e9b76aa875b", + ExecutionId = "a1cd5b89-85e8-4d32-b9aa-bdbc0f4bbba5", + TaskId = "NotAGUID", + } + }, + new TaskRequestTestData + { + Name = "Non_Existent_WorkflowID_Task_Details_1", + TaskRequest = new TasksRequest() + { + WorkflowInstanceId = "0c533e6d-8c86-422b-8564-00f68aff6e20", + ExecutionId = "a1cd5b89-85e8-4d32-b9aa-bdbc0f4bbba5", + TaskId = "953c0236-5292-4186-80ee-ef7d4073220b", + } + }, + new TaskRequestTestData + { + Name = "Non_Existent_ExecutionID_Task_Details_2", + TaskRequest = new TasksRequest() + { + WorkflowInstanceId = "44a63094-9e36-4ba4-9fea-8e9b76aa875b", + ExecutionId = "60544cb8-d475-4271-8ead-8ef698c0da99", + TaskId = "953c0236-5292-4186-80ee-ef7d4073220b", + } + }, + new TaskRequestTestData + { + Name = "Non_Existent_TaskID_Task_Details_3", + TaskRequest = new TasksRequest() + { + WorkflowInstanceId = "44a63094-9e36-4ba4-9fea-8e9b76aa875b", + ExecutionId = "a1cd5b89-85e8-4d32-b9aa-bdbc0f4bbba5", + TaskId = "c16640cd-af88-495c-8c7e-fcbfbd740179", + } + } + }; + } +} diff --git a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowInstanceTestData.cs b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowInstanceTestData.cs index cc8f4b986..11536955a 100644 --- a/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowInstanceTestData.cs +++ b/tests/IntegrationTests/WorkflowExecutor.IntegrationTests/TestData/WorkflowInstanceTestData.cs @@ -1116,6 +1116,118 @@ public static WorkflowInstance CreateWorkflowInstance(string workflowName) Name = "TwoTask_Context.Executions.Task_id.Output_Dir_Mandatory=Null", WorkflowInstance = CreateWorkflowInstance("TwoTask_Context.Executions.Task_id.Output_Dir_Mandatory=Null") }, + new WorkflowInstanceTestData() + { + Name = "WorkflowInstance_TaskApi_1", + WorkflowInstance = new WorkflowInstance() + { + Id = "44a63094-9e36-4ba4-9fea-8e9b76aa875b", + AeTitle = "Ae_test", + WorkflowId = "a971f5f8-68fa-4cd0-ad34-f20b66675d21", + PayloadId = "e908ff53-d808-4c9b-82b6-698b8c60e811", + StartTime = DateTime.Now, + Status = Status.Created, + BucketId = TestExecutionConfig.MinioConfig.Bucket, + InputMetaData = new Dictionary() + { + { "", "" } + }, + Tasks = new List + { + new TaskExecution() + { + ExecutionId = "8ff3ea90-0113-4071-9b92-5068956daeff", + TaskId = "7b8ea05b-8abe-4848-928d-d55f5eef1bc3", + TaskType = "router", + Status = TaskExecutionStatus.Accepted, + InputArtifacts = null, + OutputArtifacts = null, + }, + new TaskExecution() + { + ExecutionId = "a1cd5b89-85e8-4d32-b9aa-bdbc0f4bbba5", + TaskId = "953c0236-5292-4186-80ee-ef7d4073220b", + TaskType = "export", + Status = TaskExecutionStatus.Succeeded, + InputArtifacts = new Dictionary() + { + {"key_1", "value_1" } + }, + OutputArtifacts = new Dictionary() + { + {"key_1", "value_1" } + }, + OutputDirectory = "payload_id/dcm", + Reason = FailureReason.None, + PreviousTaskId = "PreviousTask", + ExecutionStats = new Dictionary() + { + {"key_1", "value_1" } + }, + ResultMetadata = new Dictionary() + { + {"key_1", "value_1" }, + {"key_2", 1 } + }, + InputParameters = new Dictionary() + { + {"key_1", "value_1" }, + {"key_2", 1 } + }, + TaskPluginArguments = new Dictionary() + { + {"key_1", "value_1" } + }, + TaskStartTime = DateTime.UtcNow + }, + new TaskExecution() + { + ExecutionId = "d1e0a3b7-3026-4cf7-ba04-71c1f50d98f6", + TaskId = "b3b537ae-79e8-4d13-9154-982ee4743595", + TaskType = "argo", + Status = TaskExecutionStatus.Created, + InputArtifacts = null, + OutputArtifacts = null, + }, + new TaskExecution() + { + ExecutionId = "666faff9-c702-48a9-ae37-5d92e1f6b324", + TaskId = "aad3762a-5c49-499b-a368-e5f9b98408e4", + TaskType = "export", + Status = TaskExecutionStatus.Exported, + InputArtifacts = null, + OutputArtifacts = null, + }, + new TaskExecution() + { + ExecutionId = "3b30b992-a87b-4885-9176-824b751f076e", + TaskId = "1ecdcc90-a999-48fa-a507-99d4ea7c9cb0", + TaskType = "argo", + Status = TaskExecutionStatus.Canceled, + InputArtifacts = null, + OutputArtifacts = null, + }, + new TaskExecution() + { + ExecutionId = "d9b54e70-d016-476d-b9c3-86ffb17ef786", + TaskId = "a08920eb-0895-4272-ad81-54f2046d8438", + TaskType = "argo", + Status = TaskExecutionStatus.Succeeded, + InputArtifacts = null, + OutputArtifacts = null, + }, + new TaskExecution() + { + ExecutionId = "0c01f526-e574-40df-b21b-99cd16f5c305", + TaskId = "93d8e1c5-39b1-43f0-9bac-372c438b91c0", + TaskType = "argo", + Status = TaskExecutionStatus.Failed, + InputArtifacts = null, + OutputArtifacts = null, + }, + } + } + }, }; } }