diff --git a/.travis.yml b/.travis.yml index 8ff6ee18b57..22c531f9877 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,8 +31,8 @@ matrix: fast_finish: true allow_failures: - env: TEST_SUITE=fetcherTest + - env: TEST_SUITE=databaseTest - env: TEST_SUITE=guiTest - - env: TEST_SUITE=codecov - env: DEPENDENCY_UPDATES=check # JavaFX localization tests need a running X environment diff --git a/build.gradle b/build.gradle index 899278d2efb..69e80a08027 100644 --- a/build.gradle +++ b/build.gradle @@ -204,7 +204,6 @@ dependencies { testCompile 'io.github.classgraph:classgraph:4.8.53' - testCompile 'junit:junit:4.12' testImplementation 'org.junit.jupiter:junit-jupiter:5.5.2' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.5.2' testCompile 'org.junit.platform:junit-platform-launcher:1.5.2' @@ -441,31 +440,49 @@ localization.script = 'scripts/syncLang.py' // Test tasks test { useJUnitPlatform { - excludeTags 'DatabaseTest', 'FetcherTest', 'GUITest', 'org.jabref.testutils.category.FetcherTest', 'org.jabref.testutils.category.GUITest' + excludeTags 'DatabaseTest', 'FetcherTest', 'GUITest' } testLogging { // set options for log level LIFECYCLE - events "failed" + events = ["FAILED", "STANDARD_OUT", "STANDARD_ERROR"] exceptionFormat "full" } } task databaseTest(type: Test) { - useJUnit { - includeCategories 'org.jabref.testutils.category.DatabaseTest' + useJUnitPlatform { + includeTags 'DatabaseTest' + } + + testLogging { + // set options for log level LIFECYCLE + events = ["FAILED", "STANDARD_OUT", "STANDARD_ERROR"] + exceptionFormat "full" } } task fetcherTest(type: Test) { - useJUnit { - includeCategories 'org.jabref.testutils.category.FetcherTest' + useJUnitPlatform { + includeTags 'FetcherTest' + } + + testLogging { + // set options for log level LIFECYCLE + events = ["FAILED", "STANDARD_OUT", "STANDARD_ERROR"] + exceptionFormat "full" } } task guiTest(type: Test) { - useJUnit { - includeCategories 'org.jabref.testutils.category.GUITest' + useJUnitPlatform { + includeTags 'GUITest' + } + + testLogging { + // set options for log level LIFECYCLE + events = ["FAILED", "STANDARD_OUT", "STANDARD_ERROR"] + exceptionFormat "full" } } @@ -480,9 +497,24 @@ tasks.withType(Test) { reports.html.destination = file("${reporting.baseDir}/${name}") } +task jacocoMergePrep() { + doFirst { + // Ignore failures of tests + tasks.withType(Test) { + ignoreFailures = true + } + } +} +test.mustRunAfter jacocoMergePrep +databaseTest.mustRunAfter jacocoMergePrep +fetcherTest.mustRunAfter jacocoMergePrep + task jacocoMerge(type: JacocoMerge) { - executionData file("$buildDir/jacoco/test.exec"), file("$buildDir/jacoco/databaseTest.exec"), file("$buildDir/jacoco/fetcherTest.exec") - dependsOn test, databaseTest, fetcherTest + executionData files( + "$buildDir/jacoco/test.exec", + "$buildDir/jacoco/databaseTest.exec", + "$buildDir/jacoco/fetcherTest.exec").filter { it.exists() } + dependsOn jacocoMergePrep, test, databaseTest, fetcherTest } jacocoTestReport { diff --git a/src/main/java/org/jabref/logic/shared/DBMSConnection.java b/src/main/java/org/jabref/logic/shared/DBMSConnection.java index 9c2a3d09fdf..b137a5cd8b6 100644 --- a/src/main/java/org/jabref/logic/shared/DBMSConnection.java +++ b/src/main/java/org/jabref/logic/shared/DBMSConnection.java @@ -22,7 +22,6 @@ public class DBMSConnection implements DatabaseConnection { private final DBMSConnectionProperties properties; public DBMSConnection(DBMSConnectionProperties connectionProperties) throws SQLException, InvalidDBMSConnectionPropertiesException { - if (!connectionProperties.isValid()) { throw new InvalidDBMSConnectionPropertiesException(); } @@ -34,7 +33,6 @@ public DBMSConnection(DBMSConnectionProperties connectionProperties) throws SQLE // we use the side effect of getAvailableDBMSTypes() - it loads all available drivers DBMSConnection.getAvailableDBMSTypes(); this.connection = DriverManager.getConnection(connectionProperties.getUrl(), connectionProperties.asProperties()); - } catch (SQLException e) { // Some systems like PostgreSQL retrieves 0 to every exception. // Therefore a stable error determination is not possible. diff --git a/src/test/java/module-info.test b/src/test/java/module-info.test index 490bf7f6791..a46242d0d34 100644 --- a/src/test/java/module-info.test +++ b/src/test/java/module-info.test @@ -1,7 +1,3 @@ ---add-modules - // Make junit4 module visible (only required for last remaining parameterized tests) - junit - --add-modules // Add junit5 module dependency org.junit.jupiter.api diff --git a/src/test/java/org/jabref/logic/shared/DBMSProcessorTest.java b/src/test/java/org/jabref/logic/shared/DBMSProcessorTest.java index 52006447666..4a59dfea7cb 100644 --- a/src/test/java/org/jabref/logic/shared/DBMSProcessorTest.java +++ b/src/test/java/org/jabref/logic/shared/DBMSProcessorTest.java @@ -2,26 +2,22 @@ import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.stream.Stream; +import java.util.stream.Collectors; -import org.jabref.logic.shared.exception.InvalidDBMSConnectionPropertiesException; import org.jabref.logic.shared.exception.OfflineLockException; import org.jabref.model.database.shared.DBMSType; import org.jabref.model.entry.BibEntry; -import org.jabref.model.entry.field.Field; +import org.jabref.model.entry.field.InternalField; import org.jabref.model.entry.field.StandardField; import org.jabref.model.entry.field.UnknownField; import org.jabref.model.entry.types.StandardEntryType; import org.jabref.testutils.category.DatabaseTest; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -34,37 +30,30 @@ @DatabaseTest class DBMSProcessorTest { - private static Stream getTestingDatabaseSystems() throws InvalidDBMSConnectionPropertiesException, SQLException { - Collection result = new ArrayList<>(); - for (DBMSType dbmsType : TestManager.getDBMSTypeTestParameter()) { - result.add(new Object[]{ - dbmsType, - TestConnector.getTestDBMSConnection(dbmsType), - DBMSProcessor.getProcessorInstance(TestConnector.getTestDBMSConnection(dbmsType))}); - } - return result.stream(); - } - @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testCheckBaseIntegrity(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws SQLException { dbmsProcessor.setupSharedDatabase(); assertTrue(dbmsProcessor.checkBaseIntegrity()); clear(dbmsConnection); assertFalse(dbmsProcessor.checkBaseIntegrity()); + + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testSetUpSharedDatabase(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws SQLException { dbmsProcessor.setupSharedDatabase(); clear(dbmsConnection); dbmsProcessor.setupSharedDatabase(); assertTrue(dbmsProcessor.checkBaseIntegrity()); + + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testInsertEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws SQLException { dbmsProcessor.setupSharedDatabase(); BibEntry expectedEntry = getBibEntryExample(); @@ -91,52 +80,54 @@ void testInsertEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProce } } - Map expectedFieldMap = expectedEntry.getFieldMap(); + Map expectedFieldMap = expectedEntry.getFieldMap().entrySet().stream().collect(Collectors.toMap((entry) -> entry.getKey().getName(), Map.Entry::getValue)); assertEquals(expectedFieldMap, actualFieldMap); + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") - void testUpdateEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws OfflineLockException, SQLException { + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + void testUpdateEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { dbmsProcessor.setupSharedDatabase(); BibEntry expectedEntry = getBibEntryExample(); - dbmsProcessor.insertEntry(expectedEntry); expectedEntry.setType(StandardEntryType.Book); expectedEntry.setField(StandardField.AUTHOR, "Michael J and Hutchings"); expectedEntry.setField(new UnknownField("customField"), "custom value"); expectedEntry.clearField(StandardField.BOOKTITLE); - dbmsProcessor.updateEntry(expectedEntry); - Optional actualEntryOptional = dbmsProcessor - .getSharedEntry(expectedEntry.getSharedBibEntryData().getSharedID()); + Optional actualEntry = dbmsProcessor.getSharedEntry(expectedEntry.getSharedBibEntryData().getSharedID()); + assertEquals(expectedEntry, actualEntry.get()); - assertEquals(expectedEntry, actualEntryOptional.get()); + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") - void testGetEntriesByIdList(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws OfflineLockException, SQLException { + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + void testGetEntriesByIdList(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { dbmsProcessor.setupSharedDatabase(); BibEntry firstEntry = getBibEntryExample(); - firstEntry.setId("1"); + firstEntry.setField(InternalField.INTERNAL_ID_FIELD, "00001"); BibEntry secondEntry = getBibEntryExample(); - secondEntry.setId("2"); + secondEntry.setField(InternalField.INTERNAL_ID_FIELD, "00002"); dbmsProcessor.insertEntry(firstEntry); dbmsProcessor.insertEntry(secondEntry); List sharedEntriesByIdList = dbmsProcessor.getSharedEntries(Arrays.asList(1, 2)); - assertEquals(firstEntry.getId(), sharedEntriesByIdList.get(0).getId()); - assertEquals(secondEntry.getId(), sharedEntriesByIdList.get(1).getId()); + clear(dbmsConnection); + + assertEquals(firstEntry, sharedEntriesByIdList.get(0)); + assertEquals(secondEntry, sharedEntriesByIdList.get(1)); + } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testUpdateNewerEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws OfflineLockException, SQLException { dbmsProcessor.setupSharedDatabase(); BibEntry bibEntry = getBibEntryExample(); @@ -148,10 +139,12 @@ void testUpdateNewerEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMS bibEntry.setField(StandardField.YEAR, "1993"); assertThrows(OfflineLockException.class, () -> dbmsProcessor.updateEntry(bibEntry)); + + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testUpdateEqualEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws OfflineLockException, SQLException { dbmsProcessor.setupSharedDatabase(); BibEntry expectedBibEntry = getBibEntryExample(); @@ -162,13 +155,15 @@ void testUpdateEqualEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMS dbmsProcessor.updateEntry(expectedBibEntry); Optional actualBibEntryOptional = dbmsProcessor - .getSharedEntry(expectedBibEntry.getSharedBibEntryData().getSharedID()); + .getSharedEntry(expectedBibEntry.getSharedBibEntryData().getSharedID()); assertEquals(expectedBibEntry, actualBibEntryOptional.get()); + + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testRemoveEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws SQLException { dbmsProcessor.setupSharedDatabase(); BibEntry bibEntry = getBibEntryExample(); @@ -178,10 +173,11 @@ void testRemoveEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProce try (ResultSet resultSet = selectFrom("ENTRY", dbmsConnection, dbmsProcessor)) { assertFalse(resultSet.next()); } + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testGetSharedEntries(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws SQLException { dbmsProcessor.setupSharedDatabase(); BibEntry bibEntry = getBibEntryExampleWithEmptyFields(); @@ -192,32 +188,35 @@ void testGetSharedEntries(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMS List actualEntries = dbmsProcessor.getSharedEntries(); assertEquals(expectedEntries, actualEntries); + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testGetSharedEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws SQLException { dbmsProcessor.setupSharedDatabase(); BibEntry expectedBibEntry = getBibEntryExampleWithEmptyFields(); dbmsProcessor.insertEntry(expectedBibEntry); - Optional actualBibEntryOptional = dbmsProcessor - .getSharedEntry(expectedBibEntry.getSharedBibEntryData().getSharedID()); + Optional actualBibEntryOptional = dbmsProcessor.getSharedEntry(expectedBibEntry.getSharedBibEntryData().getSharedID()); assertEquals(expectedBibEntry, actualBibEntryOptional.get()); + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testGetNotExistingSharedEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws SQLException { dbmsProcessor.setupSharedDatabase(); Optional actualBibEntryOptional = dbmsProcessor.getSharedEntry(1); assertFalse(actualBibEntryOptional.isPresent()); + + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testGetSharedIDVersionMapping(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws OfflineLockException, SQLException { dbmsProcessor.setupSharedDatabase(); BibEntry firstEntry = getBibEntryExample(); @@ -234,10 +233,12 @@ void testGetSharedIDVersionMapping(DBMSType dbmsType, DBMSConnection dbmsConnect Map actualIDVersionMap = dbmsProcessor.getSharedIDVersionMapping(); assertEquals(expectedIDVersionMap, actualIDVersionMap); + + clear(dbmsConnection); } @ParameterizedTest - @MethodSource("getTestingDatabaseSystems") + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") void testGetSharedMetaData(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws SQLException { dbmsProcessor.setupSharedDatabase(); insertMetaData("databaseType", "bibtex;", dbmsConnection, dbmsProcessor); @@ -249,6 +250,7 @@ void testGetSharedMetaData(DBMSType dbmsType, DBMSConnection dbmsConnection, DBM Map actualMetaData = dbmsProcessor.getSharedMetaData(); assertEquals(expectedMetaData, actualMetaData); + clear(dbmsConnection); } @ParameterizedTest @@ -261,6 +263,7 @@ void testSetSharedMetaData(DBMSType dbmsType, DBMSConnection dbmsConnection, DBM Map actualMetaData = dbmsProcessor.getSharedMetaData(); assertEquals(expectedMetaData, actualMetaData); + clear(dbmsConnection); } private Map getMetaDataExample() { @@ -307,8 +310,8 @@ private ResultSet selectFrom(String table, DBMSConnection dbmsConnection, DBMSPr private void insertMetaData(String key, String value, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) { try { dbmsConnection.getConnection().createStatement().executeUpdate("INSERT INTO " + escape("METADATA", dbmsProcessor) + "(" - + escape("KEY", dbmsProcessor) + ", " + escape("VALUE", dbmsProcessor) + ") VALUES(" - + escapeValue(key) + ", " + escapeValue(value) + ")"); + + escape("KEY", dbmsProcessor) + ", " + escape("VALUE", dbmsProcessor) + ") VALUES(" + + escapeValue(key) + ", " + escapeValue(value) + ")"); } catch (SQLException e) { fail(e.getMessage()); } @@ -322,7 +325,6 @@ private String escapeValue(String value) { return "'" + value + "'"; } - @AfterEach void clear(DBMSConnection dbmsConnection) throws SQLException { TestManager.clearTables(dbmsConnection); } diff --git a/src/test/java/org/jabref/logic/shared/DBMSSynchronizerTest.java b/src/test/java/org/jabref/logic/shared/DBMSSynchronizerTest.java index ef4fd4acbff..1f958db27b0 100644 --- a/src/test/java/org/jabref/logic/shared/DBMSSynchronizerTest.java +++ b/src/test/java/org/jabref/logic/shared/DBMSSynchronizerTest.java @@ -3,15 +3,12 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import org.jabref.logic.exporter.MetaDataSerializer; import org.jabref.logic.formatter.casechanger.LowerCaseFormatter; -import org.jabref.logic.shared.exception.InvalidDBMSConnectionPropertiesException; -import org.jabref.logic.shared.exception.OfflineLockException; import org.jabref.model.bibtexkeypattern.GlobalBibtexKeyPattern; import org.jabref.model.cleanup.FieldFormatterCleanup; import org.jabref.model.cleanup.FieldFormatterCleanups; @@ -19,7 +16,6 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.database.shared.DBMSType; -import org.jabref.model.database.shared.DatabaseNotSupportedException; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.event.EntriesEventSource; import org.jabref.model.entry.field.StandardField; @@ -29,11 +25,8 @@ import org.jabref.model.util.DummyFileUpdateMonitor; import org.jabref.testutils.category.DatabaseTest; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.runners.Parameterized.Parameter; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -41,39 +34,27 @@ @DatabaseTest public class DBMSSynchronizerTest { - @Parameter - public DBMSType dbmsType; private DBMSSynchronizer dbmsSynchronizer; - private DBMSConnection dbmsConnection; - private DBMSProcessor dbmsProcessor; private BibDatabase bibDatabase; - private GlobalBibtexKeyPattern pattern; + private final GlobalBibtexKeyPattern pattern = GlobalBibtexKeyPattern.fromPattern("[auth][year]"); - @Parameters(name = "Test with {0} database system") - public static Collection getTestingDatabaseSystems() { - return TestManager.getDBMSTypeTestParameter(); - } - - @BeforeEach - public void setUp() throws SQLException, DatabaseNotSupportedException, InvalidDBMSConnectionPropertiesException { - - dbmsConnection = TestConnector.getTestDBMSConnection(dbmsType); + public void setUp(DBMSConnection dbmsConnection) throws Exception { + clear(dbmsConnection); bibDatabase = new BibDatabase(); BibDatabaseContext context = new BibDatabaseContext(bibDatabase); - - pattern = GlobalBibtexKeyPattern.fromPattern("[auth][year]"); - dbmsSynchronizer = new DBMSSynchronizer(context, ',', pattern, new DummyFileUpdateMonitor()); - dbmsProcessor = DBMSProcessor.getProcessorInstance(dbmsConnection); bibDatabase.registerListener(dbmsSynchronizer); dbmsSynchronizer.openSharedDatabase(dbmsConnection); } - @Test - public void testEntryAddedEventListener() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void testEntryAddedEventListener(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsConnection); + BibEntry expectedEntry = getBibEntryExample(1); BibEntry furtherEntry = getBibEntryExample(1); @@ -85,10 +66,15 @@ public void testEntryAddedEventListener() { assertEquals(1, actualEntries.size()); assertEquals(expectedEntry, actualEntries.get(0)); + + clear(dbmsConnection); } - @Test - public void testFieldChangedEventListener() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void testFieldChangedEventListener(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsConnection); + BibEntry expectedEntry = getBibEntryExample(1); expectedEntry.registerListener(dbmsSynchronizer); @@ -97,13 +83,16 @@ public void testFieldChangedEventListener() { expectedEntry.setField(StandardField.TITLE, "The micro multiplexer", EntriesEventSource.SHARED); List actualEntries = dbmsProcessor.getSharedEntries(); - assertEquals(1, actualEntries.size()); - assertEquals(expectedEntry.getField(StandardField.AUTHOR), actualEntries.get(0).getField(StandardField.AUTHOR)); - assertEquals("The nano processor1", actualEntries.get(0).getField(StandardField.TITLE).get()); + assertEquals(Collections.singletonList(expectedEntry), actualEntries); + + clear(dbmsConnection); } - @Test - public void testEntriesRemovedEventListener() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void testEntryRemovedEventListener(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsConnection); + BibEntry bibEntry = getBibEntryExample(1); bibDatabase.insertEntry(bibEntry); @@ -122,10 +111,15 @@ public void testEntriesRemovedEventListener() { actualEntries = dbmsProcessor.getSharedEntries(); assertEquals(1, actualEntries.size()); assertEquals(bibEntry, actualEntries.get(0)); + + clear(dbmsConnection); } - @Test - public void testMetaDataChangedEventListener() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void testMetaDataChangedEventListener(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsConnection); + MetaData testMetaData = new MetaData(); testMetaData.registerListener(dbmsSynchronizer); dbmsSynchronizer.setMetaData(testMetaData); @@ -135,19 +129,28 @@ public void testMetaDataChangedEventListener() { Map actualMap = dbmsProcessor.getSharedMetaData(); assertEquals(expectedMap, actualMap); + + clear(dbmsConnection); } - @Test - public void testInitializeDatabases() throws SQLException, DatabaseNotSupportedException { - clear(); + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void testInitializeDatabases(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsConnection); + + clear(dbmsConnection); dbmsSynchronizer.initializeDatabases(); assertTrue(dbmsProcessor.checkBaseIntegrity()); dbmsSynchronizer.initializeDatabases(); assertTrue(dbmsProcessor.checkBaseIntegrity()); + clear(dbmsConnection); } - @Test - public void testSynchronizeLocalDatabaseWithEntryRemoval() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void testSynchronizeLocalDatabaseWithEntryRemoval(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsConnection); + List expectedBibEntries = Arrays.asList(getBibEntryExample(1), getBibEntryExample(2)); dbmsProcessor.insertEntry(expectedBibEntries.get(0)); @@ -167,10 +170,15 @@ public void testSynchronizeLocalDatabaseWithEntryRemoval() { dbmsSynchronizer.synchronizeLocalDatabase(); assertEquals(expectedBibEntries, bibDatabase.getEntries()); + + clear(dbmsConnection); } - @Test - public void testSynchronizeLocalDatabaseWithEntryUpdate() throws OfflineLockException, SQLException { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void testSynchronizeLocalDatabaseWithEntryUpdate(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsConnection); + BibEntry bibEntry = getBibEntryExample(1); bibDatabase.insertEntry(bibEntry); assertEquals(1, bibDatabase.getEntries().size()); @@ -185,21 +193,26 @@ public void testSynchronizeLocalDatabaseWithEntryUpdate() throws OfflineLockExce dbmsSynchronizer.synchronizeLocalDatabase(); assertEquals(bibDatabase.getEntries(), dbmsProcessor.getSharedEntries()); + clear(dbmsConnection); } - @Test - public void testApplyMetaData() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void testApplyMetaData(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsConnection); + BibEntry bibEntry = getBibEntryExample(1); bibDatabase.insertEntry(bibEntry); MetaData testMetaData = new MetaData(); - testMetaData.setSaveActions(new FieldFormatterCleanups(true, - Collections.singletonList(new FieldFormatterCleanup(StandardField.AUTHOR, new LowerCaseFormatter())))); + testMetaData.setSaveActions(new FieldFormatterCleanups(true, Collections.singletonList(new FieldFormatterCleanup(StandardField.AUTHOR, new LowerCaseFormatter())))); dbmsSynchronizer.setMetaData(testMetaData); dbmsSynchronizer.applyMetaData(); assertEquals("wirthlin, michael j1", bibEntry.getField(StandardField.AUTHOR).get()); + + clear(dbmsConnection); } private BibEntry getBibEntryExample(int index) { @@ -211,8 +224,7 @@ private BibEntry getBibEntryExample(int index) { return bibEntry; } - @AfterEach - public void clear() throws SQLException { + public void clear(DBMSConnection dbmsConnection) throws SQLException { TestManager.clearTables(dbmsConnection); } } diff --git a/src/test/java/org/jabref/logic/shared/DBMSTypeTest.java b/src/test/java/org/jabref/logic/shared/DBMSTypeTest.java index 7b1879640b4..87ba1169cc3 100644 --- a/src/test/java/org/jabref/logic/shared/DBMSTypeTest.java +++ b/src/test/java/org/jabref/logic/shared/DBMSTypeTest.java @@ -22,7 +22,7 @@ public void testToString() { public void testGetDriverClassPath() { assertEquals("org.mariadb.jdbc.Driver", DBMSType.MYSQL.getDriverClassPath()); assertEquals("oracle.jdbc.driver.OracleDriver", DBMSType.ORACLE.getDriverClassPath()); - assertEquals("com.impossibl.postgres.jdbc.PGDriver", DBMSType.POSTGRESQL.getDriverClassPath()); + assertEquals("org.postgresql.Driver", DBMSType.POSTGRESQL.getDriverClassPath()); } @Test @@ -37,7 +37,7 @@ public void testFromString() { public void testGetUrl() { assertEquals("jdbc:mariadb://localhost:3306/xe", DBMSType.MYSQL.getUrl("localhost", 3306, "xe")); assertEquals("jdbc:oracle:thin:@localhost:1521:xe", DBMSType.ORACLE.getUrl("localhost", 1521, "xe")); - assertEquals("jdbc:pgsql://localhost:5432/xe", DBMSType.POSTGRESQL.getUrl("localhost", 5432, "xe")); + assertEquals("jdbc:postgresql://localhost:5432/xe", DBMSType.POSTGRESQL.getUrl("localhost", 5432, "xe")); } @Test diff --git a/src/test/java/org/jabref/logic/shared/SynchronizationTestSimulator.java b/src/test/java/org/jabref/logic/shared/SynchronizationTestSimulator.java index 78e11ebefa7..fb8bf59b0d5 100644 --- a/src/test/java/org/jabref/logic/shared/SynchronizationTestSimulator.java +++ b/src/test/java/org/jabref/logic/shared/SynchronizationTestSimulator.java @@ -1,15 +1,12 @@ package org.jabref.logic.shared; import java.sql.SQLException; -import java.util.Collection; -import org.jabref.logic.shared.exception.InvalidDBMSConnectionPropertiesException; import org.jabref.model.Defaults; import org.jabref.model.bibtexkeypattern.GlobalBibtexKeyPattern; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.database.shared.DBMSType; -import org.jabref.model.database.shared.DatabaseNotSupportedException; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; import org.jabref.model.entry.field.UnknownField; @@ -17,11 +14,8 @@ import org.jabref.model.util.DummyFileUpdateMonitor; import org.jabref.testutils.category.DatabaseTest; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.runners.Parameterized.Parameter; -import org.junit.runners.Parameterized.Parameters; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -32,23 +26,12 @@ @DatabaseTest public class SynchronizationTestSimulator { - @Parameter - public DBMSType dbmsType; private BibDatabaseContext clientContextA; private BibDatabaseContext clientContextB; private SynchronizationTestEventListener eventListenerB; // used to monitor occurring events - private DBMSConnection dbmsConnection; + private final GlobalBibtexKeyPattern pattern = GlobalBibtexKeyPattern.fromPattern("[auth][year]"); - @Parameters(name = "Test with {0} database system") - public static Collection getTestingDatabaseSystems() { - return TestManager.getDBMSTypeTestParameter(); - } - - @BeforeEach - public void setUp() throws SQLException, DatabaseNotSupportedException, InvalidDBMSConnectionPropertiesException { - this.dbmsConnection = TestConnector.getTestDBMSConnection(dbmsType); - - GlobalBibtexKeyPattern pattern = GlobalBibtexKeyPattern.fromPattern("[auth][year]"); + public void setUp(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { clientContextA = new BibDatabaseContext(new Defaults(BibDatabaseMode.BIBTEX)); DBMSSynchronizer synchronizerA = new DBMSSynchronizer(clientContextA, ',', pattern, new DummyFileUpdateMonitor()); clientContextA.convertToSharedDatabase(synchronizerA); @@ -62,8 +45,10 @@ public void setUp() throws SQLException, DatabaseNotSupportedException, InvalidD clientContextB.getDBMSSynchronizer().registerListener(eventListenerB); } - @Test - public void simulateEntryInsertionAndManualPull() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void simulateEntryInsertionAndManualPull(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsType, dbmsConnection, dbmsProcessor); //client A inserts an entry clientContextA.getDatabase().insertEntry(getBibEntryExample(1)); //client A inserts another entry @@ -72,10 +57,15 @@ public void simulateEntryInsertionAndManualPull() { clientContextB.getDBMSSynchronizer().pullChanges(); assertEquals(clientContextA.getDatabase().getEntries(), clientContextB.getDatabase().getEntries()); + + clear(dbmsConnection); } - @Test - public void simulateEntryUpdateAndManualPull() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void simulateEntryUpdateAndManualPull(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsType, dbmsConnection, dbmsProcessor); + BibEntry bibEntry = getBibEntryExample(1); //client A inserts an entry clientContextA.getDatabase().insertEntry(bibEntry); @@ -87,10 +77,15 @@ public void simulateEntryUpdateAndManualPull() { clientContextB.getDBMSSynchronizer().pullChanges(); assertEquals(clientContextA.getDatabase().getEntries(), clientContextB.getDatabase().getEntries()); + + clear(dbmsConnection); } - @Test - public void simulateEntryDelitionAndManualPull() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void simulateEntryDelitionAndManualPull(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsType, dbmsConnection, dbmsProcessor); + BibEntry bibEntry = getBibEntryExample(1); //client A inserts an entry clientContextA.getDatabase().insertEntry(bibEntry); @@ -108,10 +103,15 @@ public void simulateEntryDelitionAndManualPull() { assertTrue(clientContextA.getDatabase().getEntries().isEmpty()); assertTrue(clientContextB.getDatabase().getEntries().isEmpty()); + + clear(dbmsConnection); } - @Test - public void simulateUpdateOnNoLongerExistingEntry() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void simulateUpdateOnNoLongerExistingEntry(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsType, dbmsConnection, dbmsProcessor); + BibEntry bibEntryOfClientA = getBibEntryExample(1); //client A inserts an entry clientContextA.getDatabase().insertEntry(bibEntryOfClientA); @@ -134,10 +134,15 @@ public void simulateUpdateOnNoLongerExistingEntry() { // here a new SharedEntryNotPresentEvent has been thrown. In this case the user B would get an pop-up window. assertNotNull(eventListenerB.getSharedEntriesNotPresentEvent()); assertEquals(bibEntryOfClientB, eventListenerB.getSharedEntriesNotPresentEvent().getBibEntries()); + + clear(dbmsConnection); } - @Test - public void simulateEntryChangeConflicts() { + @ParameterizedTest + @MethodSource("org.jabref.logic.shared.TestManager#getTestingDatabaseSystems") + public void simulateEntryChangeConflicts(DBMSType dbmsType, DBMSConnection dbmsConnection, DBMSProcessor dbmsProcessor) throws Exception { + setUp(dbmsType, dbmsConnection, dbmsProcessor); + BibEntry bibEntryOfClientA = getBibEntryExample(1); //client A inserts an entry clientContextA.getDatabase().insertEntry(bibEntryOfClientA); @@ -160,6 +165,8 @@ public void simulateEntryChangeConflicts() { // B now cannot update the shared entry, due to optimistic offline lock. // In this case an BibEntry merge dialog pops up. assertNotNull(eventListenerB.getUpdateRefusedEvent()); + + clear(dbmsConnection); } private BibEntry getBibEntryExample(int index) { @@ -172,8 +179,7 @@ private BibEntry getBibEntryExample(int index) { return bibEntry; } - @AfterEach - public void clear() throws SQLException { + public void clear(DBMSConnection dbmsConnection) throws SQLException { TestManager.clearTables(dbmsConnection); } } diff --git a/src/test/java/org/jabref/logic/shared/TestConnector.java b/src/test/java/org/jabref/logic/shared/TestConnector.java index 9949b83e649..78f078ce2f9 100644 --- a/src/test/java/org/jabref/logic/shared/TestConnector.java +++ b/src/test/java/org/jabref/logic/shared/TestConnector.java @@ -15,7 +15,6 @@ public static DBMSConnection getTestDBMSConnection(DBMSType dbmsType) throws SQL } public static DBMSConnectionProperties getTestConnectionProperties(DBMSType dbmsType) { - if (dbmsType == DBMSType.MYSQL) { return new DBMSConnectionProperties(dbmsType, "localhost", dbmsType.getDefaultPort(), "jabref", "root", "", false, ""); } diff --git a/src/test/java/org/jabref/logic/shared/TestManager.java b/src/test/java/org/jabref/logic/shared/TestManager.java index 6c9ec6fd5b6..2b8f1f4d2f5 100644 --- a/src/test/java/org/jabref/logic/shared/TestManager.java +++ b/src/test/java/org/jabref/logic/shared/TestManager.java @@ -1,9 +1,11 @@ package org.jabref.logic.shared; import java.sql.SQLException; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Set; +import java.util.stream.Stream; import org.jabref.logic.shared.exception.InvalidDBMSConnectionPropertiesException; import org.jabref.model.database.shared.DBMSType; @@ -48,4 +50,15 @@ public static void clearTables(DBMSConnection dbmsConnection) throws SQLExceptio + "IF SQLCODE != -942 THEN\n" + "RAISE;\n" + "END IF;\n" + "END;"); } } + + static Stream getTestingDatabaseSystems() throws InvalidDBMSConnectionPropertiesException, SQLException { + Collection result = new ArrayList<>(); + for (DBMSType dbmsType : getDBMSTypeTestParameter()) { + result.add(new Object[]{ + dbmsType, + TestConnector.getTestDBMSConnection(dbmsType), + DBMSProcessor.getProcessorInstance(TestConnector.getTestDBMSConnection(dbmsType))}); + } + return result.stream(); + } }