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 056a18b  IGNITE-10620: Test history emulated for detecting simplest 
test template test
056a18b is described below

commit 056a18be7a109b492491ad86c0d9a2269155c79f
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Tue Dec 18 23:49:56 2018 +0300

    IGNITE-10620: Test history emulated for detecting simplest test template 
test
---
 .../org/apache/ignite/ci/jobs/CheckQueueJob.java   |  4 +-
 .../ci/tcbot/chain/PrChainsProcessorTest.java      |  2 +-
 .../ignite/ci/tcbot/issue/IssueDetectorTest.java   | 76 ++++++++++++++++++++--
 .../ci/teamcity/ignited/TeamcityIgnitedMock.java   | 16 ++---
 4 files changed, 80 insertions(+), 18 deletions(-)

diff --git 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
index 2f689d9..b20363b 100644
--- 
a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
+++ 
b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
@@ -168,14 +168,14 @@ public class CheckQueueJob implements Runnable {
                 ++running;
         }
 
-        int free = (total - running) * 100 / total;
+        int free = total == 0 ? -1 : (total - running) * 100 / total;
 
         final String agentStatus = MessageFormat.format("{0}% of agents are 
free ({1} total, {2} running builds).", free, total, running);
 
         logger.info(agentStatus);
 
         if (free < CHECK_QUEUE_MIN_FREE_AGENTS_PERCENT)
-            return"Min agent percent of free agents not met:" + agentStatus;
+            return "Min agent percent of free agents not met:" + agentStatus;
 
         logger.info("There are more than half free agents (total={}, 
free={}).", total, total - running);
 
diff --git 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
index 03a7786..5e80e1f 100644
--- 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
+++ 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/PrChainsProcessorTest.java
@@ -380,7 +380,7 @@ public class PrChainsProcessorTest {
     }
 
     @NotNull
-    public FatBuildCompacted createFailedBuild(IStringCompactor c, String 
btId, String branch, int id, long ageMs) {
+    public  FatBuildCompacted createFailedBuild(IStringCompactor c, String 
btId, String branch, int id, long ageMs) {
         return createFatBuild(c, btId, branch, id, ageMs, false);
     }
 
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 abf772c..31ec9a0 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
@@ -17,25 +17,34 @@
 
 package org.apache.ignite.ci.tcbot.issue;
 
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
+import java.util.List;
 import java.util.Map;
+import java.util.OptionalInt;
+import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 import org.apache.ignite.ci.ITeamcity;
 import org.apache.ignite.ci.conf.BranchTracked;
 import org.apache.ignite.ci.conf.BranchesTracked;
 import org.apache.ignite.ci.conf.ChainAtServerTracked;
 import org.apache.ignite.ci.tcbot.chain.MockBasedTcBotModule;
+import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrenceFull;
+import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
 import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnitedProvider;
 import org.apache.ignite.ci.teamcity.ignited.TeamcityIgnitedImpl;
 import org.apache.ignite.ci.teamcity.ignited.TeamcityIgnitedProviderMock;
 import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
 import org.apache.ignite.ci.user.ICredentialsProv;
-import org.apache.ignite.ci.web.rest.parms.FullQueryParams;
 import org.jetbrains.annotations.NotNull;
 import org.junit.Before;
 import org.junit.Test;
 
+import static junit.framework.TestCase.assertTrue;
+import static 
org.apache.ignite.ci.tcbot.chain.PrChainsProcessorTest.createFatBuild;
+import static 
org.apache.ignite.ci.tcbot.chain.PrChainsProcessorTest.createTest;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -45,7 +54,7 @@ import static org.mockito.Mockito.when;
  */
 public class IssueDetectorTest {
     /** Server id. */
-    public static final String SRV_ID = "apache";
+    public static final String SRV_ID = "apacheTest";
 
     /** Builds emulated storage. */
     private Map<Integer, FatBuildCompacted> apacheBuilds = new 
ConcurrentHashMap<>();
@@ -61,8 +70,8 @@ public class IssueDetectorTest {
     /** */
     @Before
     public void initBuilds() {
-        final TeamcityIgnitedProviderMock instance = 
(TeamcityIgnitedProviderMock) 
injector.getInstance(ITeamcityIgnitedProvider.class);
-        instance.addServer(SRV_ID, apacheBuilds);
+        
((TeamcityIgnitedProviderMock)injector.getInstance(ITeamcityIgnitedProvider.class))
+            .addServer(SRV_ID, apacheBuilds);
     }
 
     @NotNull public ChainAtServerTracked trackedChain(String suiteId) {
@@ -78,18 +87,35 @@ public class IssueDetectorTest {
 
     @Test
     public void testDetector() {
+        String brachName = "masterTest";
+        String chainId = TeamcityIgnitedImpl.DEFAULT_PROJECT_ID;
         BranchTracked branch = new BranchTracked();
-        branch.id = FullQueryParams.DEFAULT_TRACKED_BRANCH_NAME;
-        
branch.chains.add(trackedChain(TeamcityIgnitedImpl.DEFAULT_PROJECT_ID));
+        branch.id = brachName;
+        branch.chains.add(trackedChain(chainId));
         branchesTracked.addBranch(branch);
 
+        IStringCompactor c = injector.getInstance(IStringCompactor.class);
+
+        TreeMap<String, String> pds1Hist = new TreeMap<String, String>() {
+            {
+                put("testFailed", "0000011111");
+                put("testOk",     "      0000");
+            }
+        };
+
+        emulateHistory(chainId, c, pds1Hist);
+
         IssueDetector issueDetector = 
injector.getInstance(IssueDetector.class);
 
         ICredentialsProv mock = mock(ICredentialsProv.class);
         when(mock.hasAccess(anyString())).thenReturn(true);
         issueDetector.startBackgroundCheck(mock);
 
-        String masterStatus = issueDetector.checkFailuresEx("master");
+        String masterStatus = issueDetector.checkFailuresEx(brachName);
+
+        int expIssuesCount = 1;
+
+        assertTrue(masterStatus.contains("New issues found " + 
expIssuesCount));
 
         System.out.println(masterStatus);
         /* todo: https://issues.apache.org/jira/browse/IGNITE-10620
@@ -97,6 +123,42 @@ public class IssueDetectorTest {
         - Add examples of failed tests into history, validate notifications 
originated.
 
          */
+
+        issueDetector.stop();
+    }
+
+    public void emulateHistory(String chainId, IStringCompactor c, 
TreeMap<String, String> pds1Hist) {
+        OptionalInt longestHist = 
pds1Hist.values().stream().mapToInt(String::length).max();
+        Preconditions.checkState(longestHist.isPresent());
+        int histLen = longestHist.getAsInt();
+
+        for (int i = 0; i < histLen; 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 chainBuild = createFatBuild(c, chainId, 
ITeamcity.DEFAULT, 1000 + i, 1000 * i, false)
+                .snapshotDependencies(new int[] {pds1Build.id()});
+            apacheBuilds.put(chainBuild.id(), chainBuild);
+        }
     }
 
 }
diff --git 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
index 779b37f..2e0489a 100644
--- 
a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
+++ 
b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/TeamcityIgnitedMock.java
@@ -30,6 +30,7 @@ import java.util.Comparator;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
+import org.mockito.stubbing.Answer;
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
@@ -43,13 +44,13 @@ public class TeamcityIgnitedMock {
         Map<RunHistKey, RunHistCompacted> histCache = new 
ConcurrentHashMap<>();
         final int srvId = 0;
 
-        when(tcIgnited.getFatBuild(anyInt(), any(SyncMode.class)))
-            .thenAnswer(inv ->
-            {
-                Integer arg = inv.getArgument(0);
+        Answer<Object> buildAnswer = inv -> {
+            Integer arg = inv.getArgument(0);
 
-                return Preconditions.checkNotNull(builds.get(arg), "Can't find 
build in map [" + arg + "]");
-            });
+            return Preconditions.checkNotNull(builds.get(arg), "Can't find 
build in map [" + arg + "]");
+        };
+        when(tcIgnited.getFatBuild(anyInt(), 
any(SyncMode.class))).thenAnswer(buildAnswer);
+        when(tcIgnited.getFatBuild(anyInt())).thenAnswer(buildAnswer);
 
         when(tcIgnited.getAllBuildsCompacted(anyString(), anyString()))
             .thenAnswer(inv -> {
@@ -93,9 +94,8 @@ public class TeamcityIgnitedMock {
 
                     if (histCache.isEmpty()) {
                         synchronized (histCache) {
-                            if (histCache.isEmpty()) {
+                            if (histCache.isEmpty())
                                 initHistory(c, histCache, builds, srvId);
-                            }
                         }
                     }
 

Reply via email to