コード例 #1
0
        private async Task UploadTestSubResultsAttachmentAsync(int testRunId,
                                                               int testResultId,
                                                               TestCaseSubResultData subResultData,
                                                               TestSubResult subresult,
                                                               int level,
                                                               CancellationToken cancellationToken)
        {
            if (level > TestManagementConstants.maxHierarchyLevelForSubresults || subresult == null || subResultData == null || subResultData.AttachmentData == null)
            {
                return;
            }

            string[] attachments = subResultData.AttachmentData.AttachmentsFilePathList?.ToArray();

            // remove duplicate entries
            HashSet <string> attachedFiles = GetUniqueTestRunFiles(attachments);

            if (attachedFiles != null && attachedFiles.Any())
            {
                var createAttachmentsTasks = attachedFiles
                                             .Select(async attachment =>
                {
                    TestAttachmentRequestModel reqModel = GetAttachmentRequestModel(attachment);
                    if (reqModel != null)
                    {
                        await _testResultsServer.CreateTestSubResultAttachmentAsync(reqModel, _projectName, testRunId, testResultId, subresult.Id, cancellationToken);
                    }
                });
                await Task.WhenAll(createAttachmentsTasks);
            }

            // Upload console log as attachment
            string consoleLog = subResultData.AttachmentData.ConsoleLog;
            TestAttachmentRequestModel attachmentRequestModel = GetConsoleLogAttachmentRequestModel(consoleLog);

            if (attachmentRequestModel != null)
            {
                await _testResultsServer.CreateTestSubResultAttachmentAsync(attachmentRequestModel, _projectName, testRunId, testResultId, subresult.Id, cancellationToken);
            }

            // Upload standard error as attachment
            string standardError = subResultData.AttachmentData.StandardError;
            TestAttachmentRequestModel stdErrAttachmentRequestModel = GetStandardErrorAttachmentRequestModel(standardError);

            if (stdErrAttachmentRequestModel != null)
            {
                await _testResultsServer.CreateTestSubResultAttachmentAsync(stdErrAttachmentRequestModel, _projectName, testRunId, testResultId, subresult.Id, cancellationToken);
            }

            if (subResultData.SubResultData != null)
            {
                for (int i = 0; i < subResultData.SubResultData.Count; ++i)
                {
                    await UploadTestSubResultsAttachmentAsync(testRunId, testResultId, subResultData.SubResultData[i], subresult.SubResults[i], level + 1, cancellationToken);
                }
            }
        }
コード例 #2
0
        private static void ConvertSubResults(TestCaseSubResultData testCaseSubResultData, TestSubResult testSubResultWebApi)
        {
            if (testCaseSubResultData.SubResultData == null || !testCaseSubResultData.SubResultData.Any())
            {
                return;
            }

            testSubResultWebApi.SubResults = new List <TestSubResult>();
            foreach (var subResultData in testCaseSubResultData.SubResultData)
            {
                var subResultWebApi = new TestSubResult();
                TestCaseSubResultDataConverter.Convert(subResultData, subResultWebApi);
                testSubResultWebApi.SubResults.Add(subResultWebApi);
            }
        }
コード例 #3
0
 public static void Convert(TestCaseSubResultData testCaseSubResultData, TestSubResult testSubResultWebApi)
 {
     testSubResultWebApi.CompletedDate   = testCaseSubResultData.CompletedDate;
     testSubResultWebApi.Comment         = testCaseSubResultData.Comment;
     testSubResultWebApi.ComputerName    = testCaseSubResultData.ComputerName;
     testSubResultWebApi.Configuration   = testCaseSubResultData.Configuration;
     testSubResultWebApi.CustomFields    = testCaseSubResultData.CustomFields;
     testSubResultWebApi.DurationInMs    = testCaseSubResultData.DurationInMs;
     testSubResultWebApi.DisplayName     = testCaseSubResultData.DisplayName;
     testSubResultWebApi.ErrorMessage    = testCaseSubResultData.ErrorMessage;
     testSubResultWebApi.Id              = testCaseSubResultData.Id;
     testSubResultWebApi.LastUpdatedDate = testCaseSubResultData.LastUpdatedDate;
     testSubResultWebApi.Outcome         = testCaseSubResultData.Outcome;
     testSubResultWebApi.ParentId        = testCaseSubResultData.ParentId;
     testSubResultWebApi.ResultGroupType = testCaseSubResultData.ResultGroupType;
     testSubResultWebApi.StackTrace      = testCaseSubResultData.StackTrace;
     testSubResultWebApi.SequenceId      = testCaseSubResultData.SequenceId;
     testSubResultWebApi.StartedDate     = testCaseSubResultData.StartedDate;
     testSubResultWebApi.TestResult      = testCaseSubResultData.TestResult;
     testSubResultWebApi.Url             = testCaseSubResultData.Url;
     ConvertSubResults(testCaseSubResultData, testSubResultWebApi);
 }
