This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch ignite-12010-1min
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git


The following commit(s) were added to refs/heads/ignite-12010-1min by this push:
     new f17d044  IGNITE-12010: Consider newly contributed test as blocker if 
it runs more that 1 minute
f17d044 is described below

commit f17d044f081ede0517b896d912776eed14b72a36
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Wed Jul 24 21:03:26 2019 +0300

    IGNITE-12010: Consider newly contributed test as blocker if it runs more 
that 1 minute
---
 .../org/apache/ignite/ci/web/model/Version.java     |  2 +-
 .../src/main/webapp/js/testfails-2.2.js             | 11 ++++++++---
 .../org/apache/ignite/tcbot/common/TcBotConst.java  |  2 +-
 .../ignite/tcbot/engine/chain/MultBuildRunCtx.java  | 20 ++++++++++++++------
 .../tcbot/engine/chain/TestCompactedMult.java       | 21 +++++++++++++++------
 .../apache/ignite/tcbot/engine/ui/DsSuiteUi.java    | 13 ++++++++++++-
 .../ignite/tcbot/engine/ui/DsTestFailureUi.java     |  3 +++
 .../ci/teamcity/ignited/fatbuild/TestCompacted.java |  7 +++++--
 8 files changed, 59 insertions(+), 20 deletions(-)

diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
index b3e3f12..91748b4 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/web/model/Version.java
@@ -28,7 +28,7 @@ package org.apache.ignite.ci.web.model;
     public static final String GITHUB_REF = 
"https://github.com/apache/ignite-teamcity-bot";;
 
     /** TC Bot Version. */
-    public static final String VERSION = "20190723";
+    public static final String VERSION = "20190724";
 
     /** Java version, where Web App is running. */
     public String javaVer;
diff --git a/ignite-tc-helper-web/src/main/webapp/js/testfails-2.2.js 
b/ignite-tc-helper-web/src/main/webapp/js/testfails-2.2.js
index 0947a62..bcd935c 100644
--- a/ignite-tc-helper-web/src/main/webapp/js/testfails-2.2.js
+++ b/ignite-tc-helper-web/src/main/webapp/js/testfails-2.2.js
@@ -819,9 +819,14 @@ function showTestFailData(testFail, isFailureShown, 
settings) {
 
     var haveIssue = isDefinedAndFilled(testFail.webIssueUrl) && 
isDefinedAndFilled(testFail.webIssueText);
 
-    var color = (isFailureShown && failRateDefined)
-        ? failureRateToColor(failRate)
-        : "white";
+    var color;
+    if (testFail.success === true) {
+        color = "green";
+    } else {
+        color = (isFailureShown && failRateDefined)
+            ? failureRateToColor(failRate)
+            : "white";
+    }
 
     var investigated = isDefinedAndFilled(testFail.investigated) && 
testFail.investigated;
     if (investigated) {
diff --git 
a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/TcBotConst.java 
b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/TcBotConst.java
index 690e759..0905cce 100644
--- a/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/TcBotConst.java
+++ b/tcbot-common/src/main/java/org/apache/ignite/tcbot/common/TcBotConst.java
@@ -50,5 +50,5 @@ public class TcBotConst {
     public static final double 
NON_FLAKY_TEST_FAIL_RATE_BLOCKER_BORDER_PERCENTS = 4.;
 
     /** Max test duration for runall. If duration is greater, (new) test 
considered as blocker. */
-    public static final long MAX_NEW_TEST_DURATION_FOR_RUNALL = 
TimeUnit.MINUTES.toMillis(1);
+    public static final long MAX_NEW_TEST_DURATION_FOR_RUNALL_MS = 
TimeUnit.MINUTES.toMillis(1);
 }
diff --git 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/MultBuildRunCtx.java
 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/MultBuildRunCtx.java
index 122b5bc..41b4fc9 100644
--- 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/MultBuildRunCtx.java
+++ 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/MultBuildRunCtx.java
@@ -20,7 +20,6 @@ package org.apache.ignite.tcbot.engine.chain;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.cache.CacheBuilder;
-import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
@@ -33,6 +32,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.annotation.Nonnull;
@@ -52,7 +52,6 @@ import org.apache.ignite.tcignited.history.ISuiteRunHistory;
 import org.apache.ignite.tcservice.model.hist.BuildRef;
 import org.apache.ignite.tcservice.model.result.problems.ProblemOccurrence;
 import org.apache.ignite.tcservice.model.result.stat.Statistics;
-import org.apache.ignite.tcservice.model.result.tests.TestOccurrence;
 
 /**
  * Run configuration execution results loaded from different API URLs. 
Includes tests and problem occurrences; if logs
@@ -72,7 +71,8 @@ public class MultBuildRunCtx implements ISuiteResults {
     /** Builds: Single execution. */
     private List<SingleBuildRunCtx> builds = new CopyOnWriteArrayList<>();
 
-    private final com.google.common.cache.Cache<Integer, 
Optional<ISuiteRunHistory>> historyCacheMap
+    /** History cache map. */
+    private final com.google.common.cache.Cache<Integer, 
Optional<ISuiteRunHistory>> histCacheMap
         = CacheBuilder.newBuilder().build();
 
     /** Tests merged: test name ID -> test compacted */
@@ -323,11 +323,15 @@ public class MultBuildRunCtx implements ISuiteResults {
     }
 
     public List<TestCompactedMult> getFailedTests() {
-        int statusSuccess = 
compactor.getStringId(TestOccurrence.STATUS_SUCCESS);
+        Predicate<TestCompactedMult> filter = 
TestCompactedMult::isFailedButNotMuted;
 
+        return getFilteredTests(filter);
+    }
+
+    public List<TestCompactedMult> 
getFilteredTests(Predicate<TestCompactedMult> filter) {
         return getTestsMerged().values()
             .stream()
-            .filter(tmult-> tmult.isFailedButNotMuted(statusSuccess))
+            .filter(filter)
             .collect(Collectors.toList());
     }
 
@@ -637,6 +641,10 @@ public class MultBuildRunCtx implements ISuiteResults {
                 singleBuildRunCtx.getAllTests().filter(t -> !t.isIgnoredTest() 
&& !t.isMutedTest()));
         });
 
