Author: echatellier Date: 2017-09-13 23:10:16 +0200 (Wed, 13 Sep 2017) New Revision: 4425 Url: http://forge.codelutin.com/projects/isis-fish/repository/revisions/4425 Log: Add test to show topia connection closing leak Modified: trunk/pom.xml trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2017-09-12 15:04:49 UTC (rev 4424) +++ trunk/pom.xml 2017-09-13 21:10:16 UTC (rev 4425) @@ -561,7 +561,7 @@ <!-- Dependencies version --> <jaxxVersion>2.41</jaxxVersion> - <topiaVersion>2.12</topiaVersion> + <topiaVersion>2.12.1-SNAPSHOT</topiaVersion> <hibernateVersion>5.1.10.Final</hibernateVersion> <nuitonI18nVersion>3.6.3</nuitonI18nVersion> Modified: trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java =================================================================== --- trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java 2017-09-12 15:04:49 UTC (rev 4424) +++ trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SimulationServiceTest.java 2017-09-13 21:10:16 UTC (rev 4425) @@ -26,6 +26,7 @@ package fr.ifremer.isisfish.simulator.launcher; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -33,6 +34,7 @@ import java.util.SortedMap; import java.util.TreeMap; +import fr.ifremer.isisfish.datastore.IsisH2Config; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -42,6 +44,7 @@ import org.nuiton.math.matrix.MatrixHelper; import org.nuiton.math.matrix.MatrixND; import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaContextFactory; import org.nuiton.topia.TopiaException; import fr.ifremer.isisfish.AbstractIsisFishTest; @@ -75,6 +78,8 @@ import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationDiscreteDomain; import fr.ifremer.isisfish.simulator.sensitivity.domain.RuleDiscreteDomain; import fr.ifremer.isisfish.types.Month; +import org.nuiton.topia.framework.TopiaContextImpl; +import org.nuiton.util.FileUtil; /** * Test for {@link SimulationService}. @@ -610,4 +615,42 @@ Assert.assertTrue(preScriptContent.contains("beanUtils.convert(\"String myValue=\\\"test2\\\"")); Assert.assertTrue(preScriptContent.contains("BeanUtils.setProperty(entity0, \"growthEquationContent\"")); } + + /** + * Test que lorsque l'on lance beaucoup de simulations, il ne reste oas des threads inutiles qui occupent toutes + * les ressources de la machines. + * @throws InterruptedException + */ + @Test + @Ignore + public void testNonClosedThreadsWhenRunningALotOfSimulations() throws IOException, InterruptedException { + //RegionStorage region = RegionStorage.getRegion("DemoRegion"); + + File dirTest = FileUtil.createTempDirectory("sims-", "test", new File("target")).getAbsoluteFile(); + + for (int i = 0; i <= 20; i++) { + // V1 + // SimulationStorage sim = SimulationStorage.importAndRenameZip( + // dirTest, initialZip, "sim" + i); + + // v2 + //SimulationStorage result = new SimulationStorage(dirTest, "test" + i, null); + //TopiaContext tx = result.getStorage().beginTransaction(); + //tx.closeContext(); + //result.closeStorage(); + + // v3 + File simDir = new File(dirTest, "sim" + i); + Properties config = new Properties(); + IsisH2Config.addDatabaseConfig(config, simDir); + TopiaContext storage = TopiaContextFactory.getContext(config); + storage.closeContext(); + } + + Thread.getAllStackTraces().keySet().forEach(t -> System.out.println(t.getName())); + + // une seule simulation en prends 10 + // donc meme pour 100 simulations, ca ne devrait pas être beaucoup plus + Assert.assertTrue(String.format("Il y a %d threads", Thread.activeCount()), Thread.activeCount() < 100); + } }