コード例 #4
0
        public TestRunPublisherTests()
        {
            _attachmentFilePath = "attachment.txt";

            File.WriteAllText(_attachmentFilePath, "asdf");
            _testRunContext = new TestRunContext("owner", "platform", "config", 1, "builduri", "releaseuri", "releaseenvuri");

            _reader = new Mock <IResultReader>();
            _reader.Setup(x => x.ReadResults(It.IsAny <IExecutionContext>(), It.IsAny <string>(), It.IsAny <TestRunContext>()))
            .Callback <IExecutionContext, string, TestRunContext>
                ((executionContext, filePath, runContext) =>
            {
                _runContext      = runContext;
                _resultsFilepath = filePath;
            })
            .Returns((IExecutionContext executionContext, string filePath, TestRunContext runContext) =>
            {
                TestRunData trd = new TestRunData(
                    name: "xyz",
                    buildId: runContext.BuildId,
                    completedDate: "",
                    state: "InProgress",
                    isAutomated: true,
                    dueDate: "",
                    type: "",
                    buildFlavor: runContext.Configuration,
                    buildPlatform: runContext.Platform,
                    releaseUri: runContext.ReleaseUri,
                    releaseEnvironmentUri: runContext.ReleaseEnvironmentUri
                    );
                trd.Attachments = new string[] { "attachment.txt" };
                return(trd);
            });

            _testResultServer = new Mock <ITestResultsServer>();
            _testResultServer.Setup(x => x.InitializeServer(It.IsAny <VssConnection>(), It.IsAny <IExecutionContext>()));
            _testResultServer.Setup(x => x.AddTestResultsToTestRunAsync(It.IsAny <TestCaseResult[]>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Callback <TestCaseResult[], string, int, CancellationToken>
                ((currentBatch, projectName, testRunId, cancellationToken) =>
            {
                _batchSizes.Add(currentBatch.Length);
                _resultCreateModels = currentBatch;
            })
            .Returns(() =>
            {
                List <TestCaseResult> resultsList = new List <TestCaseResult>();
                int i = 0;
                int j = 1;
                foreach (TestCaseResult resultCreateModel in _resultCreateModels)
                {
                    List <TestSubResult> SubResults = null;
                    if (resultCreateModel.SubResults != null)
                    {
                        SubResults = new List <TestSubResult>();
                        foreach (var subresultdata in resultCreateModel.SubResults)
                        {
                            var subResult = new TestSubResult();
                            subResult.Id  = j++;
                            SubResults.Add(subResult);
                        }
                    }
                    resultsList.Add(new TestCaseResult()
                    {
                        Id = ++i, SubResults = SubResults
                    });
                }
                return(Task.FromResult(resultsList));
            });

            _testResultServer.Setup(x => x.CreateTestRunAsync(It.IsAny <string>(), It.IsAny <RunCreateModel>(), It.IsAny <CancellationToken>()))
            .Callback <string, RunCreateModel, CancellationToken>
                ((projectName, testRunData, cancellationToken) =>
            {
                _projectId = projectName;
                _testRun   = (TestRunData)testRunData;
            })
            .Returns(Task.FromResult(new TestRun()
            {
                Name = "TestRun", Id = 1
            }));

            _testResultServer.Setup(x => x.UpdateTestRunAsync(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <RunUpdateModel>(), It.IsAny <CancellationToken>()))
            .Callback <string, int, RunUpdateModel, CancellationToken>
                ((projectName, testRunId, updateModel, cancellationToken) =>
            {
                _runId            = testRunId;
                _projectId        = projectName;
                _updateProperties = updateModel;
            })
            .Returns(Task.FromResult(new TestRun()
            {
                Name = "TestRun", Id = 1
            }));

            _testResultServer.Setup(x => x.CreateTestRunAttachmentAsync(
                                        It.IsAny <TestAttachmentRequestModel>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Callback <TestAttachmentRequestModel, string, int, CancellationToken>
                ((reqModel, projectName, testRunId, cancellationToken) =>
            {
                _attachmentRequestModel = reqModel;
                _projectId = projectName;
                _runId     = testRunId;
            })
            .Returns(Task.FromResult(new TestAttachmentReference()));

            _testResultServer.Setup(x => x.CreateTestResultAttachmentAsync(It.IsAny <TestAttachmentRequestModel>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Callback <TestAttachmentRequestModel, string, int, int, CancellationToken>
                ((reqModel, projectName, testRunId, testCaseResultId, cancellationToken) =>
            {
                if (_resultsLevelAttachments.ContainsKey(testCaseResultId))
                {
                    _resultsLevelAttachments[testCaseResultId].Add(reqModel);
                }
                else
                {
                    _resultsLevelAttachments.Add(testCaseResultId, new List <TestAttachmentRequestModel>()
                    {
                        reqModel
                    });
                }
            })
            .Returns(Task.FromResult(new TestAttachmentReference()));
            _testResultServer.Setup(x => x.CreateTestSubResultAttachmentAsync(It.IsAny <TestAttachmentRequestModel>(), It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Callback <TestAttachmentRequestModel, string, int, int, int, CancellationToken>
                ((reqModel, projectName, testRunId, testCaseResultId, testSubResultId, cancellationToken) =>
            {
                if (_subResultsLevelAttachments.ContainsKey(testCaseResultId))
                {
                    if (_subResultsLevelAttachments[testCaseResultId].ContainsKey(testSubResultId))
                    {
                        _subResultsLevelAttachments[testCaseResultId][testSubResultId].Add(reqModel);
                    }
                    else
                    {
                        _subResultsLevelAttachments[testCaseResultId].Add(testSubResultId, new List <TestAttachmentRequestModel>()
                        {
                            reqModel
                        });
                    }
                }
                else
                {
                    Dictionary <int, List <TestAttachmentRequestModel> > subResulAtt = new Dictionary <int, List <TestAttachmentRequestModel> >();
                    subResulAtt.Add(testSubResultId, new List <TestAttachmentRequestModel>()
                    {
                        reqModel
                    });
                    _subResultsLevelAttachments.Add(testCaseResultId, subResulAtt);
                }
            })
            .Returns(Task.FromResult(new TestAttachmentReference()));
        }