+        Stream<TestCompactedMult> stream = getTestsMerged().values().stream();
+
+        stream.filter(mtest-> mtest.isFailedButNotMuted());
+
         res.forEach((testNameId, compactedMult) -> {
             IRunHistory stat = compactedMult.history(tcIgnited, branchName);
             String testBlockerComment = 
compactedMult.getPossibleBlockerComment(stat);
@@ -684,7 +692,7 @@ public class MultBuildRunCtx implements ISuiteResults {
             return null;
 
         try {
-            return historyCacheMap.get(baseBranchId,
+            return histCacheMap.get(baseBranchId,
                 () -> {
                     return 
Optional.ofNullable(tcIgn.getSuiteRunHist(buildTypeIdId, baseBranchId));
                 })
diff --git 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/TestCompactedMult.java
 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/TestCompactedMult.java
index 9c83a14..7084c88 100644
--- 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/TestCompactedMult.java
+++ 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/chain/TestCompactedMult.java
@@ -20,6 +20,7 @@ package org.apache.ignite.tcbot.engine.chain;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import javax.annotation.Nullable;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.TestCompacted;
@@ -30,6 +31,7 @@ import org.apache.ignite.tcignited.history.IRunHistSummary;
 import org.apache.ignite.tcignited.history.IRunHistory;
 import org.apache.ignite.tcignited.history.IRunStat;
 import org.apache.ignite.tcignited.history.ISuiteRunHistory;
+import org.apache.ignite.tcservice.model.result.tests.TestOccurrence;
 import org.apache.ignite.tcservice.model.result.tests.TestOccurrenceFull;
 
 /**
@@ -41,9 +43,16 @@ public class TestCompactedMult {
     private MultBuildRunCtx ctx;
     private long avgDuration = -1;
 
+    /** Status success. */
+    private static volatile int STATUS_SUCCESS = -1;
+
     public TestCompactedMult(IStringCompactor compactor, MultBuildRunCtx ctx) {
         this.compactor = compactor;
         this.ctx = ctx;
+
+        //Each time compactor should give same result
+        if (STATUS_SUCCESS == -1)
+            STATUS_SUCCESS = 
compactor.getStringId(TestOccurrence.STATUS_SUCCESS);
     }
 
     @Nullable public Integer testName() {
@@ -62,7 +71,7 @@ public class TestCompactedMult {
     private int getFailedButNotMutedCount() {
         return (int)occurrences.stream()
             .filter(Objects::nonNull)
-            .filter(t -> t.isFailedButNotMuted(compactor)).count();
+            .filter(t -> t.isFailedButNotMuted(STATUS_SUCCESS)).count();
     }
 
     public int failuresCount() {
@@ -96,8 +105,9 @@ public class TestCompactedMult {
      public String getPossibleBlockerComment(IRunHistSummary baseBranchStat) {
          if (failuresCount() == 0) {
              if (baseBranchStat == null) {
-                 if (getAvgDurationMs() > 
TcBotConst.MAX_NEW_TEST_DURATION_FOR_RUNALL)
-                     return "Newly contributed test duration is more that 1 
minute";
+                 long durationMs = getAvgDurationMs();
+                 if (durationMs > 
TcBotConst.MAX_NEW_TEST_DURATION_FOR_RUNALL_MS)
+                     return "Newly contributed test " + 
TimeUnit.MILLISECONDS.toSeconds(durationMs) + "s duration is more that 1 
minute";
              }
 
              return null;
@@ -140,9 +150,8 @@ public class TestCompactedMult {
     }
 
     /**
-     * @param statusSuccess Status success.
      */
-    public boolean isFailedButNotMuted(int statusSuccess) {
-        return occurrences.stream().anyMatch(o -> 
o.isFailedButNotMuted(statusSuccess));
+    public boolean isFailedButNotMuted() {
+        return occurrences.stream().anyMatch(o -> 
o.isFailedButNotMuted(STATUS_SUCCESS));
     }
 }
diff --git 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSuiteUi.java 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSuiteUi.java
index 0d69840..4a6b09d 100644
--- 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSuiteUi.java
+++ 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsSuiteUi.java
@@ -30,6 +30,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
+import org.apache.ignite.tcbot.common.TcBotConst;
 import org.apache.ignite.tcbot.common.util.UrlUtil;
 import org.apache.ignite.tcbot.engine.chain.MultBuildRunCtx;
 import org.apache.ignite.tcbot.engine.chain.TestCompactedMult;
@@ -193,7 +194,17 @@ public class DsSuiteUi extends DsHistoryStatUi {
 
         Integer buildTypeIdId = suite.buildTypeIdId();
         if (includeTests) {
-            List<TestCompactedMult> tests = suite.getFailedTests();
+            List<TestCompactedMult> tests = suite.getFilteredTests(test -> {
+                if (test.isFailedButNotMuted())
+                    return true;
+
+                boolean longRun = test.getAvgDurationMs() > 
TcBotConst.MAX_NEW_TEST_DURATION_FOR_RUNALL_MS;
+                if (longRun)
+                    return test.history(tcIgnited, baseBranchId) == null;
+
+                return false;
+            });
+
             Function<TestCompactedMult, Float> function = testCompactedMult -> 
{
                 IRunHistory res = testCompactedMult.history(tcIgnited, 
baseBranchId);
 
diff --git 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsTestFailureUi.java
 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsTestFailureUi.java
index aec792a..bf61f2a 100644
--- 
a/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsTestFailureUi.java
+++ 
b/tcbot-engine/src/main/java/org/apache/ignite/tcbot/engine/ui/DsTestFailureUi.java
@@ -88,6 +88,8 @@ public class DsTestFailureUi {
     /** Blocker comment: indicates test seems to be introduced failure. */
     @Nullable public String blockerComment;
 
+    public boolean success = false;
+
     /**
      * @param failure test ocurrence (probably multiple)
      * @param tcIgn Teamcity.
@@ -102,6 +104,7 @@ public class DsTestFailureUi {
         @Nullable final String branchName,
         @Nullable final String baseBranchName,
         Integer baseBranchId) {
+        success = !failure.isFailedButNotMuted();
         name = failure.getName();
         investigated = failure.isInvestigated();
         curFailures = failure.failuresCount();
diff --git 
a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/TestCompacted.java
 
b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/TestCompacted.java
index 4049164..1eeb543 100644
--- 
a/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/TestCompacted.java
+++ 
b/tcbot-teamcity-ignited/src/main/java/org/apache/ignite/ci/teamcity/ignited/fatbuild/TestCompacted.java
@@ -343,16 +343,19 @@ public class TestCompacted {
     }
 
     public boolean isFailedButNotMuted(IStringCompactor compactor) {
-        return isFailedTest(compactor) && !(isMutedTest() || isIgnoredTest());
+        return isFailedTest(compactor) && !(isMutedOrIgnored());
     }
 
     /**
      * @param successStatus Success status code.
      */
     public boolean isFailedButNotMuted(int successStatus) {
-        return successStatus != status() && !(isMutedTest() || 
isIgnoredTest());
+        return successStatus != status() && !isMutedOrIgnored();
     }
 
+    public boolean isMutedOrIgnored() {
+        return isMutedTest() || isIgnoredTest();
+    }
 
     public boolean isIgnoredTest() {
         Boolean flag = getIgnoredFlag();

Reply via email to