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/10/24 17:00:30 UTC

[ignite-teamcity-bot] 02/02: Test occurrences preparation for saving to fat build

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

dpavlov pushed a commit to branch ignite-9848-load-all-builds
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git

commit 9cf9fba8b4a22cfc4b596a654ae010ea320fcfa4
Author: Dmitriy Pavlov <dp...@apache.org>
AuthorDate: Wed Oct 24 20:00:08 2018 +0300

    Test occurrences preparation for saving to fat build
---
 .../ci/teamcity/ignited/FatBuildCompacted.java     |  2 +
 .../ignite/ci/teamcity/ignited/FatBuildDao.java    | 43 +++++++++++++++++++---
 .../ignited/IgnitedTcInMemoryIntegrationTest.java  | 37 ++++++++++++-------
 3 files changed, 64 insertions(+), 18 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/FatBuildCompacted.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/FatBuildCompacted.java
index 7254abe..461f774 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/FatBuildCompacted.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/FatBuildCompacted.java
@@ -104,6 +104,8 @@ public class FatBuildCompacted extends BuildRefCompacted implements IVersionedEn
         type.name(compactor.getStringFromId(name));
         type.projectId(compactor.getStringFromId(projectId));
         res.setBuildType(type);
+
+        res.href = "/app/rest/latest/builds/id:" + id();
     }
 
 }
diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/FatBuildDao.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/FatBuildDao.java
index e0706d1..427980f 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/FatBuildDao.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/teamcity/ignited/FatBuildDao.java
@@ -23,6 +23,7 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import javax.inject.Inject;
 import javax.inject.Provider;
 import org.apache.ignite.Ignite;
@@ -30,7 +31,7 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.ci.db.TcHelperDb;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.Build;
-import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrences;
 
 /**
  *
@@ -55,12 +56,44 @@ public class FatBuildDao {
         buildsCache = igniteProvider.get().getOrCreateCache(TcHelperDb.getCacheV2Config(TEAMCITY_FAT_BUILD_CACHE_NAME));
     }
 
+
+    /**
+     * @param srvIdMaskHigh Server id mask high.
+     * @param build Build data.
+     * @param tests TestOccurrences.
+     */
+    public int saveBuild(long srvIdMaskHigh,
+        Build build,
+        List<TestOccurrences> tests) {
+        Set<Long> ids = Stream.of(build).map(BuildRef::getId)
+            .filter(Objects::nonNull)
+            .map(buildId -> buildIdToCacheKey(srvIdMaskHigh, buildId))
+            .collect(Collectors.toSet());
+
+        Map<Long, FatBuildCompacted> existingEntries = buildsCache.getAll(ids);
+        Map<Long, FatBuildCompacted> entriesToPut = new TreeMap<>();
+
+        FatBuildCompacted compacted = new FatBuildCompacted(compactor, build);
+
+        long cacheKey = buildIdToCacheKey(srvIdMaskHigh, compacted.id());
+        FatBuildCompacted buildPersisted = existingEntries.get(cacheKey);
+
+        if (buildPersisted == null || !buildPersisted.equals(compacted))
+            entriesToPut.put(cacheKey, compacted);
+
+        int size = entriesToPut.size();
+        if (size != 0)
+            buildsCache.putAll(entriesToPut);
+
+        return size;
+    }
+
     /**
      * @param srvIdMaskHigh Server id mask high.
-     * @param ghData Gh data.
+     * @param buildData Gh data.
      */
