in tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/board/BoardService.java [182:279]
public BoardDefectIssueUi processIssue(ITeamcityIgnited tcIgn,
Optional<FatBuildCompacted> rebuild,
DefectIssue issue, int projectId) {
Optional<ITest> testResult;
String issueType = compactor.getStringFromId(issue.issueTypeCode());
boolean suiteProblem = IssueType.newCriticalFailure.code().equals(issueType)
|| IssueType.newTrustedSuiteFailure.code().equals(issueType);
String webUrl = null;
IssueResolveStatus status;
if (suiteProblem) {
if (rebuild.isPresent()) {
FatBuildCompacted fatBuildCompacted = rebuild.get();
List<ProblemCompacted> problems = fatBuildCompacted.problems();
if (IssueType.newCriticalFailure.code().equals(issueType)) {
boolean hasCriticalProblem = problems.stream().anyMatch(occurrence -> occurrence.isCriticalProblem(compactor));
status = hasCriticalProblem ? IssueResolveStatus.FAILING : IssueResolveStatus.FIXED;
} else {
boolean hasBuildProblem = problems.stream().anyMatch(p -> !p.isFailedTests(compactor) && !p.isSnapshotDepProblem(compactor));
status = hasBuildProblem ? IssueResolveStatus.FAILING : IssueResolveStatus.FIXED;
}
webUrl = DsSuiteUi.buildWebLinkToHist(tcIgn,
fatBuildCompacted.buildTypeId(compactor),
fatBuildCompacted.branchName(compactor)
);
} else
status = IssueResolveStatus.UNKNOWN;
} else {
if (rebuild.isPresent()) {
testResult = rebuild.get().getAllTests()
.filter(t -> t.testName() == issue.testNameCid())
.findAny();
} else
testResult = Optional.empty();
if (testResult.isPresent()) {
ITest test = testResult.get();
if (test.isIgnoredTest())
status = IssueResolveStatus.IGNORED;
else if (test.isMutedTest())
status = IssueResolveStatus.TC_MUTED;
else if (IssueType.newTestWithHighFlakyRate.code().equals(issueType)) {
int fullSuiteNameAndFullTestName = issue.testNameCid();
int branchName = rebuild.get().branchName();
IRunHistory runStat = tcIgn.getTestRunHist(fullSuiteNameAndFullTestName, projectId, branchName);
if (runStat == null)
status = IssueResolveStatus.UNKNOWN;
else {
List<Integer> runResults = runStat.getLatestRunResults();
if (runResults == null)
status = IssueResolveStatus.UNKNOWN;
else {
int confidenceOkTestsRow = Math.max(1,
(int) Math.ceil(Math.log(1 - cfg.confidence()) / Math.log(1 - issue.getFlakyRate() / 100.0)));
Collections.reverse(runResults);
int okTestRow = 0;
for (Integer run : runResults) {
if (run == null || run == RES_MISSING.getCode())
continue;
if (run == RES_OK.getCode() && (okTestRow < confidenceOkTestsRow))
okTestRow++;
else
break;
}
status = okTestRow >= confidenceOkTestsRow ? IssueResolveStatus.FIXED : IssueResolveStatus.FAILING;
}
}
}
else
status = test.isFailedTest(compactor) ? IssueResolveStatus.FAILING : IssueResolveStatus.FIXED;
FatBuildCompacted fatBuildCompacted = rebuild.get();
Long testNameId = test.getTestId();
String RebuildProjectId = fatBuildCompacted.projectId(compactor);
String branchName = fatBuildCompacted.branchName(compactor);
webUrl = DsTestFailureUi.buildTestWebLink(tcIgn, testNameId, RebuildProjectId, branchName);
}
else {
//exception for new test. removal of test means test is fixed
status = IssueType.newContributedTestFailure.code().equals(issueType)
? IssueResolveStatus.FIXED
: IssueResolveStatus.UNKNOWN;
}
}
return new BoardDefectIssueUi(status, compactor, issue, suiteProblem, webUrl);
}