コード例 #1
0
ファイル: JobRunner.cs プロジェクト: hforeste/Stampy
        public static async Task <CloudStampyParameters> TestRunner([QueueTrigger("test-jobs", Connection = "StampyStorageConnectionString")] CloudStampyParameters request)
        {
            var nextJob = request.Copy();

            nextJob.JobId = Guid.NewGuid().ToString();

            if ((request.JobType & StampyJobType.Test) == StampyJobType.Test && (request.FlowStatus == Status.InProgress || request.FlowStatus == default(Status)))
            {
                if (request.TestCategories.Any() && !string.IsNullOrWhiteSpace(request.BuildPath) && !string.IsNullOrWhiteSpace(request.CloudName))
                {
                    var resultTasks = new List <Task <JobResult> >();
                    var results     = new List <JobResult>();

                    foreach (var testCategorySet in request.TestCategories)
                    {
                        foreach (var testCategory in testCategorySet)
                        {
                            var testJob = request.Copy();
                            testJob.JobId          = Guid.NewGuid().ToString();
                            testJob.TestCategories = new List <List <string> > {
                                new List <string> {
                                    testCategory
                                }
                            };

                            //test should timeout after 180 minutes.
                            //TODO double check if function runtime has default timeout
                            resultTasks.Add(ExecuteJob(testJob, StampyJobType.Test, TimeSpan.FromHours(5)));
                        }

                        var testCategoryResults = await Task.WhenAll(resultTasks);

                        resultTasks.Clear();
                        results.AddRange(testCategoryResults);
                    }

                    nextJob.FlowStatus = JobStatusHelper.DetermineOverallJobStatus(results);

                    if ((nextJob.JobType & StampyJobType.RemoveResources) != StampyJobType.RemoveResources)
                    {
                        nextJob.JobType = nextJob.JobType | StampyJobType.RemoveResources;
                    }
                    nextJob.ExpiryDate = DateTime.UtcNow.AddHours(1).ToString();
                }
            }

            return(nextJob);
        }