You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2018/11/20 18:27:02 UTC
[ignite-teamcity-bot] branch master updated: IGNITE-10336 Incorrect
ocurrences count reproduced in the test
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 85b3bee IGNITE-10336 Incorrect ocurrences count reproduced in the test
85b3bee is described below
commit 85b3bee5314478edd510ea0f40f5c32db6fa6502
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Tue Nov 20 21:26:58 2018 +0300
IGNITE-10336 Incorrect ocurrences count reproduced in the test
---
.../ignite/ci/tcbot/chain/BuildChainProcessor.java | 2 +-
.../ignited/fatbuild/FatBuildCompacted.java | 6 +-
.../ci/tcbot/chain/BuildChainProcessorTest.java | 156 ++++++++++++++++++---
.../teamcity/ignited/InMemoryStringCompactor.java | 16 +++
4 files changed, 155 insertions(+), 25 deletions(-)
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
index e929bb8..14d6d2e 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessor.java
@@ -303,7 +303,7 @@ public class BuildChainProcessor {
return hist
.sorted(Comparator.comparing(BuildRefCompacted::id).reversed())
.limit(cntLimit)
- .filter(b -> !builds.containsKey(b.id())) // todo removing this causes incorrect count of failures (duplicated builds)
+ // .filter(b -> !builds.containsKey(b.id())) // todo removing this causes incorrect count of failures (duplicated builds)
.map(b -> builds.computeIfAbsent(b.id(), id -> teamcityIgnited.getFatBuild(id, syncMode)));
}
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 c4f2b13..95e88ad 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
@@ -124,7 +124,7 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
BuildType type = build.getBuildType();
if (type != null) {
projectId = compactor.getStringId(type.getProjectId());
- name = compactor.getStringId(type.getName());
+ buildTypeName(type.getName(), compactor);
}
AtomicBoolean failedToStart = new AtomicBoolean();
@@ -156,6 +156,10 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
setFlag(FAKE_BUILD_F, true);
}
+ public void buildTypeName(String btName, IStringCompactor compactor) {
+ name = compactor.getStringId(btName);
+ }
+
public void snapshotDependencies(int[] arr) {
snapshotDeps = arr.length > 0 ? arr : null;
}
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessorTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessorTest.java
index 82ae7e8..2e2ec97 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessorTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/tcbot/chain/BuildChainProcessorTest.java
@@ -23,7 +23,7 @@ import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.internal.SingletonScope;
-import java.util.ArrayList;
+import java.util.Comparator;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
@@ -31,30 +31,37 @@ import java.util.stream.Collectors;
import org.apache.ignite.ci.IAnalyticsEnabledTeamcity;
import org.apache.ignite.ci.ITeamcity;
import org.apache.ignite.ci.analysis.FullChainRunCtx;
+import org.apache.ignite.ci.analysis.ITestFailures;
import org.apache.ignite.ci.analysis.MultBuildRunCtx;
import org.apache.ignite.ci.analysis.mode.LatestRebuildMode;
import org.apache.ignite.ci.analysis.mode.ProcessLogsMode;
import org.apache.ignite.ci.tcmodel.hist.BuildRef;
import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrence;
import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrenceFull;
+import org.apache.ignite.ci.teamcity.ignited.BuildRefCompacted;
import org.apache.ignite.ci.teamcity.ignited.IStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.ITeamcityIgnited;
import org.apache.ignite.ci.teamcity.ignited.InMemoryStringCompactor;
import org.apache.ignite.ci.teamcity.ignited.SyncMode;
import org.apache.ignite.ci.teamcity.ignited.fatbuild.FatBuildCompacted;
import org.jetbrains.annotations.NotNull;
+import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mockito;
+import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
/**
* Test for chain processor
*/
public class BuildChainProcessorTest {
+ public static final String UNIQUE_FAILED_TEST = "uniqueFailedTest";
+ public static final String TEST_FAILING_EVERY_TIME = "testFailingEveryTime";
/** Injector. */
private Injector injector = Guice.createInjector(new AbstractModule() {
@Override protected void configure() {
@@ -66,34 +73,110 @@ public class BuildChainProcessorTest {
/**
*
*/
+ @Ignore
@Test
public void testAllBuildsArePresentInMergedBuilds() {
IStringCompactor c = injector.getInstance(IStringCompactor.class);
BuildChainProcessor bcp = injector.getInstance(BuildChainProcessor.class);
- IAnalyticsEnabledTeamcity teamcity = Mockito.mock(IAnalyticsEnabledTeamcity.class);
- when(teamcity.getBuildFailureRunStatProvider()).thenReturn(Mockito.mock(Function.class));
- when(teamcity.getTestRunStatProvider()).thenReturn(Mockito.mock(Function.class));
Map<Integer, FatBuildCompacted> builds = new HashMap<>();
List<Integer> entry = Lists.newArrayList();
- for (int i = 0; i < 10; i++) {
- FatBuildCompacted root = testFatBuild(c, i, "RunAll");
- entry.add(root.id());
-
- root.snapshotDependencies(new int[] {100 + i});
+ for (int i = 0; i < 10; i++)
+ addTestBuild(c, builds, entry, i);
- builds.put(root.id(), root);
+ ITeamcityIgnited tcIgnited = tcIgnitedMock(builds);
- FatBuildCompacted pds1 = testFatBuild(c, 100 + i, "PDS 1");
+ FullChainRunCtx ctx = bcp.loadFullChainContext(tcOldMock(), tcIgnited,
+ entry,
+ LatestRebuildMode.ALL, ProcessLogsMode.SUITE_NOT_COMPLETE, false, ITeamcity.DEFAULT, SyncMode.NONE);
+ List<MultBuildRunCtx> suites = ctx.failedChildSuites().collect(Collectors.toList());
- TestOccurrenceFull t1 = new TestOccurrenceFull();
- t1.name = "test" + i;
- t1.status = TestOccurrence.STATUS_FAILURE;
- pds1.addTests(c, Lists.newArrayList(t1));
+ assertTrue(!suites.isEmpty());
- builds.put(pds1.id(), pds1);
+ for (MultBuildRunCtx suite : suites) {
+ System.out.println(suite.getFailedTestsNames().collect(Collectors.toList()));
+
+ if (suite.suiteName() != null && suite.suiteName().startsWith(UNIQUE_FAILED_TEST))
+ assertTrue(suite.failedTests() >= 10);
+ else
+ assertTrue(suite.failedTests() >= 1);
+
+ List<ITestFailures> tests = suite.getFailedTests();
+ for (ITestFailures test : tests) {
+ if (test.getName().startsWith(UNIQUE_FAILED_TEST))
+ assertEquals(1, test.failuresCount());
+ else if (test.getName().equals(TEST_FAILING_EVERY_TIME))
+ assertEquals(10, test.failuresCount());
+ }
}
+ }
+
+ /**
+ *
+ */
+ @Test
+ public void testAllBuildsArePresentInSingleuilds() {
+ IStringCompactor c = injector.getInstance(IStringCompactor.class);
+ BuildChainProcessor bcp = injector.getInstance(BuildChainProcessor.class);
+
+ Map<Integer, FatBuildCompacted> builds = new HashMap<>();
+
+ List<Integer> entry = Lists.newArrayList();
+ addTestBuild(c, builds, entry, 0);
+
+ FullChainRunCtx ctx = bcp.loadFullChainContext(tcOldMock(), tcIgnitedMock(builds),
+ entry,
+ LatestRebuildMode.LATEST, ProcessLogsMode.SUITE_NOT_COMPLETE, false, ITeamcity.DEFAULT, SyncMode.NONE);
+ List<MultBuildRunCtx> suites = ctx.failedChildSuites().collect(Collectors.toList());
+
+ assertTrue(!suites.isEmpty());
+
+ MultBuildRunCtx suiteMultCtx = suites.get(0);
+ assertTrue(suiteMultCtx.failedTests() >= 1);
+ }
+
+ public void addTestBuild(IStringCompactor c, Map<Integer, FatBuildCompacted> builds, List<Integer> entry, int i) {
+ FatBuildCompacted root = testFatBuild(c, i, "RunAll");
+ entry.add(root.id());
+
+ root.snapshotDependencies(new int[] {100 + i, 200 + i});
+
+ builds.put(root.id(), root);
+
+ FatBuildCompacted pds1 = testFatBuild(c, 100 + i, "Pds1");
+ pds1.buildTypeName(UNIQUE_FAILED_TEST, c);
+
+ TestOccurrenceFull t1 = new TestOccurrenceFull();
+ t1.name = UNIQUE_FAILED_TEST + i;
+ t1.status = TestOccurrence.STATUS_FAILURE;
+ pds1.addTests(c, Lists.newArrayList(t1));
+
+ builds.put(pds1.id(), pds1);
+
+ FatBuildCompacted pds2 = testFatBuild(c, 200 + i, "Pds2");
+
+ TestOccurrenceFull t2 = new TestOccurrenceFull();
+ t2.name = "testPds2" + i;
+ t2.status = TestOccurrence.STATUS_SUCCESS;
+
+ TestOccurrenceFull t3 = new TestOccurrenceFull();
+ t3.name = TEST_FAILING_EVERY_TIME;
+ t3.status = TestOccurrence.STATUS_FAILURE;
+ pds2.addTests(c, Lists.newArrayList(t2, t3));
+
+ builds.put(pds2.id(), pds2);
+ }
+
+ @NotNull public IAnalyticsEnabledTeamcity tcOldMock() {
+ IAnalyticsEnabledTeamcity teamcity = Mockito.mock(IAnalyticsEnabledTeamcity.class);
+ when(teamcity.getBuildFailureRunStatProvider()).thenReturn(Mockito.mock(Function.class));
+ when(teamcity.getTestRunStatProvider()).thenReturn(Mockito.mock(Function.class));
+ return teamcity;
+ }
+
+ @NotNull public ITeamcityIgnited tcIgnitedMock(Map<Integer, FatBuildCompacted> builds) {
+ IStringCompactor c = injector.getInstance(IStringCompactor.class);
ITeamcityIgnited tcIgnited = Mockito.mock(ITeamcityIgnited.class);
when(tcIgnited.getFatBuild(anyInt(), any(SyncMode.class)))
@@ -104,15 +187,39 @@ public class BuildChainProcessorTest {
return Preconditions.checkNotNull(builds.get(arg), "Can't find build in map [" + arg + "]");
});
- FullChainRunCtx ctx = bcp.loadFullChainContext(teamcity, tcIgnited,
- entry,
- LatestRebuildMode.LATEST, ProcessLogsMode.SUITE_NOT_COMPLETE, false, ITeamcity.DEFAULT, SyncMode.NONE);
- List<MultBuildRunCtx> suites = ctx.failedChildSuites().collect(Collectors.toList());
+ when(tcIgnited.getAllBuildsCompacted(anyString(), anyString()))
+ .thenAnswer(inv -> {
+ String btId = inv.getArgument(0);
- assertTrue(!suites.isEmpty());
+ String branch = inv.getArgument(1);
- MultBuildRunCtx suiteMultCtx = suites.get(0);
- assertTrue(suiteMultCtx.failedTests() >= 1);
+ return builds.values()
+ .stream()
+ .filter(fb -> btId.equals(fb.buildTypeId(c)))
+ // .filter(fb -> branch.equals(fb.branchName(c)))
+ .sorted(Comparator.comparing(BuildRefCompacted::id).reversed())
+ .collect(Collectors.toList());
+ });
+
+ when(tcIgnited.getLastNBuildsFromHistory(anyString(), anyString(), anyInt()))
+ .thenAnswer(inv -> {
+ String btId = inv.getArgument(0);
+
+ String branch = inv.getArgument(1);
+
+ Integer cnt = inv.getArgument(2);
+
+ return builds.values()
+ .stream()
+ .filter(fb -> btId.equals(fb.buildTypeId(c)))
+ // .filter(fb -> branch.equals(fb.branchName(c)))
+ .sorted(Comparator.comparing(BuildRefCompacted::id).reversed())
+ .limit(cnt)
+ .map(BuildRefCompacted::id)
+ .collect(Collectors.toList());
+ });
+
+ return tcIgnited;
}
@NotNull public FatBuildCompacted testFatBuild(IStringCompactor c, int id, String bt) {
@@ -123,6 +230,9 @@ public class BuildChainProcessorTest {
ref.state = BuildRef.STATE_FINISHED;
ref.status = BuildRef.STATUS_FAILURE;
root.fillFieldsFromBuildRef(c, ref);
+
+ assertEquals(root.buildTypeId(c), bt);
+
return root;
}
}
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/InMemoryStringCompactor.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/InMemoryStringCompactor.java
index 9c0ec07..629bebc 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/InMemoryStringCompactor.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/InMemoryStringCompactor.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package org.apache.ignite.ci.teamcity.ignited;
import java.util.Map;