Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 61a39193 by Tony Chemit at 2024-01-24T09:56:29+01:00 [persistence-test] Improve performance by using read databases and never commit to them (wins 2.5 minutes :)) - - - - - 7 changed files: - core/persistence/test/src/main/java/fr/ird/observe/persistence/test/ObservePersistenceFixtures.java - core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteDataRequestTest.java - core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeletePartialRequestTest.java - core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteReferentialRequestTest.java - core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReferentialExtraScriptsTest.java - core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicatePartialRequestTest.java - core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicateRequestTest.java Changes: ===================================== core/persistence/test/src/main/java/fr/ird/observe/persistence/test/ObservePersistenceFixtures.java ===================================== @@ -43,12 +43,16 @@ import java.util.Map; public class ObservePersistenceFixtures extends ObserveFixtures { public static Map<String, Long> getTablesCount(ObserveTopiaApplicationContext applicationContext, List<String> schemaAndTableNames) { - Map<String, Long> countBuilder = new LinkedHashMap<>(); try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { - for (String table : schemaAndTableNames) { - Long actualCount = persistenceContext.countTable(table); - countBuilder.put(table, actualCount); - } + return getTablesCount(persistenceContext, schemaAndTableNames); + } + } + + public static Map<String, Long> getTablesCount(ObserveTopiaPersistenceContext persistenceContext, List<String> schemaAndTableNames) { + Map<String, Long> countBuilder = new LinkedHashMap<>(); + for (String table : schemaAndTableNames) { + Long actualCount = persistenceContext.countTable(table); + countBuilder.put(table, actualCount); } return countBuilder; } ===================================== core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteDataRequestTest.java ===================================== @@ -31,6 +31,7 @@ import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.data.DataEntity; import fr.ird.observe.entities.data.RootOpenableEntity; import fr.ird.observe.persistence.test.ObservePersistenceFixtures; +import fr.ird.observe.persistence.test.PersistenceTestSupportRead; import fr.ird.observe.persistence.test.PersistenceTestSupportWrite; import fr.ird.observe.spi.ObservePersistenceBusinessProject; import fr.ird.observe.spi.context.DtoEntityContext; @@ -38,7 +39,6 @@ import fr.ird.observe.spi.context.OpenableDtoEntityContext; import fr.ird.observe.spi.module.BusinessModule; import fr.ird.observe.spi.module.ObserveBusinessProject; import fr.ird.observe.test.IgnoreTestClassRule; -import fr.ird.observe.test.spi.CopyDatabaseConfiguration; import io.ultreia.java4all.util.sql.SqlScript; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -49,6 +49,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.nuiton.topia.service.sql.model.TopiaEntitySqlDescriptors; +import java.sql.SQLException; import java.util.Comparator; import java.util.List; import java.util.Map; @@ -64,7 +65,7 @@ import static fr.ird.observe.persistence.test.ObservePersistenceFixtures.getTabl * @since 9.0.0 */ @RunWith(Parameterized.class) -public class DeleteDataRequestTest extends PersistenceTestSupportWrite { +public class DeleteDataRequestTest extends PersistenceTestSupportRead { @ClassRule public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip"); @@ -78,16 +79,15 @@ public class DeleteDataRequestTest extends PersistenceTestSupportWrite { @Parameterized.Parameters(name = "{0}") public static Iterable<Object[]> data() { return ObservePersistenceBusinessProject.get().getEntityToDtoClassMapping().keySet().stream() - .filter(Class::isInterface) - .filter(DataEntity.class::isAssignableFrom) - .sorted(Comparator.comparing(Object::toString)) - .map(t -> new Object[]{t}) - .collect(Collectors.toList()); + .filter(Class::isInterface) + .filter(DataEntity.class::isAssignableFrom) + .sorted(Comparator.comparing(Object::toString)) + .map(t -> new Object[]{t}) + .collect(Collectors.toList()); } @Test - @CopyDatabaseConfiguration - public void test() { + public void test() throws SQLException { String variableName = ObservePersistenceFixtures.getEntityVariableName(entityType); String id = ObservePersistenceFixtures.getVariable(variableName); @@ -106,34 +106,41 @@ public class DeleteDataRequestTest extends PersistenceTestSupportWrite { } DeleteRequest request = new DeleteRequest(false, entityType.getName(), parentId, id); - try (ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext()) { - - SqlScript script = applicationContext.getSqlService().consume(request); - boolean entryPoint = RootOpenableEntity.class.isAssignableFrom(entityType); - List<String> schemaAndTableNames = null; - Map<String, Long> expectedCount = null; - if (entryPoint) { - BusinessModule businessModule = ObserveBusinessProject.get().getBusinessModuleByDtoType(spi.toDtoType()); - String classifier = "data-" + businessModule.getName(); - expectedCount = ObservePersistenceFixtures.loadFixturesMapCount("persistence/table_count/" + classifier); - TopiaEntitySqlDescriptors descriptors = PersistenceTestSupportWrite.descriptorForReplication(classifier).reverse(); - schemaAndTableNames = descriptors.getSchemaAndTableNames(); - } + ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext(); + + SqlScript script = applicationContext.getSqlService().consume(request); + boolean entryPoint = RootOpenableEntity.class.isAssignableFrom(entityType); + List<String> schemaAndTableNames = null; + Map<String, Long> expectedCount = null; + if (entryPoint) { + BusinessModule businessModule = ObserveBusinessProject.get().getBusinessModuleByDtoType(spi.toDtoType()); + String classifier = "data-" + businessModule.getName(); + expectedCount = ObservePersistenceFixtures.loadFixturesMapCount("persistence/table_count/" + classifier); + TopiaEntitySqlDescriptors descriptors = PersistenceTestSupportWrite.descriptorForReplication(classifier).reverse(); + schemaAndTableNames = descriptors.getSchemaAndTableNames(); + } - ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); - Map<String, Long> beforeTablesCount = null; - if (entryPoint) { - beforeTablesCount = getTablesCount(applicationContext, schemaAndTableNames); - } - if (!ObservePersistenceFixtures.WITH_ASSERT) { - String content = script.content(); - System.out.println(content); - } - applicationContext.executeSqlStatements(script); - ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id); - if (entryPoint) { - Map<String, Long> afterTablesCount = getTablesCount(applicationContext, schemaAndTableNames); - assertDeleteEntryPoint(beforeTablesCount, afterTablesCount, expectedCount); + ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); + Map<String, Long> beforeTablesCount = null; + if (entryPoint) { + beforeTablesCount = getTablesCount(applicationContext, schemaAndTableNames); + } + if (!ObservePersistenceFixtures.WITH_ASSERT) { + String content = script.content(); + System.out.println(content); + } + try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { + + persistenceContext.executeSqlScript(script); + persistenceContext.flush(); + try { + ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id); + if (entryPoint) { + Map<String, Long> afterTablesCount = getTablesCount(persistenceContext, schemaAndTableNames); + assertDeleteEntryPoint(beforeTablesCount, afterTablesCount, expectedCount); + } + } finally { + persistenceContext.rollback(); } } } ===================================== core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeletePartialRequestTest.java ===================================== @@ -23,17 +23,14 @@ package fr.ird.observe.persistence.test.request; */ import fr.ird.observe.datasource.request.DeletePartialRequest; -import fr.ird.observe.datasource.request.ReplicatePartialRequest; import fr.ird.observe.dto.data.DataDto; import fr.ird.observe.entities.ObserveTopiaApplicationContext; import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.data.ps.common.Trip; import fr.ird.observe.persistence.test.ObservePersistenceFixtures; -import fr.ird.observe.persistence.test.PersistenceTestSupportWrite; +import fr.ird.observe.persistence.test.PersistenceTestSupportRead; import fr.ird.observe.services.service.data.DeleteLayoutRequest; -import fr.ird.observe.services.service.data.MoveLayoutRequest; import fr.ird.observe.test.IgnoreTestClassRule; -import fr.ird.observe.test.spi.CopyDatabaseConfiguration; import io.ultreia.java4all.util.sql.SqlScript; import org.junit.Assert; import org.junit.ClassRule; @@ -51,7 +48,7 @@ import java.util.Set; * @since 9.0.0 */ @RunWith(Parameterized.class) -public class DeletePartialRequestTest extends PersistenceTestSupportWrite { +public class DeletePartialRequestTest extends PersistenceTestSupportRead { @ClassRule public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip"); @@ -73,51 +70,43 @@ public class DeletePartialRequestTest extends PersistenceTestSupportWrite { return ReplicatePartialRequestTest.PARTIAL_PS_FIXTURES; } - static void assertDelete(ObserveTopiaApplicationContext applicationContext, DeletePartialRequest deleteRequest, Set<String> shell, Map<String, Long> beforeResults, Map<String, Long> afterDelete) { - SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest); + static void assertDelete(ObserveTopiaPersistenceContext persistenceContext, SqlScript deleteScript, Set<String> shell, Map<String, Long> beforeResults, Map<String, Long> afterDelete) { if (!ObservePersistenceFixtures.WITH_ASSERT) { System.out.println(deleteScript.content()); } - applicationContext.executeSqlStatements(deleteScript); - - try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { - for (String table : shell) { - long actualCount = persistenceContext.countTable(table); - long beforeCount = beforeResults.get(table); - long afterDeleteCount = afterDelete.get(table); - Assert.assertEquals(String.format("bad size for table: %s (excepted %d == %d)", table, actualCount, beforeCount), actualCount, afterDeleteCount); - } + for (String table : shell) { + long actualCount = persistenceContext.countTable(table); + long beforeCount = beforeResults.get(table); + long afterDeleteCount = afterDelete.get(table); + Assert.assertEquals(String.format("bad size for table: %s (excepted %d == %d)", table, actualCount, beforeCount), actualCount, afterDeleteCount); } } @Test - @CopyDatabaseConfiguration public void test() { - Map<String, Long> expected = ObservePersistenceFixtures.loadFixturesMapCount("persistence/replicate_partial_count/" + classifier + "-" + flavor); - try (ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext()) { + ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext(); - DeletePartialRequest deleteRequest = Trip.SPI.toSqlRequest(false, new DeleteLayoutRequest(scopes, newId)); - Set<String> shell = applicationContext.createShell(deleteRequest); + DeletePartialRequest deleteRequest = Trip.SPI.toSqlRequest(false, new DeleteLayoutRequest(scopes, newId)); + Set<String> shell = applicationContext.createShell(deleteRequest); - Map<String, Long> beforeResults = ReplicatePartialRequestTest.getBeforeResults(applicationContext, shell); - SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest); - applicationContext.executeSqlStatements(deleteScript); + SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest); - Map<String, Long> afterDelete = ReplicatePartialRequestTest.getBeforeResults(applicationContext, shell); + try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { - assertDelete(applicationContext, deleteRequest, shell, beforeResults, afterDelete); + try { + Map<String, Long> beforeResults = ReplicatePartialRequestTest.getBeforeResults(persistenceContext, shell); - ReplicatePartialRequest replicateRequest = Trip.SPI.toSqlRequest(false, new MoveLayoutRequest(scopes, tripId, newId, false)); - ReplicatePartialRequestTest.assertReplicate(applicationContext, replicateRequest, shell, expected, afterDelete, 1); + persistenceContext.executeSqlScript(deleteScript); + persistenceContext.flush(); - assertDelete(applicationContext, deleteRequest, shell, beforeResults, afterDelete); + Map<String, Long> afterDelete = ReplicatePartialRequestTest.getBeforeResults(persistenceContext, shell); - ReplicatePartialRequestTest.assertReplicate(applicationContext, replicateRequest, shell, expected, afterDelete, 1); - ReplicatePartialRequestTest.assertReplicate(applicationContext, replicateRequest, shell, expected, afterDelete, 2); + assertDelete(persistenceContext, deleteScript, shell, beforeResults, afterDelete); + } finally { + persistenceContext.rollback(); + } - assertDelete(applicationContext, deleteRequest, shell, beforeResults, afterDelete); - assertDelete(applicationContext, deleteRequest, shell, beforeResults, afterDelete); } } } ===================================== core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/DeleteReferentialRequestTest.java ===================================== @@ -25,14 +25,14 @@ package fr.ird.observe.persistence.test.request; import fr.ird.observe.datasource.request.DeleteRequest; import fr.ird.observe.entities.Entity; import fr.ird.observe.entities.ObserveTopiaApplicationContext; +import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.referential.ReferentialEntity; import fr.ird.observe.persistence.test.ObservePersistenceFixtures; -import fr.ird.observe.persistence.test.PersistenceTestSupportWrite; +import fr.ird.observe.persistence.test.PersistenceTestSupportRead; import fr.ird.observe.spi.ObservePersistenceBusinessProject; import fr.ird.observe.spi.context.DtoEntityContext; import fr.ird.observe.test.DatabaseName; import fr.ird.observe.test.IgnoreTestClassRule; -import fr.ird.observe.test.spi.CopyDatabaseConfiguration; import fr.ird.observe.test.spi.DatabaseNameConfiguration; import io.ultreia.java4all.util.sql.SqlScript; import org.apache.logging.log4j.LogManager; @@ -51,7 +51,7 @@ import java.util.stream.Collectors; * @since 9.0.0 */ @DatabaseNameConfiguration(DatabaseName.referential) -public class DeleteReferentialRequestTest extends PersistenceTestSupportWrite { +public class DeleteReferentialRequestTest extends PersistenceTestSupportRead { @ClassRule public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip"); @@ -67,12 +67,10 @@ public class DeleteReferentialRequestTest extends PersistenceTestSupportWrite { } @Test - @CopyDatabaseConfiguration public void test() { for (Class<? extends Entity> entityType : data()) { test(entityType); } - } public void test(Class<? extends Entity> entityType) { @@ -95,8 +93,15 @@ public class DeleteReferentialRequestTest extends PersistenceTestSupportWrite { String content = script.content(); System.out.println(content); } - applicationContext.executeSqlStatements(script); - ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id); + try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { + try { + persistenceContext.executeSqlScript(script); + persistenceContext.flush(); + ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id); + } finally { + persistenceContext.rollback(); + } + } } } ===================================== core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReferentialExtraScriptsTest.java ===================================== @@ -28,12 +28,11 @@ import fr.ird.observe.entities.ObserveTopiaApplicationContext; import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.referential.ReferentialEntity; import fr.ird.observe.persistence.test.ObservePersistenceFixtures; -import fr.ird.observe.persistence.test.PersistenceTestSupportWrite; +import fr.ird.observe.persistence.test.PersistenceTestSupportRead; import fr.ird.observe.spi.ObservePersistenceBusinessProject; import fr.ird.observe.spi.context.ReferentialDtoEntityContext; import fr.ird.observe.test.DatabaseName; import fr.ird.observe.test.IgnoreTestClassRule; -import fr.ird.observe.test.spi.CopyDatabaseConfiguration; import fr.ird.observe.test.spi.DatabaseNameConfiguration; import io.ultreia.java4all.util.sql.SqlScript; import org.apache.logging.log4j.LogManager; @@ -54,7 +53,7 @@ import java.util.stream.Collectors; * @since 9.0.7 */ @DatabaseNameConfiguration(DatabaseName.referential) -public class ReferentialExtraScriptsTest extends PersistenceTestSupportWrite { +public class ReferentialExtraScriptsTest extends PersistenceTestSupportRead { @ClassRule public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip"); @@ -63,14 +62,14 @@ public class ReferentialExtraScriptsTest extends PersistenceTestSupportWrite { public static List<Class<? extends Entity>> data() { return ObservePersistenceBusinessProject.get().getEntityToDtoClassMapping().keySet().stream() - .filter(Class::isInterface) - .filter(ReferentialEntity.class::isAssignableFrom) - .sorted(Comparator.comparing(Object::toString)) - .collect(Collectors.toList()); + .filter(Class::isInterface) + .filter(ReferentialEntity.class::isAssignableFrom) + .sorted(Comparator.comparing(Object::toString)) + .collect(Collectors.toList()); } @Test - @CopyDatabaseConfiguration +// @CopyDatabaseConfiguration public void test() { for (Class<? extends Entity> entityType : data()) { test(entityType); @@ -105,16 +104,36 @@ public class ReferentialExtraScriptsTest extends PersistenceTestSupportWrite { ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext(); - SqlScript script = applicationContext.getSqlService().consume(request); + SqlScript deleteScript = applicationContext.getSqlService().consume(request); - ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); + try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { - applicationContext.executeSqlStatements(script); - ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id); + try { + ObservePersistenceFixtures.assertDataExist(persistenceContext, spi, id); - applicationContext.executeSqlStatements(copyScript); - ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); - applicationContext.executeSqlStatements(updateScript); - ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); + persistenceContext.executeSqlScript(deleteScript); + persistenceContext.flush(); + ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id); + + persistenceContext.executeSqlScript(copyScript); + persistenceContext.flush(); + ObservePersistenceFixtures.assertDataExist(persistenceContext, spi, id); + persistenceContext.executeSqlScript(updateScript); + persistenceContext.flush(); + ObservePersistenceFixtures.assertDataExist(persistenceContext, spi, id); + } finally { + persistenceContext.rollback(); + } + + } +// ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); +// +// applicationContext.executeSqlStatements(deleteScript); +// ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id); +// +// applicationContext.executeSqlStatements(copyScript); +// ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); +// applicationContext.executeSqlStatements(updateScript); +// ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); } } ===================================== core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicatePartialRequestTest.java ===================================== @@ -24,11 +24,16 @@ package fr.ird.observe.persistence.test.request; import fr.ird.observe.datasource.request.ReplicatePartialRequest; import fr.ird.observe.dto.data.DataDto; +import fr.ird.observe.dto.data.ps.common.TripGearUseFeaturesDto; +import fr.ird.observe.dto.data.ps.common.TripLocalmarketDto; +import fr.ird.observe.dto.data.ps.common.TripLogbookDto; +import fr.ird.observe.dto.data.ps.landing.TripLandingDto; +import fr.ird.observe.dto.data.ps.observation.RouteDto; import fr.ird.observe.entities.ObserveTopiaApplicationContext; import fr.ird.observe.entities.ObserveTopiaPersistenceContext; import fr.ird.observe.entities.data.ps.common.Trip; import fr.ird.observe.persistence.test.ObservePersistenceFixtures; -import fr.ird.observe.persistence.test.PersistenceTestSupportWrite; +import fr.ird.observe.persistence.test.PersistenceTestSupportRead; import fr.ird.observe.services.service.data.MoveLayoutRequest; import fr.ird.observe.test.IgnoreTestClassRule; import fr.ird.observe.test.ObserveFixtures; @@ -52,7 +57,7 @@ import java.util.TreeMap; * @since 9.0.0 */ @RunWith(Parameterized.class) -public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite { +public class ReplicatePartialRequestTest extends PersistenceTestSupportRead { @ClassRule public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip"); @@ -61,14 +66,14 @@ public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite { private static final String PS_COMMON_TRIP_ID = ObservePersistenceFixtures.getPsCommonTripId(); private static final String PS_COMMON_TRIP_MOVE = ObserveFixtures.getId("PS_COMMON_TRIP_MOVE"); public static final Iterable<Object[]> PARTIAL_PS_FIXTURES = Arrays.asList( - new Object[]{CLASSIFIER_DATA_PS, "GearUseFeatures", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripGearUseFeaturesDto.class)}, - new Object[]{CLASSIFIER_DATA_PS, "Observations", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.observation.RouteDto.class)}, - new Object[]{CLASSIFIER_DATA_PS, "Logbook", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLogbookDto.class)}, - new Object[]{CLASSIFIER_DATA_PS, "Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLocalmarketDto.class)}, - new Object[]{CLASSIFIER_DATA_PS, "Landing", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.landing.TripLandingDto.class)}, - new Object[]{CLASSIFIER_DATA_PS, "Observations-Logbook", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLogbookDto.class, fr.ird.observe.dto.data.ps.observation.RouteDto.class)}, - new Object[]{CLASSIFIER_DATA_PS, "Observations-Logbook-Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLocalmarketDto.class, fr.ird.observe.dto.data.ps.common.TripLogbookDto.class, fr.ird.observe.dto.data.ps.observation.RouteDto.class)}, - new Object[]{CLASSIFIER_DATA_PS, "Landing-Logbook-Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(fr.ird.observe.dto.data.ps.common.TripLocalmarketDto.class, fr.ird.observe.dto.data.ps.common.TripLogbookDto.class, fr.ird.observe.dto.data.ps.landing.TripLandingDto.class)} + new Object[]{CLASSIFIER_DATA_PS, "GearUseFeatures", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripGearUseFeaturesDto.class)}, + new Object[]{CLASSIFIER_DATA_PS, "Observations", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(RouteDto.class)}, + new Object[]{CLASSIFIER_DATA_PS, "Logbook", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLogbookDto.class)}, + new Object[]{CLASSIFIER_DATA_PS, "Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLocalmarketDto.class)}, + new Object[]{CLASSIFIER_DATA_PS, "Landing", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLandingDto.class)}, + new Object[]{CLASSIFIER_DATA_PS, "Observations-Logbook", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLogbookDto.class, RouteDto.class)}, + new Object[]{CLASSIFIER_DATA_PS, "Observations-Logbook-Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLocalmarketDto.class, TripLogbookDto.class, RouteDto.class)}, + new Object[]{CLASSIFIER_DATA_PS, "Landing-Logbook-Localmarket", PS_COMMON_TRIP_ID, PS_COMMON_TRIP_MOVE, Set.of(TripLocalmarketDto.class, TripLogbookDto.class, TripLandingDto.class)} ); @Parameterized.Parameter @@ -87,29 +92,24 @@ public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite { return PARTIAL_PS_FIXTURES; } - static Map<String, Long> getBeforeResults(ObserveTopiaApplicationContext applicationContext, Set<String> shell) { + static Map<String, Long> getBeforeResults(ObserveTopiaPersistenceContext persistenceContext, Set<String> shell) { Map<String, Long> beforeResults = new TreeMap<>(); - try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { - for (String table : shell) { - Long actualCount = persistenceContext.countTable(table); - beforeResults.put(table, actualCount); - } + for (String table : shell) { + Long actualCount = persistenceContext.countTable(table); + beforeResults.put(table, actualCount); } return beforeResults; } - static void assertReplicate(ObserveTopiaApplicationContext applicationContext, ReplicatePartialRequest replicateRequest, Set<String> shell, Map<String, Long> expected, Map<String, Long> before, int factor) { + static void assertReplicate(ObserveTopiaApplicationContext applicationContext, ObserveTopiaPersistenceContext persistenceContext, ReplicatePartialRequest replicateRequest, Set<String> shell, Map<String, Long> expected, Map<String, Long> before, int factor) { SqlScript replicateScript = applicationContext.getSqlService().consume(replicateRequest); - applicationContext.executeSqlStatements(replicateScript); - + persistenceContext.executeSqlScript(replicateScript); + persistenceContext.flush(); if (!ObservePersistenceFixtures.WITH_ASSERT) { - Map<String, Long> actualResults = new TreeMap<>(); - try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { - for (String table : shell) { - long actualCount = factor * persistenceContext.countTable(table) - before.get(table); - actualResults.put(table, actualCount); - } + for (String table : shell) { + long actualCount = factor * persistenceContext.countTable(table) - before.get(table); + actualResults.put(table, actualCount); } System.out.println(replicateScript.content()); StringBuilder asserts = new StringBuilder(); @@ -117,13 +117,10 @@ public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite { System.out.println(asserts); return; } - - try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { - for (String table : shell) { - long actualCount = persistenceContext.countTable(table) - before.get(table); - long expectedCount = factor * expected.get(table); - Assert.assertEquals("bad size for table: " + table, expectedCount, actualCount); - } + for (String table : shell) { + long actualCount = persistenceContext.countTable(table) - before.get(table); + long expectedCount = factor * expected.get(table); + Assert.assertEquals("bad size for table: " + table, expectedCount, actualCount); } } @@ -131,21 +128,25 @@ public class ReplicatePartialRequestTest extends PersistenceTestSupportWrite { @CopyDatabaseConfiguration public void test() { Map<String, Long> expected = ObservePersistenceFixtures.loadFixturesMapCount("persistence/replicate_partial_count/" + classifier + "-" + flavor); - try (ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext()) { + ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext(); - ReplicatePartialRequest replicateRequest = Trip.SPI.toSqlRequest(false, new MoveLayoutRequest(scopes, tripId, newId, false)); - Set<String> shell = applicationContext.createShell(replicateRequest); - Map<String, Long> beforeResults = getBeforeResults(applicationContext, shell); + ReplicatePartialRequest replicateRequest = Trip.SPI.toSqlRequest(false, new MoveLayoutRequest(scopes, tripId, newId, false)); + Set<String> shell = applicationContext.createShell(replicateRequest); - assertReplicate(applicationContext, replicateRequest, shell, expected, beforeResults, 1); + try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { - if (!ObservePersistenceFixtures.WITH_ASSERT) { - return; + Map<String, Long> beforeResults = getBeforeResults(persistenceContext, shell); + try { + assertReplicate(applicationContext, persistenceContext, replicateRequest, shell, expected, beforeResults, 1); + if (!ObservePersistenceFixtures.WITH_ASSERT) { + return; + } + assertReplicate(applicationContext, persistenceContext, replicateRequest, shell, expected, beforeResults, 2); + assertReplicate(applicationContext, persistenceContext, replicateRequest, shell, expected, beforeResults, 3); + assertReplicate(applicationContext, persistenceContext, replicateRequest, shell, expected, beforeResults, 4); + } finally { + persistenceContext.rollback(); } - - assertReplicate(applicationContext, replicateRequest, shell, expected, beforeResults, 2); - assertReplicate(applicationContext, replicateRequest, shell, expected, beforeResults, 3); - assertReplicate(applicationContext, replicateRequest, shell, expected, beforeResults, 4); } } } ===================================== core/persistence/test/src/test/java/fr/ird/observe/persistence/test/request/ReplicateRequestTest.java ===================================== @@ -33,14 +33,11 @@ import fr.ird.observe.entities.data.RootOpenableEntity; import fr.ird.observe.entities.data.ps.logbook.SampleActivity; import fr.ird.observe.entities.data.ps.logbook.WellActivity; import fr.ird.observe.persistence.test.ObservePersistenceFixtures; -import fr.ird.observe.persistence.test.PersistenceTestSupportWrite; +import fr.ird.observe.persistence.test.PersistenceTestSupportRead; import fr.ird.observe.spi.ObservePersistenceBusinessProject; import fr.ird.observe.spi.context.DtoEntityContext; import fr.ird.observe.spi.relation.WithDtoEntityRelation; -import fr.ird.observe.test.DatabaseName; import fr.ird.observe.test.IgnoreTestClassRule; -import fr.ird.observe.test.spi.CopyDatabaseConfiguration; -import fr.ird.observe.test.spi.DatabaseNameConfiguration; import io.ultreia.java4all.util.sql.SqlScript; import io.ultreia.java4all.util.sql.SqlScriptConsumer; import org.junit.Assert; @@ -62,8 +59,7 @@ import java.util.stream.Collectors; * @since 9.0.0 */ @RunWith(Parameterized.class) -@DatabaseNameConfiguration(DatabaseName.data) -public class ReplicateRequestTest extends PersistenceTestSupportWrite { +public class ReplicateRequestTest extends PersistenceTestSupportRead { @ClassRule public static final IgnoreTestClassRule IGNORE2 = new IgnoreTestClassRule("Persistence Request", "persistence.request.test.skip"); @@ -78,54 +74,56 @@ public class ReplicateRequestTest extends PersistenceTestSupportWrite { @Parameterized.Parameters(name = "{0}") public static Iterable<Object[]> data() { return ObservePersistenceBusinessProject.get().getEntityToDtoClassMapping().keySet().stream() - .filter(Class::isInterface) - .filter(Predicate.not(RootOpenableEntity.class::isAssignableFrom).and(DataEntity.class::isAssignableFrom).and(Predicate.not(NO_REPLICATE_TYPES::contains))) - .sorted(Comparator.comparing(Object::toString)).map(t -> new Object[]{t}).collect(Collectors.toList()); + .filter(Class::isInterface) + .filter(Predicate.not(RootOpenableEntity.class::isAssignableFrom).and(DataEntity.class::isAssignableFrom).and(Predicate.not(NO_REPLICATE_TYPES::contains))) + .sorted(Comparator.comparing(Object::toString)).map(t -> new Object[]{t}).collect(Collectors.toList()); } @Test - @CopyDatabaseConfiguration public void replicate() { String variableName = ObservePersistenceFixtures.getEntityVariableName(entityType); String id = ObservePersistenceFixtures.getVariable(variableName); log.info(String.format("test replicate for: %s", id)); DtoEntityContext<BusinessDto, DtoReference, ? extends DataEntity, ?> spi = ObservePersistenceBusinessProject.fromEntity(entityType); - try (ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext()) { - ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); - String parentId; - try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { - parentId = ((WithDtoEntityRelation<?, ?, ?, ?>) spi).getParentId(persistenceContext, id).getId(); - } - log.info(String.format("use parent id: %s", parentId)); + ObserveTopiaApplicationContext applicationContext = localTestMethodResource.getTopiaApplicationContext(); + ObservePersistenceFixtures.assertDataExist(applicationContext, spi, id); + String parentId; + try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { + parentId = ((WithDtoEntityRelation<?, ?, ?, ?>) spi).getParentId(persistenceContext, id).getId(); + } + log.info(String.format("use parent id: %s", parentId)); - ReplicateRequest replicateRequest = new ReplicateRequest(false, parentId, parentId, entityType.getName(), id); - DeleteRequest deleteRequest = new DeleteRequest(false, entityType.getName(), parentId, id); - SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest); - SqlScript replicateScript = applicationContext.getSqlService().consume(replicateRequest); - String replicateScriptContent = replicateScript.content(); - String deleteScriptContent = deleteScript.content(); - if (!ObservePersistenceFixtures.WITH_ASSERT) { - System.out.println(deleteScriptContent); - System.out.println(replicateScriptContent); - } + ReplicateRequest replicateRequest = new ReplicateRequest(false, parentId, parentId, entityType.getName(), id); + DeleteRequest deleteRequest = new DeleteRequest(false, entityType.getName(), parentId, id); + SqlScript deleteScript = applicationContext.getSqlService().consume(deleteRequest); + SqlScript replicateScript = applicationContext.getSqlService().consume(replicateRequest); + String replicateScriptContent = replicateScript.content(); + String deleteScriptContent = deleteScript.content(); + if (!ObservePersistenceFixtures.WITH_ASSERT) { + System.out.println(deleteScriptContent); + System.out.println(replicateScriptContent); + } - try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { + try (ObserveTopiaPersistenceContext persistenceContext = applicationContext.newPersistenceContext()) { + try { ObservePersistenceFixtures.assertDataExist(persistenceContext, spi, id); TopiaDao<? extends DataEntity> dao = spi.getDao(persistenceContext); long beforeCount = dao.count(); persistenceContext.executeSqlScript(deleteScript); - persistenceContext.commit(); + persistenceContext.flush(); ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id); persistenceContext.executeSqlScript(SqlScriptConsumer.of(replicateScript)); - persistenceContext.commit(); + persistenceContext.flush(); long afterCount = dao.count(); Assert.assertEquals(String.format("On type %s, should get count: %d, but get %d", entityType.getName(), beforeCount, afterCount), beforeCount, afterCount); - ObservePersistenceFixtures.assertDataNotExist(applicationContext, spi, id); - + ObservePersistenceFixtures.assertDataNotExist(persistenceContext, spi, id); + } finally { + persistenceContext.rollback(); } + } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/61a39193f1ace712c0f168ad36... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/commit/61a39193f1ace712c0f168ad36... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)