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);
- }
}
}