This is an automated email from the ASF dual-hosted git repository.
dpavlov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git
The following commit(s) were added to refs/heads/master by this push:
new 6e58996 IGNITE-10620: Test history emulated for detecting flaky
failure
6e58996 is described below
commit 6e58996008ce7ffc963a2b82d6e63b01c3117668
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Wed Dec 19 01:11:01 2018 +0300
IGNITE-10620: Test history emulated for detecting flaky failure
---
.../ignited/fatbuild/FatBuildCompacted.java | 9 ++-
.../ignite/ci/tcbot/issue/IssueDetectorTest.java | 81 +++++++++++++++-------
2 files changed, 62 insertions(+), 28 deletions(-)
diff --git
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
index 0d48b26..91c8df4 100644
---
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
+++
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/FatBuildCompacted.java
@@ -444,8 +444,13 @@ public class FatBuildCompacted extends BuildRefCompacted
implements IVersionedEn
this.statistics = new StatisticsCompacted(compactor, statistics);
}
- public void changes(int[] changes) {
- this.changesIds = changes;
+ /**
+ * @param changes Changes.
+ */
+ public FatBuildCompacted changes(int[] changes) {
+ this.changesIds = changes.clone();
+
+ return this;
}
public int[] changes() {
diff --git
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/issue/IssueDetectorTest.java
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/issue/IssueDetectorTest.java
index 31ec9a0..853f4a5 100644
---
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/issue/IssueDetectorTest.java
+++
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/issue/IssueDetectorTest.java
@@ -96,14 +96,21 @@ public class IssueDetectorTest {
IStringCompactor c = injector.getInstance(IStringCompactor.class);
- TreeMap<String, String> pds1Hist = new TreeMap<String, String>() {
+ Map<String, String> pds1Hist = new TreeMap<String, String>() {
{
put("testFailed", "0000011111");
- put("testOk", " 0000");
+ put("testOk", " 0000");
}
};
- emulateHistory(chainId, c, pds1Hist);
+ Map<String, String> buildWoChanges = new TreeMap<String, String>() {
+ {
+ put("testFailedShoudlBeConsideredAsFlaky", "0000011111");
+ put("testFlakyStableFailure", "0000011111111111");
+ }
+ };
+
+ emulateHistory(chainId, c, pds1Hist, buildWoChanges);
IssueDetector issueDetector =
injector.getInstance(IssueDetector.class);
@@ -113,11 +120,11 @@ public class IssueDetectorTest {
String masterStatus = issueDetector.checkFailuresEx(brachName);
- int expIssuesCount = 1;
-
- assertTrue(masterStatus.contains("New issues found " +
expIssuesCount));
+ int expIssuesCnt = 2;
System.out.println(masterStatus);
+ assertTrue(masterStatus, masterStatus.contains("New issues found " +
expIssuesCnt));
+
/* todo: https://issues.apache.org/jira/browse/IGNITE-10620
- Add examples of failed tests into history, validate notifications
originated.
@@ -127,38 +134,60 @@ public class IssueDetectorTest {
issueDetector.stop();
}
- public void emulateHistory(String chainId, IStringCompactor c,
TreeMap<String, String> pds1Hist) {
+ /**
+ * @param chainId Chain id.
+ * @param c Compactor.
+ * @param pds1Hist PDS 1 history - build with changes all the time
+ */
+ public void emulateHistory(String chainId,
+ IStringCompactor c,
+ Map<String, String> pds1Hist,
+ Map<String, String> buildWoChanges) {
OptionalInt longestHist =
pds1Hist.values().stream().mapToInt(String::length).max();
Preconditions.checkState(longestHist.isPresent());
int histLen = longestHist.getAsInt();
for (int i = 0; i < histLen; i++) {
+ FatBuildCompacted pds1Build
+ = createFatBuild(c, "PDS1", ITeamcity.DEFAULT, 1100 + i, 1000
* i, false)
+ .addTests(c, testsMapToXmlModel(pds1Hist, histLen, i))
+ .changes(new int[] {i});
- List<TestOccurrenceFull> page = Lists.newArrayList();
- int finalI = i;
- pds1Hist.forEach((name, stat) -> {
- int cnt = stat.length();
- int idx = cnt - histLen + finalI;
- if (idx < 0)
- return;
-
- char chState = stat.charAt(idx);
- boolean ok = '0' == chState;
- boolean failed = '1' == chState;
- if (ok || failed)
- page.add(createTest(name.hashCode(), name, ok));
- });
- FatBuildCompacted pds1Build = createFatBuild(c, "PDS1",
ITeamcity.DEFAULT, 1100 + i, 1000 * i, false);
-
- pds1Build.addTests(c, page)
- .changes(new int[] {finalI});
apacheBuilds.put(pds1Build.id(), pds1Build);
+ FatBuildCompacted pds2Build
+ = createFatBuild(c, "PDS2_noChanges", ITeamcity.DEFAULT, 1200
+ i, 1000 * i, false)
+ .addTests(c, testsMapToXmlModel(buildWoChanges, histLen, i));
+
+ apacheBuilds.put(pds2Build.id(), pds2Build);
FatBuildCompacted chainBuild = createFatBuild(c, chainId,
ITeamcity.DEFAULT, 1000 + i, 1000 * i, false)
- .snapshotDependencies(new int[] {pds1Build.id()});
+ .snapshotDependencies(new int[] {pds1Build.id(),
pds2Build.id()});
apacheBuilds.put(chainBuild.id(), chainBuild);
}
}
+ @NotNull
+ public List<TestOccurrenceFull> testsMapToXmlModel(
+ Map<String, String> pds1Hist,
+ int histLen,
+ int idx) {
+ List<TestOccurrenceFull> page = Lists.newArrayList();
+
+ pds1Hist.forEach((name, stat) -> {
+ int cnt = stat.length();
+ int locIdx = cnt - histLen + idx;
+ if (locIdx < 0)
+ return;
+
+ char chState = stat.charAt(locIdx);
+ boolean ok = '0' == chState;
+ boolean failed = '1' == chState;
+ if (ok || failed)
+ page.add(createTest(name.hashCode(), name, ok));
+ });
+
+ return page;
+ }
+
}