-    public int saveChunk(long srvIdMaskHigh, List<Build> ghData) {
-        Set<Long> ids = ghData.stream().map(BuildRef::getId)
+    public int saveChunk(long srvIdMaskHigh, List<Build> buildData) {
+        Set<Long> ids = buildData.stream().map(BuildRef::getId)
             .filter(Objects::nonNull)
             .map(buildId -> buildIdToCacheKey(srvIdMaskHigh, buildId))
             .collect(Collectors.toSet());
@@ -68,7 +101,7 @@ public class FatBuildDao {
         Map<Long, FatBuildCompacted> existingEntries = buildsCache.getAll(ids);
         Map<Long, FatBuildCompacted> entriesToPut = new TreeMap<>();
 
-        List<FatBuildCompacted> collect = ghData.stream()
+        List<FatBuildCompacted> collect = buildData.stream()
             .map(ref -> new FatBuildCompacted(compactor, ref))
             .collect(Collectors.toList());
 
diff --git a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
index 737cca3..3772983 100644
--- a/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
+++ b/ignite-tc-helper-web/src/test/java/org/apache/ignite/ci/teamcity/ignited/IgnitedTcInMemoryIntegrationTest.java
@@ -37,6 +37,7 @@ import org.apache.ignite.ci.di.scheduler.NoOpSheduler;
 import org.apache.ignite.ci.tcmodel.conf.BuildType;
 import org.apache.ignite.ci.tcmodel.hist.BuildRef;
 import org.apache.ignite.ci.tcmodel.result.Build;
+import org.apache.ignite.ci.tcmodel.result.tests.TestOccurrences;
 import org.apache.ignite.ci.teamcity.pure.BuildHistoryEmulator;
 import org.apache.ignite.ci.teamcity.pure.ITeamcityHttpConnection;
 import org.apache.ignite.ci.user.ICredentialsProv;
@@ -242,8 +243,9 @@ public class IgnitedTcInMemoryIntegrationTest {
 
     @Test
     public void testFatBuild() throws JAXBException, IOException {
-        InputStream stream = getClass().getResourceAsStream("/build.xml");
-        Build refBuild = XmlUtil.load(Build.class, new InputStreamReader(stream));
+        Build refBuild = jaxbTestXml("/build.xml", Build.class);
+        TestOccurrences tests = jaxbTestXml("/testList.xml", TestOccurrences.class);
+
         Injector injector = Guice.createInjector(new AbstractModule() {
             @Override protected void configure() {
                 bind(Ignite.class).toInstance(ignite);
@@ -255,22 +257,17 @@ public class IgnitedTcInMemoryIntegrationTest {
         instance.init();
 
         int srvIdMaskHigh = ITeamcityIgnited.serverIdToInt(APACHE);
-        int i = instance.saveChunk(srvIdMaskHigh, Collections.singletonList(refBuild));
+        List<TestOccurrences> occurrences = Collections.singletonList(tests);
+        int i = instance.saveBuild(srvIdMaskHigh, refBuild, occurrences);
         assertEquals(1, i);
 
         FatBuildCompacted fatBuild = instance.getFatBuild(srvIdMaskHigh, 2039380);
 
-        Build actBuild = fatBuild.toBuild(injector.getInstance(IStringCompactor.class));
-
-        try (FileWriter writer = new FileWriter("src/test/resources/build1.xml")) {
-            writer.write(XmlUtil.save(refBuild));
-        }
+        IStringCompactor compactor = injector.getInstance(IStringCompactor.class);
+        Build actBuild = fatBuild.toBuild(compactor);
 
-        String save = XmlUtil.save(actBuild);
-        System.out.println(save);
-        try (FileWriter writer = new FileWriter("src/test/resources/build2.xml")) {
-            writer.write(save);
-        }
+        saveTmpFile(refBuild, "src/test/resources/build1.xml");
+        saveTmpFile(actBuild, "src/test/resources/build2.xml");
 
         assertEquals(refBuild.getId(), actBuild.getId());
         assertEquals(refBuild.status(), actBuild.status());
@@ -285,4 +282,18 @@ public class IgnitedTcInMemoryIntegrationTest {
         assertEquals(refBt.getId(), actBt.getId());
     }
 
+    public void saveTmpFile(Build refBuild, String name) throws IOException, JAXBException {
+        try (FileWriter writer = new FileWriter(name)) {
+            writer.write(XmlUtil.save(refBuild));
+        }
+    }
+
+    public <E> E jaxbTestXml(String ref, Class<E> cls) throws IOException, JAXBException {
+        E refBuild;
+        try(InputStream stream = getClass().getResourceAsStream(ref)) {
+            refBuild = XmlUtil.load(cls, new InputStreamReader(stream));
+        }
+        return refBuild;
+    }
+
 }