From 5d3b9aadc404d7b7d2fcd4a82fb4514584d836a2 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 30 Apr 2026 17:03:36 +0200 Subject: [PATCH 01/22] TestContainers --- bitrepository-alarm-service/pom.xml | 15 + .../alarm/store/AlarmDatabaseTest.java | 35 +- bitrepository-audit-trail-service/pom.xml | 20 + .../audittrails/store/AuditDatabaseTest.java | 421 +++++-- bitrepository-client/pom.xml | 10 + .../client/DefaultClientTest.java | 4 +- .../client/DefaultFixtureClientTest.java | 106 +- .../putfile/PutFileClientComponentTest.java | 4 +- bitrepository-core/pom.xml | 211 ++-- .../protocol/activemq/ActiveMQMessageBus.java | 112 +- .../messagebus/ReceivedMessageHandler.java | 3 +- .../ActiveMQFixedPortContainer.java | 21 + .../PostgresFixedPortContainer.java | 22 + .../protocol/IntegrationTest.java | 64 +- .../protocol/bus/ActiveMQMessageBusTest.java | 239 ++-- .../protocol/bus/GeneralMessageBusTest.java | 126 +- .../bus/MultiThreadedMessageBusTest.java | 121 -- .../protocol/bus/RawMessagebus.java | 12 +- .../src/test/resources/logback-test.xml | 2 + .../bitrepository-devel/ReferenceSettings.xml | 6 +- .../test/resources/testcontainers.properties | 1 + bitrepository-integrity-service/pom.xml | 23 +- .../cache/database/IntegrityDAO.java | 7 +- .../cache/database/IntegrityDAOUtils.java | 5 +- .../database/IntegrityDatabaseCreator.java | 11 +- .../sql/postgres/integrityDB7to8migration.sql | 2 +- .../sql/postgres/integrityDBCreation.sql | 38 +- .../main/scripts/create_derby_databases.sh | 17 +- .../src/test/conf/ReferenceSettings.xml | 4 +- .../IntegrityDatabaseTestCase.java | 129 +- .../cache/IntegrityDAOTest.java | 1050 +++++++++-------- .../cache/IntegrityDBToolsTest.java | 114 +- .../cache/IntegrityDatabaseTest.java | 2 - .../integrationtest/MissingChecksumTests.java | 52 +- .../stresstest/DatabaseStressTests.java | 60 +- bitrepository-reference-pillar/pom.xml | 15 + .../sql/postgres/checksumDBCreation.sql | 12 +- .../correctChecksumDB3to4Migration.sql | 2 +- .../pillar/DefaultFixturePillarTest.java | 334 +++++- .../pillar/DefaultPillarTest.java | 7 +- .../pillar/MockedPillarTest.java | 7 +- .../integration/PillarIntegrationTest.java | 93 +- .../ReferencePillarDerbyDBTestUtils.java | 56 +- .../perf/PillarPerformanceTest.java | 12 +- .../messagehandling/DeleteFileTest.java | 3 +- .../GeneralMessageHandlingTest.java | 1 + .../messagehandling/GetAuditTrailsTest.java | 3 +- .../messagehandling/GetChecksumsTest.java | 3 +- .../messagehandling/GetFileIDsTest.java | 3 +- .../pillar/messagehandling/GetFileTest.java | 3 +- .../pillar/messagehandling/PutFileTest.java | 3 +- .../messagehandling/ReplaceFileTest.java | 3 +- .../pillar/store/ChecksumPillarModelTest.java | 3 +- .../pillar/store/FullPillarModelTest.java | 3 +- .../store/archive/ArchiveDirectoryTest.java | 2 +- .../store/archive/ReferenceArchiveTest.java | 8 +- .../checksumcache/ChecksumDatabaseTest.java | 23 +- .../test/resources/conf/ReferenceSettings.xml | 12 +- .../src/test/resources/logback-test.xml | 3 + bitrepository-service/pom.xml | 10 + .../service/database/DatabaseCreator.java | 2 +- .../service/database/DatabaseMaintainer.java | 2 +- .../postgres/auditContributorDBCreation.sql | 24 +- .../postgres/auditContributorDBUpdate2to3.sql | 6 +- .../postgres/auditContributorDBUpdate3to4.sql | 6 +- .../postgres/auditContributorDBUpdate4to5.sql | 12 +- .../AuditTrailContributorDatabaseTest.java | 133 ++- pom.xml | 50 +- 68 files changed, 2503 insertions(+), 1425 deletions(-) create mode 100644 bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ActiveMQFixedPortContainer.java create mode 100644 bitrepository-core/src/test/java/org/bitrepository/pillar/integration/PostgresFixedPortContainer.java delete mode 100644 bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MultiThreadedMessageBusTest.java create mode 100644 bitrepository-core/src/test/resources/testcontainers.properties diff --git a/bitrepository-alarm-service/pom.xml b/bitrepository-alarm-service/pom.xml index 5236679fc..76eb750ae 100644 --- a/bitrepository-alarm-service/pom.xml +++ b/bitrepository-alarm-service/pom.xml @@ -86,6 +86,21 @@ ${artemis.version} test + + org.junit.jupiter + junit-jupiter + test + + + org.testcontainers + testcontainers-junit-jupiter + test + + + org.testcontainers + testcontainers-postgresql + test + Client for accessing alarms from the Bitrepository system diff --git a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java index 791bd58c0..145940ad5 100644 --- a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java +++ b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java @@ -26,19 +26,18 @@ import org.bitrepository.common.settings.Settings; import org.bitrepository.common.settings.TestSettingsProvider; import org.bitrepository.common.utils.CalendarUtils; -import org.bitrepository.common.utils.FileUtils; import org.bitrepository.service.database.DBConnector; import org.bitrepository.service.database.DatabaseUtils; -import org.bitrepository.service.database.DerbyDatabaseDestroyer; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.postgresql.PostgreSQLContainer; -import java.io.File; import java.time.Instant; import java.time.OffsetDateTime; import java.util.ArrayList; @@ -50,7 +49,7 @@ /** * Sees if alarms are correctly stored in the database. */ -@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@Testcontainers class AlarmDatabaseTest { /** * The settings for the tests. Should be instantiated in the setup. @@ -62,19 +61,22 @@ class AlarmDatabaseTest { String collection1 = "collection1"; String collection2 = "collection2"; String DATABASE_NAME = "alarmservicedb"; - String DATABASE_DIRECTORY = "test-data"; - String DATABASE_URL = "jdbc:derby:" + DATABASE_DIRECTORY + "/" + DATABASE_NAME; - File dbDir = null; - @BeforeAll + @Container + PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine") + .withDatabaseName(DATABASE_NAME); + + @BeforeEach void setup() { settings = TestSettingsProvider.reloadSettings("AlarmDatabaseUnderTest"); - - DerbyDatabaseDestroyer.deleteDatabase( - settings.getReferenceSettings().getAlarmServiceSettings().getAlarmServiceDatabase()); + var dbsettings = settings.getReferenceSettings().getAlarmServiceSettings().getAlarmServiceDatabase(); + dbsettings.setDatabaseURL(postgreSQLContainer.getJdbcUrl()); + dbsettings.setUsername(postgreSQLContainer.getUsername()); + dbsettings.setPassword(postgreSQLContainer.getPassword()); + dbsettings.setDriverClass(postgreSQLContainer.getDriverClassName()); AlarmDatabaseCreator integrityDatabaseCreator = new AlarmDatabaseCreator(); - integrityDatabaseCreator.createAlarmDatabase(settings, null); + integrityDatabaseCreator.createAlarmDatabase(settings, "sql/postgres/alarmServiceDBCreation.sql"); } @AfterEach @@ -86,11 +88,8 @@ void cleanupDatabase() { } @AfterAll - void shutdown() { + static void shutdown() { addStep("Cleanup after test.", "Should remove directory with test material."); - if (dbDir != null) { - FileUtils.delete(dbDir); - } } @Test diff --git a/bitrepository-audit-trail-service/pom.xml b/bitrepository-audit-trail-service/pom.xml index 55ef494e7..e4d428f97 100644 --- a/bitrepository-audit-trail-service/pom.xml +++ b/bitrepository-audit-trail-service/pom.xml @@ -85,6 +85,26 @@ ${artemis.version} test + + org.junit.jupiter + junit-jupiter + test + + + org.testcontainers + testcontainers-junit-jupiter + test + + + org.testcontainers + testcontainers-postgresql + test + + + com.fasterxml.jackson.core + jackson-databind + 2.21.2 + diff --git a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java index f89b95a43..ce71c562f 100644 --- a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java +++ b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java @@ -33,6 +33,10 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.testcontainers.containers.BindMode; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.postgresql.PostgreSQLContainer; import java.math.BigInteger; import java.time.Instant; @@ -43,8 +47,11 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; +@Testcontainers class AuditDatabaseTest { - /** The settings for the tests. Should be instantiated in the setup.*/ + /** + * The settings for the tests. Should be instantiated in the setup. + */ Settings settings; String fileID = "TEST-FILE-ID-" + Instant.now().toEpochMilli(); String fileID2 = "ANOTHER-FILE-ID" + Instant.now().toEpochMilli(); @@ -57,16 +64,25 @@ class AuditDatabaseTest { static final String fingerprint2 = "baba"; static final String operationID2 = "4321"; + @Container + PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine") + .withLogConsumer(log -> System.out.println(log.getUtf8StringWithoutLineEnding())) + .withClasspathResourceMapping( + "sql/postgres/auditTrailServiceDBCreation.sql", + "/docker-entrypoint-initdb.d/init.sql", + BindMode.READ_ONLY); + + @BeforeEach void setup() throws Exception { settings = TestSettingsProvider.reloadSettings("AuditDatabaseUnderTest"); - DerbyDatabaseDestroyer.deleteDatabase( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); - - AuditTrailDatabaseCreator auditTrailDatabaseCreator = new AuditTrailDatabaseCreator(); - auditTrailDatabaseCreator.createAuditTrailDatabase(settings, null); - collectionID = settings.getCollections().get(0).getID(); + + var dbsettings = settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase(); + dbsettings.setDatabaseURL(postgreSQLContainer.getJdbcUrl()); + dbsettings.setUsername(postgreSQLContainer.getUsername()); + dbsettings.setPassword(postgreSQLContainer.getPassword()); + dbsettings.setDriverClass(postgreSQLContainer.getDriverClassName()); } @Test @@ -74,13 +90,13 @@ void setup() throws Exception { @Tag("databasetest") void AuditDatabaseExtractionTest() throws Exception { addDescription("Testing the connection to the audit trail service database especially with regards to " - + "extracting the data from it."); + + "extracting the data from it."); addStep("Setup the variables and constants.", "Should be ok."); Instant restrictionDate = Instant.ofEpochMilli(123456789); // Sometime between epoch and now! addStep("Adds the variables to the settings and instantaites the database cache", "Should be connected."); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); addStep("Validate that the database is empty and then populate it.", "Should be possible."); @@ -90,112 +106,154 @@ void AuditDatabaseExtractionTest() throws Exception { addStep("Extract the audit trails", ""); List res = - getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, null, - null, null, null, (Instant) null, (Instant) null, null, null)); + getEventsFromIterator(database.getAuditTrailsByIterator(null, + null, + null, + null, + null, + null, + null, + (Instant) null, + (Instant) null, + null, + null)); Assertions.assertEquals(2, res.size(), res.toString()); addStep("Test the extraction of FileID", "Should be able to extract the audit of each file individually."); res = getEventsFromIterator(database.getAuditTrailsByIterator(fileID, null, null, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID, res.get(0).getFileID()); res = getEventsFromIterator(database.getAuditTrailsByIterator(fileID2, null, null, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID2, res.get(0).getFileID()); addStep("Test the extraction of CollectionID", "Only results when the defined collection is used"); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, collectionID, null, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(2, res.size(), res.toString()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, - "NOT-THE-CORRECT-COLLECTION-ID" + System.currentTimeMillis(), null, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + "NOT-THE-CORRECT-COLLECTION-ID" + + System.currentTimeMillis(), null, + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(0, res.size(), res.toString()); addStep("Perform extraction based on the component id.", ""); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, pillarID, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(2, res.size(), res.toString()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, - "NO COMPONENT", null, null, null, - null, - (Instant) null, (Instant) null, null, null)); + "NO COMPONENT", null, null, null, + null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(0, res.size(), res.toString()); addStep("Perform extraction based on the sequence number restriction", "Should be possible to have both lower and upper sequence number restrictions."); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - 5L, null, null, null, (Instant) null, - (Instant) null, null, null)); + 5L, null, null, null, (Instant) null, + (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID2, res.get(0).getFileID()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, 5L, null, null, (Instant) null, - (Instant) null, null, null)); + null, 5L, null, null, (Instant) null, + (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID, res.get(0).getFileID()); addStep("Perform extraction based on actor id restriction.", "Should be possible to restrict on the id of the actor."); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, actor1, null, - (Instant) null, (Instant) null, null, null)); + null, null, actor1, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(actor1, res.get(0).getActorOnFile()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, actor2, null, - (Instant) null, (Instant) null, null, null)); + null, null, actor2, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(actor2, res.get(0).getActorOnFile()); addStep("Perform extraction based on operation restriction.", "Should be possible to restrict on the FileAction operation."); - res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, null, - FileAction.INCONSISTENCY, (Instant) null, (Instant) null, null, null)); + res = getEventsFromIterator(database.getAuditTrailsByIterator(null, + null, + null, + null, + null, + null, + FileAction.INCONSISTENCY, + (Instant) null, + (Instant) null, + null, + null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(FileAction.INCONSISTENCY, res.get(0).getActionOnFile()); - res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, null, - FileAction.FAILURE, (Instant) null, (Instant) null, null, null)); + res = getEventsFromIterator(database.getAuditTrailsByIterator(null, + null, + null, + null, + null, + null, + FileAction.FAILURE, + (Instant) null, + (Instant) null, + null, + null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(FileAction.FAILURE, res.get(0).getActionOnFile()); addStep("Perform extraction based on date restriction.", "Should be possible to restrict on the date of the audit."); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, null, null, - restrictionDate, null, null, null)); + null, null, null, null, + restrictionDate, null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID2, res.get(0).getFileID()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, null, null, - null, restrictionDate, null, null)); + null, null, null, null, + null, restrictionDate, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID, res.get(0).getFileID()); addStep("Perform extraction based on fingerprint restriction.", "Should be possible to restrict on the fingerprint of the audit."); - res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, null, null, - (Instant) null, (Instant) null, fingerprint1, null)); + res = getEventsFromIterator(database.getAuditTrailsByIterator(null, + null, + null, + null, + null, + null, + null, + (Instant) null, + (Instant) null, + fingerprint1, + null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID, res.get(0).getFileID()); Assertions.assertEquals(fingerprint1, res.get(0).getCertificateID()); addStep("Perform extraction based on operationID restriction.", "Should be possible to restrict on the operationID of the audit."); - res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, null, null, - (Instant) null, (Instant) null, null, operationID2)); + res = getEventsFromIterator(database.getAuditTrailsByIterator(null, + null, + null, + null, + null, + null, + null, + (Instant) null, + (Instant) null, + null, + operationID2)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID2, res.get(0).getFileID()); Assertions.assertEquals(operationID2, res.get(0).getOperationID()); @@ -211,7 +269,7 @@ void AuditDatabasePreservationTest() throws Exception { addStep("Adds the variables to the settings and instantaites the database cache", "Should be connected."); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); Assertions.assertEquals(0, database.largestSequenceNumber(pillarID, collectionID)); @@ -238,7 +296,7 @@ void AuditDatabasePreservationTest() throws Exception { void auditDatabaseCorrectTimestampTest() { addDescription("Testing the correct ingest and extraction of audittrail dates"); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); Instant summertimeTS = OffsetDateTime.parse("2015-10-25T02:59:54.000+02:00").toInstant(); @@ -251,27 +309,48 @@ void auditDatabaseCorrectTimestampTest() { AuditTrailEvents events = new AuditTrailEvents(); events.getAuditTrailEvent().add(createSingleEvent(summertimeTS, - FileAction.CHECKSUM_CALCULATED, "actor", "auditInfo", "summertime", "info", - pillarID, new BigInteger("1"), - operationID1, fingerprint1)); + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + "summertime", + "info", + pillarID, + new BigInteger("1"), + operationID1, + fingerprint1)); events.getAuditTrailEvent().add(createSingleEvent(wintertimeTS, - FileAction.CHECKSUM_CALCULATED, "actor", "auditInfo", "wintertime", "info", - pillarID, new BigInteger("1"), - operationID1, fingerprint1)); + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + "wintertime", + "info", + pillarID, + new BigInteger("1"), + operationID1, + fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); List res = getEventsFromIterator(database.getAuditTrailsByIterator("summertime", - null, null, - null, - null, null, null, (Instant) null, (Instant) null, null, null)); + null, + null, + null, + null, + null, + null, + (Instant) null, + (Instant) null, + null, + null)); Assertions.assertEquals(1, res.size(), res.toString()); - Assertions.assertEquals(summertimeUnix, CalendarUtils.convertFromXMLGregorianCalendarToInstant(res.get(0).getActionDateTime())); + Assertions.assertEquals(summertimeUnix, + CalendarUtils.convertFromXMLGregorianCalendarToInstant(res.get(0).getActionDateTime())); res = getEventsFromIterator(database.getAuditTrailsByIterator("wintertime", null, - null, null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); - Assertions.assertEquals(wintertimeUnix, CalendarUtils.convertFromXMLGregorianCalendarToInstant(res.get(0).getActionDateTime())); + Assertions.assertEquals(wintertimeUnix, + CalendarUtils.convertFromXMLGregorianCalendarToInstant(res.get(0).getActionDateTime())); } @@ -283,7 +362,7 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Adds the variables to the settings and instantaites the database cache", "Should be connected."); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); AuditTrailEvents events; String veryLongString = ""; @@ -293,17 +372,31 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with all data", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("1"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + "fileID", + "info", + pillarID, + new BigInteger("1"), + operationID1, + fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); addStep("Test ingesting with no timestamp", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(null, FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("2"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(null, + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + "fileID", + "info", + pillarID, + new BigInteger("2"), + operationID1, + fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -313,9 +406,16 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no file action", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), null, - "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("3"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + null, + "actor", + "auditInfo", + "fileID", + "info", + pillarID, + new BigInteger("3"), + operationID1, + fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -325,9 +425,16 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no actor", "Throws exception"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - null, "auditInfo", "fileID", "info", pillarID, new BigInteger("4"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + null, + "auditInfo", + "fileID", + "info", + pillarID, + new BigInteger("4"), + operationID1, + fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -337,16 +444,30 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no audit info", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", null, "fileID", "info", pillarID, new BigInteger("5"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + "actor", + null, + "fileID", + "info", + pillarID, + new BigInteger("5"), + operationID1, + fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); addStep("Test ingesting with no file id", "Throws exception"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", null, "info", pillarID, new BigInteger("6"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + null, + "info", + pillarID, + new BigInteger("6"), + operationID1, + fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -356,16 +477,30 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no info", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", "fileID", null, pillarID, new BigInteger("7"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + "fileID", + null, + pillarID, + new BigInteger("7"), + operationID1, + fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); addStep("Test ingesting with no component id", "Throws exception"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", "fileID", "info", null, new BigInteger("8"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + "fileID", + "info", + null, + new BigInteger("8"), + operationID1, + fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -378,8 +513,8 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no sequence number", "Throws exception"); events = new AuditTrailEvents(); events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", "fileID", "info", pillarID, null, - operationID1, fingerprint1)); + "actor", "auditInfo", "fileID", "info", pillarID, null, + operationID1, fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -389,16 +524,30 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingest with very long auditInfo (255+)", "Not failing any more"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", veryLongString, "fileID", "info", pillarID, new BigInteger("9"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + "actor", + veryLongString, + "fileID", + "info", + pillarID, + new BigInteger("9"), + operationID1, + fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); addStep("Test ingest with very long info (255+)", "Not failing any more"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", "fileID", veryLongString, pillarID, new BigInteger("10"), - operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + "fileID", + veryLongString, + pillarID, + new BigInteger("10"), + operationID1, + fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); } @@ -411,23 +560,51 @@ void AuditDatabaseGoodIngestTest() throws Exception { addStep("Adds the variables to the settings and instantaites the database cache", "Should be connected."); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); addStep("Build test data", "No failure"); AuditTrailEvents events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.PUT_FILE, - "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("1"), - operationID1, fingerprint1)); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("2"), - operationID1, null)); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.REPLACE_FILE, - "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("3"), - null, fingerprint1)); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("4"), - null, null)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.PUT_FILE, + "actor", + "auditInfo", + "fileID", + "info", + pillarID, + new BigInteger("1"), + operationID1, + fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + "fileID", + "info", + pillarID, + new BigInteger("2"), + operationID1, + null)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.REPLACE_FILE, + "actor", + "auditInfo", + "fileID", + "info", + pillarID, + new BigInteger("3"), + null, + fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), + FileAction.CHECKSUM_CALCULATED, + "actor", + "auditInfo", + "fileID", + "info", + pillarID, + new BigInteger("4"), + null, + null)); database.addAuditTrails(events, collectionID, pillarID); } @@ -435,12 +612,28 @@ void AuditDatabaseGoodIngestTest() throws Exception { private AuditTrailEvents createEvents() { AuditTrailEvents events = new AuditTrailEvents(); - AuditTrailEvent event1 = createSingleEvent(Instant.EPOCH, FileAction.INCONSISTENCY, actor1, - "I AM AUDIT", fileID, null, pillarID, new BigInteger("1"), operationID1, fingerprint1); + AuditTrailEvent event1 = createSingleEvent(Instant.EPOCH, + FileAction.INCONSISTENCY, + actor1, + "I AM AUDIT", + fileID, + null, + pillarID, + new BigInteger("1"), + operationID1, + fingerprint1); events.getAuditTrailEvent().add(event1); - AuditTrailEvent event2 = createSingleEvent(Instant.now(), FileAction.FAILURE, actor2, null, fileID2, - "WHAT AM I DOING?", pillarID, new BigInteger("10"), operationID2, fingerprint2); + AuditTrailEvent event2 = createSingleEvent(Instant.now(), + FileAction.FAILURE, + actor2, + null, + fileID2, + "WHAT AM I DOING?", + pillarID, + new BigInteger("10"), + operationID2, + fingerprint2); events.getAuditTrailEvent().add(event2); return events; diff --git a/bitrepository-client/pom.xml b/bitrepository-client/pom.xml index 7bd08a9d1..48e94a17b 100644 --- a/bitrepository-client/pom.xml +++ b/bitrepository-client/pom.xml @@ -35,6 +35,16 @@ ${artemis.version} test + + org.testcontainers + testcontainers-junit-jupiter + test + + + org.testcontainers + testcontainers-activemq + test + diff --git a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientTest.java b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientTest.java index 2ab476a9d..0bf9eb302 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientTest.java @@ -154,9 +154,9 @@ public void identificationFailureTest() throws Exception { public void oneContributorNotRespondingTest() throws Exception { addDescription("Verify that the client works correct without receiving identification responses from all " + "contributors."); - addFixture("Set the a identification timeout to 100 ms."); + addFixture("Set the a identification timeout to 1000 ms."); settingsForCUT.getRepositorySettings().getClientSettings() - .setIdentificationTimeoutDuration(datatypeFactory.newDuration(100)); + .setIdentificationTimeoutDuration(datatypeFactory.newDuration(1000)); addStep("Start the operation.", "A IDENTIFY_REQUEST_SENT should be generate and a identification request should be sent."); diff --git a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientTest.java b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientTest.java index 3a4bfb709..0504b8515 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientTest.java @@ -1,23 +1,23 @@ /* * #%L * Bitrepository Protocol - * + * * $Id$ * $HeadURL$ * %% * Copyright (C) 2010 - 2011 The State and University Library, The Royal Library and The State Archives, Denmark * %% * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 2.1 of the + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 2.1 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public + * + * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * . * #L% @@ -26,17 +26,28 @@ import org.bitrepository.client.conversation.mediator.CollectionBasedConversationMediator; import org.bitrepository.client.conversation.mediator.ConversationMediator; +import org.bitrepository.pillar.integration.ActiveMQFixedPortContainer; import org.bitrepository.protocol.IntegrationTest; +import org.bitrepository.protocol.activemq.ActiveMQMessageBus; import org.bitrepository.protocol.bus.MessageReceiver; import org.bitrepository.protocol.message.ClientTestMessageFactory; import org.bitrepository.protocol.messagebus.MessageBusManager; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import javax.jms.JMSException; /** - * Contains the generic parts for tests integrating to the message bus. + * Contains the generic parts for tests integrating to the message bus. */ +@Testcontainers +@TestInstance(TestInstance.Lifecycle.PER_CLASS) public abstract class DefaultFixtureClientTest extends IntegrationTest { protected static final String DEFAULT_FILE_ID = ClientTestMessageFactory.FILE_ID_DEFAULT; - protected static MessageReceiver collectionReceiver; protected static String pillar1DestinationId; @@ -49,30 +60,39 @@ public abstract class DefaultFixtureClientTest extends IntegrationTest { protected ConversationMediator conversationMediator; + @Container + static ActiveMQContainer activemqContainer = new ActiveMQFixedPortContainer("apache/activemq:5.17.7") + .withFixedExposedPort(9999, 61616, InternetProtocol.TCP); + @Override protected void initializeCUT() { - MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); renewConversationMediator(); } - @Override - protected void shutdownCUT() { - shutdownConversationMediator(); - } - @Override protected void registerMessageReceivers() { super.registerMessageReceivers(); - - collectionReceiver = new MessageReceiver(settingsForCUT.getCollectionDestination()); - addReceiver(collectionReceiver); + collectionReceiver = addReceiver(new MessageReceiver(settingsForCUT.getCollectionDestination())); pillar1DestinationId = "Pillar1_topic" + getTopicPostfix(); - pillar1Receiver = new MessageReceiver(pillar1DestinationId); - addReceiver(pillar1Receiver); + pillar1Receiver = addReceiver(new MessageReceiver(pillar1DestinationId)); pillar2DestinationId = "Pillar2_topic" + getTopicPostfix(); - pillar2Receiver = new MessageReceiver(pillar2DestinationId); - addReceiver(pillar2Receiver); + pillar2Receiver = addReceiver(new MessageReceiver(pillar2DestinationId)); + } + + @AfterEach + public void shutdownConversationMediator() { + if (receiverManager != null) { + receiverManager.stopListeners(); + } + if (testWatcher.isTestSuccessful()) { + afterMethodVerification(); + } + + if (conversationMediator != null) { + conversationMediator.shutdown(); + } + conversationMediator = null; } /** @@ -86,10 +106,46 @@ protected void renewConversationMediator() { conversationMediator = new CollectionBasedConversationMediator(settingsForCUT, securityManager); } - private void shutdownConversationMediator() { - if (conversationMediator != null) { - conversationMediator.shutdown(); + /** + * Hooks up the message bus. + */ + protected void setupMessageBus() { + activemqContainer.start(); + while (!activemqContainer.isRunning()) { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + messageBus = new ActiveMQMessageBus(settingsForTestClient, securityManager); + MessageBusManager.clear(); + MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); + } + + /** + * Shutdown the message bus. + */ + @Override + protected void teardownMessageBus() { + MessageBusManager.clear(); + if (messageBus != null) { + try { + messageBus.close(); + messageBus = null; + } catch (JMSException e) { + + } + activemqContainer.stop(); + } + + if (broker != null) { + try { + broker.stop(); + broker = null; + } catch (Exception e) { + // No reason to pollute the test output with this + } } - conversationMediator = null; } } diff --git a/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentTest.java b/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentTest.java index a11c3d569..23cab5c1c 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentTest.java @@ -160,10 +160,10 @@ public void normalPutFile() throws Exception { @Tag("regressiontest") public void noPillarsResponding() throws Exception { addDescription("Tests the handling of missing identification responses from all pillar"); - addFixture("Sets the identification timeout to 100 ms."); + addFixture("Sets the identification timeout to 1000 ms."); settingsForCUT.getRepositorySettings().getClientSettings() - .setIdentificationTimeoutDuration(datatypeFactory.newDuration(100)); + .setIdentificationTimeoutDuration(datatypeFactory.newDuration(1000)); TestEventHandler testEventHandler = new TestEventHandler(); PutFileClient putClient = createPutFileClient(); diff --git a/bitrepository-core/pom.xml b/bitrepository-core/pom.xml index 0d5f3bcb1..15a3a2ff0 100644 --- a/bitrepository-core/pom.xml +++ b/bitrepository-core/pom.xml @@ -1,93 +1,122 @@ - - 4.0.0 - - org.bitrepository.reference - bitrepository-parent - 1.12-SNAPSHOT - - bitrepository-core - Bitrepository Core - General functionality for working with the Bitrepository code. - - - org.bitrepository.reference - bitrepository-reference-settings - ${project.version} - - - org.bitrepository.repository-settings - repository-settings-xsd - ${repository.settings.version} - - - org.bitrepository.repository-settings - repository-settings-java - ${repository.settings.version} - - - org.bitrepository - bitrepository-message-xml-xsd - ${message.xml.version} - - - org.bitrepository - bitrepository-message-xml-java - ${message.xml.version} - - - commons-io - commons-io - 2.21.0 - - - org.apache.httpcomponents - httpclient - 4.5.13 - - - org.bouncycastle - bcprov-jdk18on - 1.84 - - - org.bouncycastle - bcmail-jdk18on - 1.84 - - - org.apache.activemq - artemis-jakarta-client - ${artemis.version} - - - commons-codec - commons-codec - 1.14 - - - org.apache.activemq - artemis-server - ${artemis.version} - test - - - org.eclipse.jetty - jetty-server - 12.1.8 - test - - - org.hamcrest - hamcrest-all - 1.3 - test - - - org.jetbrains - annotations - 23.0.0 - compile - - + + 4.0.0 + + org.bitrepository.reference + bitrepository-parent + 1.12-SNAPSHOT + + bitrepository-core + Bitrepository Core + General functionality for working with the Bitrepository code. + + + org.bitrepository.reference + bitrepository-reference-settings + ${project.version} + + + org.bitrepository.repository-settings + repository-settings-xsd + ${repository.settings.version} + + + org.bitrepository.repository-settings + repository-settings-java + ${repository.settings.version} + + + org.bitrepository + bitrepository-message-xml-xsd + ${message.xml.version} + + + org.bitrepository + bitrepository-message-xml-java + ${message.xml.version} + + + commons-io + commons-io + 2.21.0 + + + org.apache.httpcomponents + httpclient + 4.5.14 + + + + org.bouncycastle + bcprov-jdk18on + 1.84 + + + org.bouncycastle + bcmail-jdk18on + 1.84 + + + org.apache.activemq + activemq-client + ${activemq.version} + + + commons-codec + commons-codec + 1.21.0 + + + org.apache.activemq + activemq-broker + ${activemq.version} + test + + + org.eclipse.jetty + jetty-server + 12.1.8 + test + + + org.junit.jupiter + junit-jupiter + 5.14.0 + test + + + org.hamcrest + hamcrest-core + 3.0 + test + + + org.testcontainers + testcontainers-activemq + test + + + org.testcontainers + testcontainers-postgresql + test + + + org.testcontainers + testcontainers-junit-jupiter + test + + + + com.fasterxml.jackson.core + jackson-databind + 2.21.1 + + + org.jetbrains + annotations + 23.0.0 + compile + + diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java index cc9246264..3e98c36ca 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java @@ -73,6 +73,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.ThreadFactory; @@ -110,7 +111,7 @@ public class ActiveMQMessageBus implements MessageBus { * The session for sending messages. Should not be the same as the consumer session, * as sessions are not thread safe. This also means the session should be used in a synchronized manor. * TODO Switch to use a session pool/producer poll to allow multithreaded message sending, see - * https://sbforge.org/jira/browse/BITMAG-357. + * https://sbforge.org/jira/browse/BITMAG-357. */ private final Session producerSession; @@ -125,7 +126,7 @@ public class ActiveMQMessageBus implements MessageBus { * Used to identify if a listener is already registered. */ private final Map consumers = Collections - .synchronizedMap(new HashMap<>()); + .synchronizedMap(new HashMap<>()); /** * Map of destinations, mapping from ID to destination. */ @@ -153,8 +154,9 @@ public class ActiveMQMessageBus implements MessageBus { /** * ThreadFactory for any threads the activeMQ messageBus needs to create */ - private static final ThreadFactory threadFactory = new DefaultThreadFactory(ActiveMQMessageListener.class.getSimpleName() + "-", - Thread.NORM_PRIORITY, false); + private static final ThreadFactory threadFactory = new DefaultThreadFactory(ActiveMQMessageListener.class.getSimpleName() + + "-", + Thread.NORM_PRIORITY, false); /** @@ -220,49 +222,93 @@ public synchronized void addListener(String destinationID, final MessageListener @Override public synchronized void addListener(String destinationID, final MessageListener listener, boolean durable) { log.debug("Adding {} listener '{}' to destination: '{}' on message-bus '{}'.", (durable ? "durable " : ""), - listener, destinationID, configuration.getName()); + listener, destinationID, configuration.getName()); MessageConsumer consumer = getMessageConsumer(destinationID, listener, durable); try { consumer.setMessageListener(new ActiveMQMessageListener(listener)); } catch (JMSException e) { throw new CoordinationLayerException( - "Unable to add durable listener '" + listener + "' to destinationID '" + destinationID + "'", e); + "Unable to add durable listener '" + listener + "' to destinationID '" + destinationID + "'", e); } } @Override public synchronized void removeListener(String destinationID, MessageListener listener) { log.debug("Removing listener '{}' from destination: '{}' on message-bus '{}'", - listener, destinationID, configuration); - MessageConsumer consumer = getMessageConsumer(destinationID, listener, false); + listener, destinationID, configuration); try { - // We need to set the listener to null to have the removeListener take effect at once. - // If this isn't done the listener will continue to receive messages. Do we have a memory leak here? - consumer.setMessageListener(null); - consumer.close(); - } catch (JMSException e) { - throw new CoordinationLayerException( + MessageConsumer consumer; + try { + consumer = getMessageConsumer(destinationID, listener, false); + } catch (CoordinationLayerException e) { + var cause = e.getCause(); + if (cause instanceof IllegalStateException + && Objects.equals(cause.getMessage(), "The Session is closed")) { + return; + } + throw e; + } + try { + + // We need to set the listener to null to have the removeListener take effect at once. + // If this isn't done the listener will continue to receive messages. Do we have a memory leak here? + consumer.setMessageListener(null); + + consumer.close(); + } catch (IllegalStateException e) { + if (Objects.equals(e.getMessage(), "The Consumer is closed")) { + return; + } + throw new CoordinationLayerException( "Unable to remove listener '" + listener + "' from destinationID '" + destinationID + "'", e); + } catch (JMSException e) { + throw new CoordinationLayerException( + "Unable to remove listener '" + listener + "' from destinationID '" + destinationID + "'", e); + } + } finally { + String consumerHash = getConsumerHash(destinationID, listener); + consumers.remove(consumerHash); + } - consumers.remove(getConsumerHash(destinationID, listener)); } @Override public void close() throws JMSException { - receivedMessageHandler.close(); log.info("Closing message bus: {}", configuration); - producerSession.close(); - log.debug("Producer session closed."); - consumerSession.close(); - log.debug("Consumer session closed."); - connection.close(); - log.debug("Connection closed."); + try { + receivedMessageHandler.close(); + } catch (Exception e) { + log.warn("Exception while closing ActiveMQMessageBus receivedMessageHandler", e); + } + try { + producerSession.close(); + log.debug("Producer session closed."); + } catch (JMSException e) { + log.warn("Exception while closing ActiveMQMessageBus ProducerSession", e); + } + try { + consumerSession.close(); + log.debug("Consumer session closed."); + } catch (JMSException e) { + log.warn("Exception while closing ActiveMQMessageBus ConsumerSession", e); + } + try { + connection.close(); + log.debug("Connection closed."); + } catch (JMSException e) { + log.warn("Exception while closing ActiveMQMessageBus Connection", e); + } + } @Override public void sendMessage(Message content) { - sendMessage(content.getDestination(), content.getReplyTo(), content.getTo(), content.getCollectionID(), - content.getCorrelationID(), content); + sendMessage(content.getDestination(), + content.getReplyTo(), + content.getTo(), + content.getCollectionID(), + content.getCorrelationID(), + content); MessageLoggerProvider.getInstance().logMessageSent(content); } @@ -289,7 +335,7 @@ private synchronized void sendMessage(String destinationID, xmlContent = jaxbHelper.serializeToXml(content); jaxbHelper.validate(new ByteArrayInputStream(xmlContent.getBytes(StandardCharsets.UTF_8))); log.trace("The following message is sent to the destination '{}' on message-bus '{}': \n{}", - destinationID, configuration.getName(), xmlContent); + destinationID, configuration.getName(), xmlContent); TextMessage msg = producerSession.createTextMessage(xmlContent); String stringData = msg.getText(); @@ -324,7 +370,7 @@ private synchronized void sendMessage(String destinationID, private MessageConsumer getMessageConsumer(String destinationID, MessageListener listener, boolean durable) { String key = getConsumerHash(destinationID, listener); log.debug("Retrieving message consumer on destination '{}' for listener '{}'. Key: '{}'", - destinationID, listener, key); + destinationID, listener, key); if (!consumers.containsKey(key)) { log.debug("No consumer known. Creating new for key '{}", key); Destination destination = getDestination(destinationID, consumerSession); @@ -336,13 +382,15 @@ private MessageConsumer getMessageConsumer(String destinationID, MessageListener consumer = consumerSession.createDurableSubscriber(topic, clientID); } else { throw new IllegalArgumentException("Can not create durable subscriber on " + destinationID + - " is is not a topic"); + " is is not a topic"); } } else { consumer = consumerSession.createConsumer(destination); } } catch (JMSException e) { - throw new CoordinationLayerException("Could not create message consumer for destination '" + destination + '"', e); + throw new CoordinationLayerException("Could not create message consumer for destination '" + + destination + + '"', e); } consumers.put(key, consumer); } @@ -391,7 +439,7 @@ private Destination getDestination(String destinationID, Session session) { break; default: throw new CoordinationLayerException("Unable to create destination '" + - destination + "'. Unknown type."); + destination + "'. Unknown type."); } } } catch (JMSException e) { @@ -472,14 +520,14 @@ public void onMessage(final jakarta.jms.Message jmsMessage) { log.trace("Received xml message: '{}'", text); jaxbHelper.validate(new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8))); Message content = (Message) jaxbHelper.loadXml( - Class.forName("org.bitrepository.bitrepositorymessages." + type), - new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8))); + Class.forName("org.bitrepository.bitrepositorymessages." + type), + new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8))); log.trace("Checking signature '{}'", signature); SignerId signer = securityManager.authenticateMessage(text, signature); securityManager.authorizeCertificateUse(content.getFrom(), text, signature); if (content instanceof MessageRequest) { securityManager.authorizeOperation(content.getClass().getSimpleName(), text, signature, - content.getCollectionID()); + content.getCollectionID()); } MessageVersionValidator.validateMessageVersion(content); MessageLoggerProvider.getInstance().logMessageReceived(content); diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/ReceivedMessageHandler.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/ReceivedMessageHandler.java index 014ec6f4e..a8e1d3401 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/ReceivedMessageHandler.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/messagebus/ReceivedMessageHandler.java @@ -31,6 +31,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.Closeable; import java.math.BigInteger; import java.util.HashMap; import java.util.List; @@ -42,7 +43,7 @@ /** * Takes care of handling the further processing by the listeners in separated thread. */ -public class ReceivedMessageHandler { +public class ReceivedMessageHandler implements Closeable { private final Logger log = LoggerFactory.getLogger(getClass()); private final ExecutorModel executorModel; private final ThreadFactory threadFactory = new DefaultThreadFactory("ReceivedMessageHandler-", Thread.NORM_PRIORITY, false); diff --git a/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ActiveMQFixedPortContainer.java b/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ActiveMQFixedPortContainer.java new file mode 100644 index 000000000..3803c1102 --- /dev/null +++ b/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ActiveMQFixedPortContainer.java @@ -0,0 +1,21 @@ +package org.bitrepository.pillar.integration; + +import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.utility.DockerImageName; + +public class ActiveMQFixedPortContainer extends ActiveMQContainer { + + public ActiveMQFixedPortContainer(final String image) { + super(image); + } + + public ActiveMQFixedPortContainer(final DockerImageName dockerImageName) { + super(dockerImageName); + } + + public ActiveMQFixedPortContainer withFixedExposedPort(int hostPort, int containerPort, InternetProtocol protocol) { + super.addFixedExposedPort(hostPort, containerPort, protocol); + return this; + } +} diff --git a/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/PostgresFixedPortContainer.java b/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/PostgresFixedPortContainer.java new file mode 100644 index 000000000..fe651f22a --- /dev/null +++ b/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/PostgresFixedPortContainer.java @@ -0,0 +1,22 @@ +package org.bitrepository.pillar.integration; + +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.postgresql.PostgreSQLContainer; +import org.testcontainers.utility.DockerImageName; + +public class PostgresFixedPortContainer extends PostgreSQLContainer { + + public PostgresFixedPortContainer(final String dockerImageName) { + this(DockerImageName.parse(dockerImageName)); + } + + public PostgresFixedPortContainer(final DockerImageName dockerImageName) { + super(dockerImageName); + } + + public PostgresFixedPortContainer withFixedExposedPort(int hostPort, int containerPort, InternetProtocol protocol) { + super.addFixedExposedPort(hostPort, containerPort, protocol); + return this; + } + +} diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java index a5b86a837..ed625deda 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java @@ -64,7 +64,7 @@ public abstract class IntegrationTest { public static EmbeddedHttpServer server; public static HttpServerConfiguration httpServerConfiguration; public static MessageBus messageBus; - private MessageReceiverManager receiverManager; + protected MessageReceiverManager receiverManager; protected static String alarmDestinationID; protected static MessageReceiver alarmReceiver; protected static SecurityManager securityManager; @@ -78,10 +78,18 @@ public abstract class IntegrationTest { protected static String defaultUploadFileAddress; protected String defaultAuditInformation; - @RegisterExtension - TestWatcherExtension testWatcher = new TestWatcherExtension(); + @RegisterExtension protected TestWatcherExtension testWatcher = new TestWatcherExtension(); protected String testMethodName; + @BeforeEach + public void print(TestInfo testInfo) throws Exception { + Class aClass = testInfo.getTestClass().get(); + var file = aClass.getProtectionDomain().getCodeSource().getLocation(); + String displayName = testInfo.getDisplayName(); + System.out.println("Running Integration Test " + aClass + "#" + displayName); + + } + @BeforeAll public void initializeSuite(SuiteInfo testInfo) { settingsForCUT = loadSettings(getComponentID()); @@ -89,7 +97,7 @@ public void initializeSuite(SuiteInfo testInfo) { makeUserSpecificSettings(settingsForCUT); makeUserSpecificSettings(settingsForTestClient); httpServerConfiguration = - new HttpServerConfiguration(settingsForTestClient.getReferenceSettings().getFileExchangeSettings()); + new HttpServerConfiguration(settingsForTestClient.getReferenceSettings().getFileExchangeSettings()); collectionID = settingsForTestClient.getCollections().get(0).getID(); securityManager = createSecurityManager(); @@ -101,7 +109,7 @@ public void initializeSuite(SuiteInfo testInfo) { } catch (MalformedURLException e) { throw new RuntimeException("Failed to construct default file URLs for test setup", e); } - initMessagebus(); + setupMessageBus(); } /** @@ -109,16 +117,12 @@ public void initializeSuite(SuiteInfo testInfo) { * super.registerReceivers() when overriding */ protected void registerMessageReceivers() { - alarmReceiver = new MessageReceiver(settingsForCUT.getAlarmDestination()); - addReceiver(alarmReceiver); + alarmReceiver = addReceiver(new MessageReceiver(settingsForCUT.getAlarmDestination())); } - protected void addReceiver(MessageReceiver receiver) { + protected MessageReceiver addReceiver(MessageReceiver receiver) { receiverManager.addReceiver(receiver); - } - - public void initMessagebus() { - setupMessageBus(); + return receiver; } @AfterAll @@ -131,7 +135,7 @@ public void shutdownSuite() { * Defines the standard BitRepositoryCollection configuration */ @BeforeEach - public final void beforeMethod(TestInfo testInfo) { + public void beforeMethod(TestInfo testInfo) { testMethodName = testInfo.getTestMethod().get().getName(); setupSettings(); nonDefaultFileId = TestFileHelper.createUniquePrefix(testMethodName); @@ -140,8 +144,8 @@ public final void beforeMethod(TestInfo testInfo) { registerMessageReceivers(); messageBus.setCollectionFilter(List.of()); messageBus.setComponentFilter(List.of()); - receiverManager.startListeners(); initializeCUT(); + receiverManager.startListeners(); } @@ -248,23 +252,25 @@ protected void setupMessageBus() { /** * Shutdown the message bus. */ - private void teardownMessageBus() { - MessageBusManager.clear(); - if (messageBus != null) { - try { - messageBus.close(); - messageBus = null; - } catch (JMSException e) { - throw new RuntimeException(e); + protected void teardownMessageBus() { + if (useEmbeddedMessageBus()) { + MessageBusManager.clear(); + if (messageBus != null) { + try { + messageBus.close(); + messageBus = null; + } catch (JMSException e) { + throw new RuntimeException(e); + } } - } - if (broker != null) { - try { - broker.stop(); - broker = null; - } catch (Exception e) { - // No reason to pollute the test output with this + if (broker != null) { + try { + broker.stop(); + broker = null; + } catch (Exception e) { + // No reason to pollute the test output with this + } } } } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java index 139c7dbf0..cc946dc83 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java @@ -26,14 +26,19 @@ import org.bitrepository.bitrepositorymessages.DeleteFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileResponse; -import org.bitrepository.protocol.ProtocolComponentFactory; import org.bitrepository.protocol.activemq.ActiveMQMessageBus; import org.bitrepository.protocol.message.ExampleMessageFactory; +import org.bitrepository.protocol.messagebus.MessageBusManager; +import org.bitrepository.settings.repositorysettings.MessageBusConfiguration; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; import java.util.Arrays; +import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; @@ -43,21 +48,44 @@ /** - * Runs the GeneralMessageBusTest using a LocalActiveMQBroker (if useEmbeddedMessageBus is true) and a suitable - * MessageBus based on settingsForTestClient. Regression tests utilized that uses Allure to generate reports. + * Runs the GeneralMessageBusTest using a LocalActiveMQBroker and a suitable + * MessageBus based on TestContainers. Regression tests utilized that uses Allure to generate reports. */ - +@Testcontainers class ActiveMQMessageBusTest extends GeneralMessageBusTest { + @Container + static ActiveMQContainer activemqContainer = new ActiveMQContainer("apache/activemq:5.17.7"); + + private MessageBusConfiguration messageBusConfig; + @Override protected void setupMessageBus() { - if (useEmbeddedMessageBus() && broker == null) { - broker = new LocalActiveMQBroker(settingsForTestClient.getMessageBusConfiguration()); - broker.start(); + activemqContainer.start(); + while (!activemqContainer.isRunning()) { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } } - messageBus = new MessageBusWrapper(ProtocolComponentFactory.getInstance().getMessageBus( - settingsForTestClient, securityManager)); + messageBusConfig = new MessageBusConfiguration(); + messageBusConfig.setURL(activemqContainer.getBrokerUrl()); + messageBusConfig.setName(activemqContainer.getContainerName()); + settingsForTestClient.getRepositorySettings() + .getProtocolSettings() + .setMessageBusConfiguration(messageBusConfig); + + + messageBus = new ActiveMQMessageBus(settingsForTestClient, securityManager); + MessageBusManager.clear(); + MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); + } + + @Override + public boolean useEmbeddedMessageBus() { + return false; } @Test @@ -65,61 +93,63 @@ protected void setupMessageBus() { final void collectionFilterTest() throws Exception { addDescription("Test that message bus filters identify requests to other collection, eg. ignores these."); addStep("Send an identify request with a undefined 'Collection' header property, " + - "eg. this identify requests should be handled by everybody.", + "eg. this identify requests should be handled by everybody.", "Verify that the message bus accepts this message."); String myCollectionID = "MyCollection"; - messageBus.setCollectionFilter(Arrays.asList(myCollectionID)); - RawMessagebus rawMessagebus = new RawMessagebus( - settingsForTestClient.getMessageBusConfiguration(), - securityManager); - IdentifyPillarsForDeleteFileRequest identifyRequest = - ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); - identifyRequest.setCollectionID(myCollectionID); - jakarta.jms.Message msg = rawMessagebus.createMessage(identifyRequest); - rawMessagebus.addHeader(msg, identifyRequest.getClass().getSimpleName(), identifyRequest.getReplyTo(), - null, - identifyRequest.getCorrelationID()); - rawMessagebus.sendMessage(settingsForTestClient.getCollectionDestination(), msg); - collectionReceiver.waitForMessage(IdentifyPillarsForDeleteFileRequest.class); - - addStep("Send an identify request with the 'Collection' header property set to my collection", - "Verify that the request bus accepts this message."); - msg.setStringProperty(ActiveMQMessageBus.COLLECTION_ID_KEY, myCollectionID); - rawMessagebus.sendMessage(settingsForTestClient.getCollectionDestination(), msg); - collectionReceiver.waitForMessage(IdentifyPillarsForDeleteFileRequest.class); - - addStep("Send an invalid message with the 'Receiver' header property set to another specific component", - "Verify that the message bus ignores this before parsing the message."); - msg.setStringProperty(ActiveMQMessageBus.COLLECTION_ID_KEY, "OtherCollection"); - rawMessagebus.sendMessage(settingsForTestClient.getCollectionDestination(), msg); - collectionReceiver.checkNoMessageIsReceived(IdentifyPillarsForDeleteFileRequest.class); + messageBus.setCollectionFilter(List.of(myCollectionID)); + String collectionDestination = settingsForTestClient.getCollectionDestination(); + + try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig, securityManager)) { + var identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); + identifyRequest.setCollectionID(myCollectionID); + jakarta.jms.Message msg = rawMessagebus.createMessage(identifyRequest); + rawMessagebus.addHeader(msg, + identifyRequest.getClass().getSimpleName(), + identifyRequest.getReplyTo(), + null, + identifyRequest.getCorrelationID()); + + rawMessagebus.sendMessage(collectionDestination, msg); + collectionReceiver.waitForMessage(identifyRequest.getClass()); + + addStep("Send an identify request with the 'Collection' header property set to my collection", + "Verify that the request bus accepts this message."); + msg.setStringProperty(ActiveMQMessageBus.COLLECTION_ID_KEY, myCollectionID); + rawMessagebus.sendMessage(collectionDestination, msg); + collectionReceiver.waitForMessage(identifyRequest.getClass()); + + addStep("Send an invalid message with the 'Receiver' header property set to another specific component", + "Verify that the message bus ignores this before parsing the message."); + msg.setStringProperty(ActiveMQMessageBus.COLLECTION_ID_KEY, "OtherCollection"); + rawMessagebus.sendMessage(collectionDestination, msg); + collectionReceiver.checkNoMessageIsReceived(identifyRequest.getClass()); + } } @Test @Tag("regressiontest") final void sendMessageToSpecificComponentTest() throws Exception { addDescription("Test that message bus correct uses the 'to' header property to indicated that the message " + - "is meant for a specific component"); + "is meant for a specific component"); addStep("Send a message with the 'Recipient' parameter set to at specific component", "The MESSAGE_TO_KEY "); String receiverID = "specificReceiver"; final BlockingQueue messageList = new LinkedBlockingDeque<>(); - RawMessagebus rawMessagebus = new RawMessagebus( - settingsForTestClient.getMessageBusConfiguration(), - securityManager); - rawMessagebus.addListener(settingsForTestClient.getCollectionDestination(), new MessageListener() { - @Override - public void onMessage(Message message) { - messageList.add(message); - } - }); - IdentifyPillarsForDeleteFileRequest messageToSend = + try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig, securityManager)) { + rawMessagebus.addListener(settingsForTestClient.getCollectionDestination(), new MessageListener() { + @Override + public void onMessage(Message message) { + messageList.add(message); + } + }); + IdentifyPillarsForDeleteFileRequest messageToSend = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); - messageToSend.setDestination(settingsForTestClient.getCollectionDestination()); - messageToSend.setTo(receiverID); - messageBus.sendMessage(messageToSend); - Message receivedMessage = messageList.poll(3, TimeUnit.SECONDS); - Assertions.assertEquals(receiverID, receivedMessage.getStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY)); + messageToSend.setDestination(settingsForTestClient.getCollectionDestination()); + messageToSend.setTo(receiverID); + messageBus.sendMessage(messageToSend); + Message receivedMessage = messageList.poll(3, TimeUnit.SECONDS); + Assertions.assertEquals(receiverID, receivedMessage.getStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY)); + } } @Test @@ -127,58 +157,63 @@ public void onMessage(Message message) { final void toFilterTest() throws Exception { addDescription("Test that message bus filters identify requests to other components, eg. ignores these."); addStep("Send an identify request with a undefined 'To' header property, " + - "eg. this identify requests should be handled by all components.", + "eg. this identify requests should be handled by all components.", "Verify that the identify request bus accepts this identify request."); messageBus.setComponentFilter(Arrays.asList(settingsForTestClient.getComponentID())); - RawMessagebus rawMessagebus = new RawMessagebus( - settingsForTestClient.getMessageBusConfiguration(), - securityManager); - IdentifyPillarsForDeleteFileRequest identifyRequest = - ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); - identifyRequest.setDestination(settingsForTestClient.getCollectionDestination()); - jakarta.jms.Message msg = rawMessagebus.createMessage(identifyRequest); - rawMessagebus.addHeader(msg, identifyRequest.getClass().getSimpleName(), identifyRequest.getReplyTo(), - null, - identifyRequest.getCorrelationID()); - rawMessagebus.sendMessage(settingsForTestClient.getCollectionDestination(), msg); - collectionReceiver.waitForMessage(IdentifyPillarsForDeleteFileRequest.class); - - addStep("Send an identify request with the 'To' header property set to this component", - "Verify that the identify request bus accepts this identify request."); - msg.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, settingsForTestClient.getComponentID()); - rawMessagebus.sendMessage(settingsForTestClient.getCollectionDestination(), msg); - collectionReceiver.waitForMessage(IdentifyPillarsForDeleteFileRequest.class); - - addStep("Send an invalid identify request with the 'To' header property set to another specific component", - "Verify that the identify request bus ignores this before parsing the identify request."); - msg.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); - rawMessagebus.sendMessage(settingsForTestClient.getCollectionDestination(), msg); - collectionReceiver.checkNoMessageIsReceived(IdentifyPillarsForDeleteFileRequest.class); - - addStep("Send an identify response with the 'To' header property set to another component", - "Verify that the message bus accepts this message."); - IdentifyPillarsForDeleteFileResponse identifyResponse = - ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileResponse.class); - identifyRequest.setDestination(settingsForTestClient.getCollectionDestination()); - jakarta.jms.Message response = rawMessagebus.createMessage(identifyResponse); - rawMessagebus.addHeader(response, identifyResponse.getClass().getSimpleName(), identifyResponse.getReplyTo(), - null, - identifyRequest.getCorrelationID()); - response.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); - rawMessagebus.sendMessage(settingsForTestClient.getCollectionDestination(), response); - collectionReceiver.waitForMessage(IdentifyPillarsForDeleteFileResponse.class); - - addStep("Send an non-identify request with the 'To' header property set to another component", - "Verify that the message bus accepts this message."); - DeleteFileRequest request = - ExampleMessageFactory.createMessage(DeleteFileRequest.class); - request.setDestination(settingsForTestClient.getCollectionDestination()); - jakarta.jms.Message rq = rawMessagebus.createMessage(request); - rawMessagebus.addHeader(rq, request.getClass().getSimpleName(), request.getReplyTo(), - null, - identifyRequest.getCorrelationID()); - response.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); - rawMessagebus.sendMessage(settingsForTestClient.getCollectionDestination(), rq); - collectionReceiver.waitForMessage(DeleteFileRequest.class); + String collectionDestination = settingsForTestClient.getCollectionDestination(); + + try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig, securityManager)) { + var identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); + + identifyRequest.setDestination(collectionDestination); + jakarta.jms.Message msg = rawMessagebus.createMessage(identifyRequest); + rawMessagebus.addHeader(msg, + identifyRequest.getClass().getSimpleName(), + identifyRequest.getReplyTo(), + null, + identifyRequest.getCorrelationID()); + rawMessagebus.sendMessage(collectionDestination, msg); + var msg1 = collectionReceiver.waitForMessage(identifyRequest.getClass()); + + addStep("Send an identify request with the 'To' header property set to this component", + "Verify that the identify request bus accepts this identify request."); + msg.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, settingsForTestClient.getComponentID()); + rawMessagebus.sendMessage(collectionDestination, msg); + var msg2 = collectionReceiver.waitForMessage(identifyRequest.getClass()); + + addStep("Send an invalid identify request with the 'To' header property set to another specific component", + "Verify that the identify request bus ignores this before parsing the identify request."); + msg.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); + rawMessagebus.sendMessage(collectionDestination, msg); + collectionReceiver.checkNoMessageIsReceived(identifyRequest.getClass()); + + addStep("Send an identify response with the 'To' header property set to another component", + "Verify that the message bus accepts this message."); + var identifyResponse = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileResponse.class); + identifyRequest.setDestination(collectionDestination); + jakarta.jms.Message response = rawMessagebus.createMessage(identifyResponse); + rawMessagebus.addHeader(response, + identifyResponse.getClass().getSimpleName(), + identifyResponse.getReplyTo(), + null, + identifyRequest.getCorrelationID()); + response.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); + rawMessagebus.sendMessage(collectionDestination, response); + var msg3 = collectionReceiver.waitForMessage(identifyResponse.getClass()); + + addStep("Send an non-identify request with the 'To' header property set to another component", + "Verify that the message bus accepts this message."); + var deleteFileRequest = ExampleMessageFactory.createMessage(DeleteFileRequest.class); + deleteFileRequest.setDestination(collectionDestination); + var deleteFileRequestMessage = rawMessagebus.createMessage(deleteFileRequest); + rawMessagebus.addHeader(deleteFileRequestMessage, + deleteFileRequest.getClass().getSimpleName(), + deleteFileRequest.getReplyTo(), + null, + identifyRequest.getCorrelationID()); + response.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); + rawMessagebus.sendMessage(collectionDestination, deleteFileRequestMessage); + var msg4 = collectionReceiver.waitForMessage(deleteFileRequest.getClass()); + } } } \ No newline at end of file diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusTest.java index 20c13da7e..a16827f1e 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusTest.java @@ -24,16 +24,26 @@ */ package org.bitrepository.protocol.bus; +import io.qameta.allure.Description; import org.bitrepository.SuiteInfoParameterResolver; import org.bitrepository.bitrepositorymessages.AlarmMessage; +import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileRequest; +import org.bitrepository.bitrepositorymessages.Message; import org.bitrepository.protocol.IntegrationTest; +import org.bitrepository.protocol.MessageContext; import org.bitrepository.protocol.message.ExampleMessageFactory; -import org.junit.jupiter.api.AfterEach; +import org.bitrepository.protocol.messagebus.MessageBusManager; +import org.bitrepository.protocol.messagebus.MessageListener; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; -import java.util.List; +import javax.jms.JMSException; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; @@ -42,29 +52,36 @@ * Class for testing the interface with the message bus. */ @ExtendWith(SuiteInfoParameterResolver.class) -class GeneralMessageBusTest extends IntegrationTest { - protected static MessageReceiver collectionReceiver; +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +abstract class GeneralMessageBusTest extends IntegrationTest { + /** + * The time to wait when sending a message before it definitely should + * have been consumed by a listener. + */ + static final int TIME_FOR_WAIT = 2500; + private final static int threadCount = 3; + + protected MessageReceiver collectionReceiver; + + private int count = 0; + private final static String FINISH = "FINISH"; + private final BlockingQueue finishQueue = new LinkedBlockingQueue<>(1); + MultiMessageListener listener; + @Override protected void registerMessageReceivers() { super.registerMessageReceivers(); - collectionReceiver = new MessageReceiver(settingsForCUT.getCollectionDestination()); - addReceiver(collectionReceiver); - } - - @AfterEach - void tearDown() { - messageBus.setComponentFilter(List.of()); - messageBus.setCollectionFilter(List.of()); + collectionReceiver = addReceiver(new MessageReceiver(settingsForCUT.getCollectionDestination())); } @Test @Tag("regressiontest") + @Description("Tests whether it is possible to create a message listener, " + + "and then set it to listen to the topic. Then puts a message" + + "on the topic for the message listener to find, and" + + "tests whether it finds the correct message.") final void busActivityTest() throws Exception { - addDescription("Tests whether it is possible to create a message listener, " + - "and then set it to listen to the topic. Then puts a message" + - "on the topic for the message listener to find, and" + - "tests whether it finds the correct message."); addStep("Send a message to the topic", "No exceptions should be thrown"); AlarmMessage message = ExampleMessageFactory.createMessage(AlarmMessage.class); @@ -105,15 +122,84 @@ final void twoListenersForTopicTest() throws Exception { @Tag("specificationonly") final void messageBusFailoverTest() { addDescription("Verifies that we can switch to at second message bus " + - "in the middle of a conversation, if the connection is lost. " + - "We should also be able to resume the conversation on the new " + - "message bus"); + "in the middle of a conversation, if the connection is lost. " + + "We should also be able to resume the conversation on the new " + + "message bus"); } @Test @Tag("specificationonly") final void messageBusReconnectTest() { addDescription("Test whether we are able to reconnect to the message " + - "bus if the connection is lost"); + "bus if the connection is lost"); + } + + @Test + @Tag("regressiontest") + final void manyThreadsBeforeFinish() throws Exception { + addDescription("Tests whether it is possible to start the handling of many threads simultaneously."); + var idenfityRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForGetFileRequest.class); + listener = new MultiMessageListener(); + messageBus.addListener("BusActivityTest", listener); + idenfityRequest.setDestination("BusActivityTest"); + + addStep("Send one message for each listener", + "When all have receiver, then they give respond on 'finishQueue'"); + for (int i = 0; i < threadCount; i++) { + messageBus.sendMessage(idenfityRequest); + } + Assertions.assertEquals(FINISH, finishQueue.poll(TIME_FOR_WAIT, TimeUnit.MILLISECONDS)); + Assertions.assertEquals(threadCount, count); + } + + + /** + * Shutdown the message bus. + */ + @Override + protected void teardownMessageBus() { + MessageBusManager.clear(); + if (messageBus != null) { + try { + messageBus.close(); + messageBus = null; + } catch (JMSException e) { + + } + } + + if (broker != null) { + try { + broker.stop(); + broker = null; + } catch (Exception e) { + // No reason to pollute the test output with this + } + } + } + + + protected class MultiMessageListener implements MessageListener { + private final BlockingQueue queue = new LinkedBlockingQueue<>(threadCount); + + @Override + public final void onMessage(Message message, MessageContext messageContext) { + try { + testIfFinished(); + Assertions.assertNotNull(queue.poll(TIME_FOR_WAIT, TimeUnit.MILLISECONDS)); + } catch (InterruptedException e) { + Assertions.fail("Should not throw an exception: ", e); + } + } + + private void testIfFinished() throws InterruptedException { + count++; + if (count >= threadCount) { + for (int i = 0; i < threadCount; i++) { + queue.put("Count '" + i + "'"); + } + finishQueue.put(FINISH); + } + } } } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MultiThreadedMessageBusTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MultiThreadedMessageBusTest.java deleted file mode 100644 index 1387d41ca..000000000 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MultiThreadedMessageBusTest.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * #%L - * Bitmagasin integrationstest - * - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2010 The State and University Library, The Royal Library and The State Archives, Denmark - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 2.1 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * . - * #L% - */ -package org.bitrepository.protocol.bus; - -import org.bitrepository.SuiteInfoParameterResolver; -import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileRequest; -import org.bitrepository.bitrepositorymessages.Message; -import org.bitrepository.protocol.IntegrationTest; -import org.bitrepository.protocol.MessageContext; -import org.bitrepository.protocol.ProtocolComponentFactory; -import org.bitrepository.protocol.message.ExampleMessageFactory; -import org.bitrepository.protocol.messagebus.MessageListener; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; - -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.TimeUnit; - -import static org.bitrepository.common.utils.AllureTestUtils.addDescription; -import static org.bitrepository.common.utils.AllureTestUtils.addStep; - -/** - * Class for testing the interface with the message bus. - */ -@ExtendWith(SuiteInfoParameterResolver.class) -class MultiThreadedMessageBusTest extends IntegrationTest { - /** - * The time to wait when sending a message before it definitely should - * have been consumed by a listener. - */ - static final int TIME_FOR_WAIT = 2500; - private final static int threadCount = 3; - private int count = 0; - private final static String FINISH = "FINISH"; - private final BlockingQueue finishQueue = new LinkedBlockingQueue<>(1); - MultiMessageListener listener; - - protected void setupMessageBus() { - if (useEmbeddedMessageBus() && broker == null) { - broker = new LocalActiveMQBroker(settingsForTestClient.getMessageBusConfiguration()); - broker.start(); - } - messageBus = new MessageBusWrapper(ProtocolComponentFactory.getInstance().getMessageBus( - settingsForTestClient, securityManager)); - - } - - @Test - @Tag("regressiontest") - final void manyTheadsBeforeFinish() throws Exception { - addDescription("Tests whether it is possible to start the handling of many threads simultaneously."); - IdentifyPillarsForGetFileRequest content = - ExampleMessageFactory.createMessage(IdentifyPillarsForGetFileRequest.class); - listener = new MultiMessageListener(); - messageBus.addListener("BusActivityTest", listener); - content.setDestination("BusActivityTest"); - - addStep("Send one message for each listener", - "When all have receiver, then they give respond on 'finishQueue'"); - for (int i = 0; i < threadCount; i++) { - messageBus.sendMessage(content); - } - Assertions.assertEquals(FINISH, finishQueue.poll(TIME_FOR_WAIT, TimeUnit.MILLISECONDS)); - Assertions.assertEquals(threadCount, count); - } - - @AfterEach - void removeListener() { - messageBus.removeListener("BusActivityTest", listener); - } - - protected class MultiMessageListener implements MessageListener { - private final BlockingQueue queue = new LinkedBlockingQueue<>(threadCount); - - @Override - public final void onMessage(Message message, MessageContext messageContext) { - try { - testIfFinished(); - Assertions.assertNotNull(queue.poll(TIME_FOR_WAIT, TimeUnit.MILLISECONDS)); - } catch (InterruptedException e) { - Assertions.fail("Should not throw an exception: ", e); - } - } - - private void testIfFinished() throws InterruptedException { - count++; - if (count >= threadCount) { - for (int i = 0; i < threadCount; i++) { - queue.put("Count '" + i + "'"); - } - finishQueue.put(FINISH); - } - } - } -} diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java index 9c9cfe45d..ab038d40f 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java @@ -34,6 +34,7 @@ import org.bitrepository.common.JaxbHelper; import org.bitrepository.protocol.CoordinationLayerException; import org.bitrepository.protocol.activemq.ActiveMQMessageBus; +import org.bitrepository.protocol.messagebus.MessageBus; import org.bitrepository.protocol.security.SecurityManager; import org.bitrepository.settings.repositorysettings.MessageBusConfiguration; import org.slf4j.Logger; @@ -43,7 +44,7 @@ import java.util.HashMap; import java.util.Map; -public class RawMessagebus { +public class RawMessagebus implements AutoCloseable { private final Logger log = LoggerFactory.getLogger(getClass()); private final Map destinations = new HashMap<>(); private final Map consumers = new HashMap<>(); @@ -69,6 +70,11 @@ public RawMessagebus(MessageBusConfiguration messageBusConfiguration, SecurityMa throw new CoordinationLayerException("Unable to initialise connection to message bus", e); } } + @Override + public void close() throws Exception { + connection.setExceptionListener(null); + connection.close(); + } public void addHeader(Message msg, String messageClass, @@ -81,7 +87,7 @@ public void addHeader(Message msg, msg.setJMSCorrelationID(correlationID); msg.setJMSReplyTo(getDestination(replyTo, producerSession)); } - + public Message createMessage(org.bitrepository.bitrepositorymessages.Message message) throws JMSException { JaxbHelper jaxbHelper = new JaxbHelper("xsd/", "BitRepositoryMessages.xsd"); String xmlContent; @@ -157,7 +163,9 @@ private MessageConsumer getMessageConsumer(String destinationID, jakarta.jms.Mes } return consumers.get(key); } + + private class MessageBusExceptionListener implements ExceptionListener { @Override public void onException(JMSException arg0) { diff --git a/bitrepository-core/src/test/resources/logback-test.xml b/bitrepository-core/src/test/resources/logback-test.xml index 1e02ad24d..28d3a1329 100644 --- a/bitrepository-core/src/test/resources/logback-test.xml +++ b/bitrepository-core/src/test/resources/logback-test.xml @@ -33,4 +33,6 @@ + + \ No newline at end of file diff --git a/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/ReferenceSettings.xml b/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/ReferenceSettings.xml index 753f9b7d3..c7074e50f 100644 --- a/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/ReferenceSettings.xml +++ b/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/ReferenceSettings.xml @@ -88,8 +88,10 @@ - org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:target/test/integrityservice/integritydb + org.postgresql.Driver + jdbc:postgresql://localhost:9876/integrityDB + testcontainerUser + testcontainerPassword PT1M diff --git a/bitrepository-core/src/test/resources/testcontainers.properties b/bitrepository-core/src/test/resources/testcontainers.properties new file mode 100644 index 000000000..ed4c13f08 --- /dev/null +++ b/bitrepository-core/src/test/resources/testcontainers.properties @@ -0,0 +1 @@ +checks.disable = true diff --git a/bitrepository-integrity-service/pom.xml b/bitrepository-integrity-service/pom.xml index 99c7f1b28..c368ed75c 100644 --- a/bitrepository-integrity-service/pom.xml +++ b/bitrepository-integrity-service/pom.xml @@ -29,22 +29,18 @@ org.apache.cxf cxf-rt-transports-http - ${cxf.version} org.apache.cxf cxf-rt-rs-client - ${cxf.version} com.fasterxml.jackson.core jackson-databind - ${jackson.version} com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider - ${jackson.version} jakarta.ws.rs @@ -90,6 +86,21 @@ ${artemis.version} test + + org.junit.jupiter + junit-jupiter + test + + + org.testcontainers + testcontainers-junit-jupiter + test + + + org.testcontainers + testcontainers-postgresql + test + @@ -161,7 +172,7 @@ - + diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAO.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAO.java index 5997112ce..653180d1b 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAO.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAO.java @@ -59,7 +59,7 @@ * Common parts of the implementation of the access to the integrity db. * Database specific backends are abstracted out in concrete classes. */ -public abstract class IntegrityDAO { +public abstract class IntegrityDAO implements AutoCloseable { private final Logger log = LoggerFactory.getLogger(getClass()); /** @@ -76,10 +76,15 @@ public IntegrityDAO(DBConnector dbConnector) { /** * Destroys the DB connector. */ + @Override public void close() { dbConnector.destroy(); } + public DBConnector getDbConnector() { + return dbConnector; + } + /** * Method to ensure that pillars found in RepositorySettings are present in the database */ diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAOUtils.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAOUtils.java index 5a056fce6..28761b585 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAOUtils.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAOUtils.java @@ -27,7 +27,7 @@ import java.util.List; -public class IntegrityDAOUtils { +public class IntegrityDAOUtils implements AutoCloseable { protected final DBConnector dbConnector; @@ -44,4 +44,7 @@ public List retrieveCollectionsInDatabase() { return DatabaseUtils.selectStringList(dbConnector, selectSql); } + @Override public void close() { + dbConnector.destroy(); + } } diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDatabaseCreator.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDatabaseCreator.java index 4b0a65402..d254e90ae 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDatabaseCreator.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDatabaseCreator.java @@ -48,14 +48,17 @@ public static void main(String[] args) { dbCreator.createIntegrityDatabase(settings, args[1]); } - public void createIntegrityDatabase(Settings settings, String pathToSqlCreationScript) { + public void createIntegrityDatabase(Settings settings, String... pathToSqlCreationScript) { DatabaseSpecifics databaseSpecifics = settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase(); - if (pathToSqlCreationScript == null) { - pathToSqlCreationScript = DEFAULT_INTEGRITY_DB_SCRIPT; + if (pathToSqlCreationScript.length == 0) { + pathToSqlCreationScript = new String[]{DEFAULT_INTEGRITY_DB_SCRIPT}; + } + + for (String script : pathToSqlCreationScript) { + createDatabase(databaseSpecifics, script); } - createDatabase(databaseSpecifics, pathToSqlCreationScript); } } diff --git a/bitrepository-integrity-service/src/main/resources/sql/postgres/integrityDB7to8migration.sql b/bitrepository-integrity-service/src/main/resources/sql/postgres/integrityDB7to8migration.sql index ad5140807..551637c58 100644 --- a/bitrepository-integrity-service/src/main/resources/sql/postgres/integrityDB7to8migration.sql +++ b/bitrepository-integrity-service/src/main/resources/sql/postgres/integrityDB7to8migration.sql @@ -26,4 +26,4 @@ UPDATE tableversions SET version = 8 WHERE tablename = 'integritydb'; -- table version UPDATE tableversions SET version = 3 WHERE tablename = 'pillarstats'; -ALTER TABLE pillarstats ADD COLUMN oldest_checksum_timestamp BIGINT DEFAULT NULL; +ALTER TABLE pillarstats ADD COLUMN IF NOT EXISTS oldest_checksum_timestamp BIGINT DEFAULT NULL ; diff --git a/bitrepository-integrity-service/src/main/resources/sql/postgres/integrityDBCreation.sql b/bitrepository-integrity-service/src/main/resources/sql/postgres/integrityDBCreation.sql index 1a7c3b26e..0a25ad94c 100644 --- a/bitrepository-integrity-service/src/main/resources/sql/postgres/integrityDBCreation.sql +++ b/bitrepository-integrity-service/src/main/resources/sql/postgres/integrityDBCreation.sql @@ -30,20 +30,20 @@ -- of the tables, especially when upgrading. -- Expected entry count: only those in this script. --**************************************************************************-- -CREATE TABLE tableversions ( +CREATE TABLE IF NOT EXISTS tableversions ( tablename VARCHAR(100) NOT NULL, -- Name of table version SMALLINT NOT NULL -- version of table ); -INSERT INTO tableversions (tablename, version) VALUES ('fileinfo', 6); -INSERT INTO tableversions (tablename, version) VALUES ('files', 2); -INSERT INTO tableversions (tablename, version) VALUES ('pillar', 3); -INSERT INTO tableversions (tablename, version) VALUES ('collections' ,2); -INSERT INTO tableversions (tablename, version) VALUES ('integritydb', 7); -INSERT INTO tableversions (tablename, version) VALUES ('stats', 3); -INSERT INTO tableversions (tablename, version) VALUES ('collectionstats', 3); -INSERT INTO tableversions (tablename, version) VALUES ('pillarstats', 2); -INSERT INTO tableversions (tablename, version) VALUES ('collection_progress', 2); +INSERT INTO tableversions (tablename, version) VALUES ('fileinfo', 6) ON CONFLICT DO NOTHING; +INSERT INTO tableversions (tablename, version) VALUES ('files', 2) ON CONFLICT DO NOTHING; +INSERT INTO tableversions (tablename, version) VALUES ('pillar', 3) ON CONFLICT DO NOTHING; +INSERT INTO tableversions (tablename, version) VALUES ('collections' ,2) ON CONFLICT DO NOTHING; +INSERT INTO tableversions (tablename, version) VALUES ('integritydb', 7) ON CONFLICT DO NOTHING; +INSERT INTO tableversions (tablename, version) VALUES ('stats', 3) ON CONFLICT DO NOTHING; +INSERT INTO tableversions (tablename, version) VALUES ('collectionstats', 3) ON CONFLICT DO NOTHING; +INSERT INTO tableversions (tablename, version) VALUES ('pillarstats', 2) ON CONFLICT DO NOTHING; +INSERT INTO tableversions (tablename, version) VALUES ('collection_progress', 2) ON CONFLICT DO NOTHING; --*************************************************************************-- -- Name: collections @@ -51,7 +51,7 @@ INSERT INTO tableversions (tablename, version) VALUES ('collection_progress', 2) -- Purpose: Keeps track of the names of the files within the system. -- Expected entry count: Few --*************************************************************************-- -CREATE TABLE collections ( +CREATE TABLE IF NOT EXISTS collections ( collectionID VARCHAR(255) PRIMARY KEY -- The id for the collection. ); @@ -62,7 +62,7 @@ CREATE TABLE collections ( -- Purpose: Keeps track of the information about the pillars. -- Expected entry count: Few --*************************************************************************-- -CREATE TABLE pillar ( +CREATE TABLE IF NOT EXISTS pillar ( pillarID VARCHAR(100) PRIMARY KEY -- The id of the pillar. ); @@ -74,7 +74,7 @@ CREATE TABLE pillar ( -- on a specific pillar. -- Expected entry count: Very, very many. --*************************************************************************-- -CREATE TABLE fileinfo ( +CREATE TABLE IF NOT EXISTS fileinfo ( fileID VARCHAR(255) NOT NULL, -- The file ID collectionID VARCHAR(255) NOT NULL, -- The collection ID pillarID VARCHAR(100) NOT NULL, -- The pillar ID @@ -90,7 +90,7 @@ CREATE TABLE fileinfo ( FOREIGN KEY (pillarID) REFERENCES pillar(pillarID) ); -CREATE INDEX collectionfileidx ON fileinfo(collectionid, fileid); +CREATE INDEX IF NOT EXISTS collectionfileidx ON fileinfo(collectionid, fileid); --*************************************************************************-- -- Name: collection_progress @@ -99,7 +99,7 @@ CREATE INDEX collectionfileidx ON fileinfo(collectionid, fileid); -- a given pillar in a given collection -- Expected entry count: few --*************************************************************************-- -CREATE TABLE collection_progress ( +CREATE TABLE IF NOT EXISTS collection_progress ( collectionID VARCHAR(255) NOT NULL, pillarID VARCHAR(100) NOT NULL, latest_file_timestamp BIGINT DEFAULT NULL, @@ -115,7 +115,7 @@ CREATE TABLE collection_progress ( -- Purpose: Keeps track of the collected statistics. -- Expected entry count: Many (over time) --*************************************************************************-- -CREATE TABLE stats ( +CREATE TABLE IF NOT EXISTS stats ( stat_key SERIAL PRIMARY KEY, -- The key for a set of statistics. stat_time BIGINT NOT NULL, -- The time (millis since epoch) the statistics entry were made. @@ -126,7 +126,7 @@ CREATE TABLE stats ( -- Foreign key constraint on collectionID, enforcing the presence of the referred key ); -CREATE INDEX lastupdatetimeindex ON stats (last_update); +CREATE INDEX IF NOT EXISTS lastupdatetimeindex ON stats (last_update); --*************************************************************************-- -- Name: collectionstats @@ -134,7 +134,7 @@ CREATE INDEX lastupdatetimeindex ON stats (last_update); -- Purpose: Keeps track of the statistics for a collection. -- Expected entry count: many (over time) --*************************************************************************-- -CREATE TABLE collectionstats ( +CREATE TABLE IF NOT EXISTS collectionstats ( collectionstat_key SERIAL PRIMARY KEY, -- The key for the collectionstat. stat_key INT NOT NULL, -- The key for the statistics entity. @@ -153,7 +153,7 @@ CREATE TABLE collectionstats ( -- Purpose: Keeps track of the statistics for a pillar. -- Expected entry count: many (over time) --*************************************************************************-- -CREATE TABLE pillarstats ( +CREATE TABLE IF NOT EXISTS pillarstats ( pillarstat_key SERIAL PRIMARY KEY, -- The key for the pillarstat. stat_key INT NOT NULL, -- The key for the statistics entity. diff --git a/bitrepository-integrity-service/src/main/scripts/create_derby_databases.sh b/bitrepository-integrity-service/src/main/scripts/create_derby_databases.sh index 147127bd0..a93f90ec0 100755 --- a/bitrepository-integrity-service/src/main/scripts/create_derby_databases.sh +++ b/bitrepository-integrity-service/src/main/scripts/create_derby_databases.sh @@ -1,4 +1,12 @@ -#!/bin/bash +#!/usr/bin/env bash + +SCRIPT_DIR="$(dirname "$(readlink -f -- "${BASH_SOURCE[0]}")")" + +set -o errexit +set -o pipefail +set -o nounset +set -o xtrace + ### # #%L @@ -34,9 +42,10 @@ echo "Unzipping war to get access to lib files." unzip -o -qq *.war echo "Creating integrity database." -$JAVA $CLASSPATH org.bitrepository.integrityservice.cache.database.IntegrityDatabaseCreator $CONFDIR $INTEGRITY_DB_SCRIPT +$JAVA $CLASSPATH "org.bitrepository.integrityservice.cache.database.IntegrityDatabaseCreator" "$CONFDIR" "$INTEGRITY_DB_SCRIPT" + echo "Creating audit database." -$JAVA $CLASSPATH org.bitrepository.integrityservice.audittrail.IntegrityAuditTrailDatabaseCreator $CONFDIR $AUDIT_CONTRIBUTOR_DB_SCRIPT +$JAVA $CLASSPATH "org.bitrepository.integrityservice.audittrail.IntegrityAuditTrailDatabaseCreator" "$CONFDIR" "$AUDIT_CONTRIBUTOR_DB_SCRIPT" -cp -r target $FINAL_DIR +cp -r target "$FINAL_DIR" rm -r target \ No newline at end of file diff --git a/bitrepository-integrity-service/src/test/conf/ReferenceSettings.xml b/bitrepository-integrity-service/src/test/conf/ReferenceSettings.xml index 5118c31c2..d283b01b7 100644 --- a/bitrepository-integrity-service/src/test/conf/ReferenceSettings.xml +++ b/bitrepository-integrity-service/src/test/conf/ReferenceSettings.xml @@ -35,12 +35,12 @@ integrity-service org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:target/database/integritydb + jdbc:derby:target/database/integritydb;create=true PT1H org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:target/database/auditcontributerdb + jdbc:derby:target/database/auditcontributerdb;create=true P30D diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java index 3df0a3288..3dbf681e4 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java @@ -5,16 +5,16 @@ * Copyright (C) 2010 - 2012 The State and University Library, The Royal Library and The State Archives, Denmark * %% * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 2.1 of the + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 2.1 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public + * + * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * . * #L% @@ -28,36 +28,70 @@ import org.bitrepository.common.settings.Settings; import org.bitrepository.common.settings.TestSettingsProvider; import org.bitrepository.common.utils.SettingsUtils; +import org.bitrepository.integrityservice.cache.IntegrityDatabaseManager; import org.bitrepository.integrityservice.cache.IntegrityModel; +import org.bitrepository.integrityservice.cache.database.DerbyIntegrityDAO; +import org.bitrepository.integrityservice.cache.database.IntegrityDAO; import org.bitrepository.integrityservice.cache.database.IntegrityDatabaseCreator; +import org.bitrepository.integrityservice.cache.database.PostgresIntegrityDAO; +import org.bitrepository.pillar.integration.PostgresFixedPortContainer; import org.bitrepository.service.database.DBConnector; +import org.bitrepository.service.database.DatabaseManager; import org.bitrepository.service.database.DatabaseUtils; -import org.bitrepository.service.database.DerbyDatabaseDestroyer; -import org.junit.jupiter.api.AfterEach; +import org.bitrepository.settings.referencesettings.DatabaseSpecifics; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.postgresql.PostgreSQLContainer; import javax.xml.datatype.DatatypeConfigurationException; import java.math.BigInteger; import java.util.List; +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@Testcontainers public abstract class IntegrityDatabaseTestCase { protected Settings settings; - - @BeforeEach - public void setup() throws Exception { + + @Container + static PostgreSQLContainer integrityDB = new PostgresFixedPortContainer("postgres:12-alpine") + .withFixedExposedPort(9876, 5432, InternetProtocol.TCP) + .withDatabaseName("integrityDB") + .withUsername("testcontainerUser") + .withPassword("testcontainerPassword") + .withLabel("purpose", "integrityDB") + .withClasspathResourceMapping( + "sql/postgres/integrityDBCreation.sql", + "/docker-entrypoint-initdb.d/init.sql", + BindMode.READ_ONLY) + .withClasspathResourceMapping( + "sql/postgres/integrityDB7to8migration.sql", + "/docker-entrypoint-initdb.d/init2.sql", + BindMode.READ_ONLY); + + @BeforeAll + public void beforeAll() throws DatatypeConfigurationException { settings = TestSettingsProvider.reloadSettings("IntegrityCheckingUnderTest"); customizeSettings(); SettingsUtils.initialize(settings); - DerbyDatabaseDestroyer.deleteDatabase( - settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); + } - IntegrityDatabaseCreator integrityDatabaseCreator = new IntegrityDatabaseCreator(); - integrityDatabaseCreator.createIntegrityDatabase(settings, null); + @BeforeEach + public void beforeEach() { + clearDatabase(); + new IntegrityDatabaseCreator().createIntegrityDatabase(settings, + "sql/postgres/integrityDBCreation.sql", + "sql/postgres/integrityDB7to8migration.sql"); } - - @AfterEach - public void clearDatabase() throws Exception { - DBConnector connector = new DBConnector(settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); + + public void clearDatabase() { + DBConnector connector = new DBConnector(settings.getReferenceSettings() + .getIntegrityServiceSettings() + .getIntegrityDatabase()); DatabaseUtils.executeStatement(connector, "DELETE FROM fileinfo"); DatabaseUtils.executeStatement(connector, "DELETE FROM collection_progress"); DatabaseUtils.executeStatement(connector, "DELETE FROM pillarstats"); @@ -66,44 +100,67 @@ public void clearDatabase() throws Exception { DatabaseUtils.executeStatement(connector, "DELETE FROM pillar"); DatabaseUtils.executeStatement(connector, "DELETE FROM collections"); } - + /** - * Inserts the checksumdata, but ensures that the data can be inserted, by inserting the file-id-data before. - * @param cache The integrity cache. - * @param csData The checksum data. - * @param pillarID The id of the pillar. + * Inserts the checksumdata, but ensures that the data can be inserted, by inserting the file-id-data before. + * + * @param cache The integrity cache. + * @param csData The checksum data. + * @param pillarID The id of the pillar. * @param collectionID The id of the collection. */ - protected void insertChecksumDataForModel(IntegrityModel cache, List csData, - String pillarID, String collectionID) { + protected void insertChecksumDataForModel(IntegrityModel cache, List csData, + String pillarID, String collectionID) { insertMissingFilesInChecksumDataForModel(cache, csData, pillarID, collectionID); cache.addChecksums(csData, pillarID, collectionID); } - + /** * Converts a piece of checksum data into file id data. + * * @param csData The checksum data to convert. */ - protected void insertMissingFilesInChecksumDataForModel(IntegrityModel cache, List csData, - String pillarID, String collectionID) { + protected void insertMissingFilesInChecksumDataForModel(IntegrityModel cache, + List csData, + String pillarID, + String collectionID) { FileIDsData res = new FileIDsData(); FileIDsDataItems items = new FileIDsDataItems(); - - for(ChecksumDataForChecksumSpecTYPE entry : csData) { + + for (ChecksumDataForChecksumSpecTYPE entry : csData) { FileIDsDataItem dataItem = new FileIDsDataItem(); dataItem.setFileID(entry.getFileID()); dataItem.setFileSize(BigInteger.ZERO); dataItem.setLastModificationTime(entry.getCalculationTimestamp()); items.getFileIDsDataItem().add(dataItem); - } - + } + res.setFileIDsDataItems(items); cache.addFileIDs(res, pillarID, collectionID); } - + /** - * Method to modify the by constructor loaded settings. - * Default implementation does nothing, so override to change behavior. + * Method to modify the by constructor loaded settings. + * Default implementation does nothing, so override to change behavior. */ - protected void customizeSettings() throws DatatypeConfigurationException { } + protected void customizeSettings() throws DatatypeConfigurationException { + } + + + protected IntegrityDAO createDAO() { + DatabaseSpecifics integrityDatabase = settings.getReferenceSettings() + .getIntegrityServiceSettings() + .getIntegrityDatabase(); + DatabaseManager dm = new IntegrityDatabaseManager(integrityDatabase); + + switch (integrityDatabase.getDriverClass()) { + case "org.postgresql.Driver": { + return new PostgresIntegrityDAO(dm.getConnector()); + } + case "org.apache.derby.jdbc.EmbeddedDriver": + default: { + return new DerbyIntegrityDAO(dm.getConnector()); + } + } + } } diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java index 9efe5283f..45bd59633 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java @@ -35,7 +35,9 @@ import org.bitrepository.integrityservice.cache.database.DerbyIntegrityDAO; import org.bitrepository.integrityservice.cache.database.IntegrityDAO; import org.bitrepository.integrityservice.cache.database.IntegrityIssueIterator; +import org.bitrepository.integrityservice.cache.database.PostgresIntegrityDAO; import org.bitrepository.service.database.DatabaseManager; +import org.bitrepository.settings.referencesettings.DatabaseSpecifics; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; @@ -68,9 +70,7 @@ class IntegrityDAOTest extends IntegrityDatabaseTestCase { static final String EXTRA_COLLECTION = "extra-collection"; @BeforeEach - @Override - public void setup() throws Exception { - super.setup(); + public void setup() { TEST_COLLECTIONID = settings.getRepositorySettings().getCollections().getCollection().get(0).getID(); } @@ -99,10 +99,11 @@ protected void customizeSettings() { @Tag("regressiontest") @Tag("databasetest") @Tag("integritytest") - void instantiationTest() throws Exception { + void instantiationTest() { addDescription("Testing the connection to the integrity database."); - IntegrityDAO cache = createDAO(); - Assertions.assertNotNull(cache); + try (IntegrityDAO cache = createDAO()) { + Assertions.assertNotNull(cache); + } } @Test @@ -115,40 +116,45 @@ void reinitialiseDatabaseTest() throws Exception { DatabaseManager dm = new IntegrityDatabaseManager( settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - IntegrityDAO cache = new DerbyIntegrityDAO(dm.getConnector()); - Assertions.assertNotNull(cache); + try (IntegrityDAO cache = createDAO()) { + Assertions.assertNotNull(cache); - addStep("Close the connection and create another one.", "Should not fail"); - dm.getConnector().getConnection().close(); - dm.getConnector().destroy(); + addStep("Close the connection and create another one.", "Should not fail"); + cache.close(); + dm.getConnector().getConnection().close(); + dm.getConnector().destroy(); - synchronized (this) { - wait(100); - } + synchronized (this) { + wait(100); + } - DatabaseManager newdm = new IntegrityDatabaseManager( - settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); + DatabaseManager newdm = new IntegrityDatabaseManager( + settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - cache = new DerbyIntegrityDAO(newdm.getConnector()); + try (IntegrityDAO ignored = createDAO()) { + System.out.println("done"); + } + } } @Test @Tag("regressiontest") @Tag("databasetest") @Tag("integritytest") - void initialStateExtractionTest() throws Exception { + void initialStateExtractionTest() { addDescription("Tests the initial state of the IntegrityModel. Should not contain any data."); - IntegrityDAO cache = createDAO(); + try (IntegrityDAO cache = createDAO()) { - List pillersInDB = cache.getAllPillars(); - Assertions.assertTrue(pillersInDB.containsAll(Arrays.asList(TEST_PILLAR_1, TEST_PILLAR_2, EXTRA_PILLAR))); - Assertions.assertEquals(3, pillersInDB.size()); - List collectionsInDB = cache.getCollections(); - Assertions.assertTrue(collectionsInDB.containsAll(Arrays.asList(TEST_COLLECTIONID, EXTRA_COLLECTION))); - Assertions.assertEquals(2, collectionsInDB.size()); + List pillersInDB = cache.getAllPillars(); + Assertions.assertTrue(pillersInDB.containsAll(Arrays.asList(TEST_PILLAR_1, TEST_PILLAR_2, EXTRA_PILLAR))); + Assertions.assertEquals(3, pillersInDB.size()); + List collectionsInDB = cache.getCollections(); + Assertions.assertTrue(collectionsInDB.containsAll(Arrays.asList(TEST_COLLECTIONID, EXTRA_COLLECTION))); + Assertions.assertEquals(2, collectionsInDB.size()); - Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); - Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); + Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); + Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); + } } @Test @@ -157,109 +163,118 @@ void initialStateExtractionTest() throws Exception { @Tag("integritytest") void testCorrectDateHandling() { addDescription("Testing the correct ingest and extraction of file and checksum dates"); - IntegrityDAO cache = createDAO(); - - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ROOT); - Instant summertimeTS = ZonedDateTime.parse("2015-10-25T02:59:54.000+02:00", formatter).toInstant(); - Instant summertimeUnix = Instant.ofEpochMilli(1445734794000L); - Assertions.assertEquals(summertimeUnix, summertimeTS); - - Instant wintertimeTS = ZonedDateTime.parse("2015-10-25T02:59:54.000+01:00", formatter).toInstant(); - Instant wintertimeUnix = Instant.ofEpochMilli(1445738394000L); - Assertions.assertEquals(wintertimeUnix, wintertimeTS); - - FileIDsData summertimeData = getFileIDsData("summertime"); - summertimeData.getFileIDsDataItems().getFileIDsDataItem().get(0) - .setLastModificationTime(CalendarUtils.getXmlGregorianCalendar(summertimeTS)); - FileIDsData wintertimeData = getFileIDsData("wintertime"); - wintertimeData.getFileIDsDataItems().getFileIDsDataItem().get(0) - .setLastModificationTime(CalendarUtils.getXmlGregorianCalendar(wintertimeTS)); - cache.updateFileIDs(summertimeData, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(wintertimeData, TEST_PILLAR_1, TEST_COLLECTIONID); - - List summertimeCsData = getChecksumResults("summertime", TEST_CHECKSUM); - summertimeCsData.get(0).setCalculationTimestamp(CalendarUtils.getXmlGregorianCalendar(summertimeTS)); - List wintertimeCsData = getChecksumResults("wintertime", TEST_CHECKSUM); - wintertimeCsData.get(0).setCalculationTimestamp(CalendarUtils.getXmlGregorianCalendar(wintertimeTS)); - cache.updateChecksums(summertimeCsData, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateChecksums(wintertimeCsData, TEST_PILLAR_1, TEST_COLLECTIONID); - - List fis = cache.getFileInfosForFile("summertime", TEST_COLLECTIONID); - Assertions.assertEquals(1, fis.size(), fis.toString()); - Assertions.assertEquals(summertimeUnix, fis.get(0).getDateForLastChecksumCheckInstant()); - - fis = cache.getFileInfosForFile("wintertime", TEST_COLLECTIONID); - Assertions.assertEquals(1, fis.size(), fis.toString()); - Assertions.assertEquals(wintertimeUnix, fis.get(0).getDateForLastChecksumCheckInstant()); + try (IntegrityDAO cache = createDAO()) { + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ROOT); + Instant summertimeTS = ZonedDateTime.parse("2015-10-25T02:59:54.000+02:00", formatter).toInstant(); + Instant summertimeUnix = Instant.ofEpochMilli(1445734794000L); + Assertions.assertEquals(summertimeUnix, summertimeTS); + + Instant wintertimeTS = ZonedDateTime.parse("2015-10-25T02:59:54.000+01:00", formatter).toInstant(); + Instant wintertimeUnix = Instant.ofEpochMilli(1445738394000L); + Assertions.assertEquals(wintertimeUnix, wintertimeTS); + + FileIDsData summertimeData = getFileIDsData("summertime"); + summertimeData.getFileIDsDataItems().getFileIDsDataItem().get(0) + .setLastModificationTime(CalendarUtils.getXmlGregorianCalendar(summertimeTS)); + FileIDsData wintertimeData = getFileIDsData("wintertime"); + wintertimeData.getFileIDsDataItems().getFileIDsDataItem().get(0) + .setLastModificationTime(CalendarUtils.getXmlGregorianCalendar(wintertimeTS)); + cache.updateFileIDs(summertimeData, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(wintertimeData, TEST_PILLAR_1, TEST_COLLECTIONID); + + List summertimeCsData = getChecksumResults("summertime", TEST_CHECKSUM); + summertimeCsData.get(0).setCalculationTimestamp(CalendarUtils.getXmlGregorianCalendar(summertimeTS)); + List wintertimeCsData = getChecksumResults("wintertime", TEST_CHECKSUM); + wintertimeCsData.get(0).setCalculationTimestamp(CalendarUtils.getXmlGregorianCalendar(wintertimeTS)); + cache.updateChecksums(summertimeCsData, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateChecksums(wintertimeCsData, TEST_PILLAR_1, TEST_COLLECTIONID); + + List fis = cache.getFileInfosForFile("summertime", TEST_COLLECTIONID); + Assertions.assertEquals(1, fis.size(), fis.toString()); + Assertions.assertEquals(summertimeUnix, fis.get(0).getDateForLastChecksumCheckInstant()); + + fis = cache.getFileInfosForFile("wintertime", TEST_COLLECTIONID); + Assertions.assertEquals(1, fis.size(), fis.toString()); + Assertions.assertEquals(wintertimeUnix, fis.get(0).getDateForLastChecksumCheckInstant()); + } } @Test @Tag("regressiontest") @Tag("databasetest") @Tag("integritytest") - void testIngestOfFileIDsData() throws Exception { + void testIngestOfFileIDsData() { addDescription("Tests the ingesting of file ids data"); - IntegrityDAO cache = createDAO(); - - Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); - Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); - - addStep("Create data", "Should be ingested into the database"); - FileIDsData data1 = getFileIDsData(TEST_FILE_ID); - cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); - - addStep("Extract the data", "Should be identical to the ingested data"); - Collection fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); - Assertions.assertNotNull(fileinfos); - for (FileInfo fi : fileinfos) { - Assertions.assertEquals(TEST_FILE_ID, fi.getFileId()); - Assertions.assertNull(fi.getChecksum()); - Assertions.assertEquals(Instant.EPOCH, fi.getDateForLastChecksumCheckInstant()); - Assertions.assertEquals(CalendarUtils.convertFromXMLGregorianCalendarToInstant( - data1.getFileIDsDataItems().getFileIDsDataItem().get(0).getLastModificationTime()), - fi.getDateForLastFileIDCheckInstant()); - Assertions.assertEquals(Long.valueOf(data1.getFileIDsDataItems().getFileIDsDataItem().get(0).getFileSize().longValue()), - fi.getFileSize()); + try (IntegrityDAO cache = createDAO()) { + + Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); + Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); + + addStep("Create data", "Should be ingested into the database"); + FileIDsData data1 = getFileIDsData(TEST_FILE_ID); + cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); + + addStep("Extract the data", "Should be identical to the ingested data"); + Collection fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); + Assertions.assertNotNull(fileinfos); + for (FileInfo fi : fileinfos) { + Assertions.assertEquals(TEST_FILE_ID, fi.getFileId()); + Assertions.assertNull(fi.getChecksum()); + Assertions.assertEquals(Instant.EPOCH, fi.getDateForLastChecksumCheckInstant()); + Assertions.assertEquals(CalendarUtils.convertFromXMLGregorianCalendarToInstant( + data1.getFileIDsDataItems().getFileIDsDataItem().get(0).getLastModificationTime()), + fi.getDateForLastFileIDCheckInstant()); + Assertions.assertEquals(Long.valueOf(data1.getFileIDsDataItems() + .getFileIDsDataItem() + .get(0) + .getFileSize() + .longValue()), + fi.getFileSize()); + } + + addStep("Check that the extra collection is untouched by the ingest", + "should deliver an empty collection and" + + " no errors"); + Assertions.assertEquals(Long.valueOf(1), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); + Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); } - - addStep("Check that the extra collection is untouched by the ingest", "should deliver an empty collection and" + - " no errors"); - Assertions.assertEquals(Long.valueOf(1), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); - Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); } @Test @Tag("regressiontest") @Tag("databasetest") @Tag("integritytest") - void testIngestOfChecksumsData() throws Exception { + void testIngestOfChecksumsData() { addDescription("Tests the ingesting of checksums data"); - IntegrityDAO cache = createDAO(); - - Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); - Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); - - addStep("Create data", "Should be ingested into the database"); - List csData = getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM); - cache.updateChecksums(csData, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateChecksums(csData, TEST_PILLAR_2, TEST_COLLECTIONID); - - addStep("Extract the data", "Should be identical to the ingested data"); - Collection fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); - Assertions.assertNotNull(fileinfos); - for (FileInfo fi : fileinfos) { - Assertions.assertEquals(TEST_FILE_ID, fi.getFileId()); - Assertions.assertEquals(TEST_CHECKSUM, fi.getChecksum()); - Assertions.assertEquals(CalendarUtils.convertFromXMLGregorianCalendarToInstant(csData.get(0).getCalculationTimestamp()), - fi.getDateForLastChecksumCheckInstant()); + try (IntegrityDAO cache = createDAO()) { + + Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); + Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); + + addStep("Create data", "Should be ingested into the database"); + List csData = getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM); + cache.updateChecksums(csData, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateChecksums(csData, TEST_PILLAR_2, TEST_COLLECTIONID); + + addStep("Extract the data", "Should be identical to the ingested data"); + Collection fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); + Assertions.assertNotNull(fileinfos); + for (FileInfo fi : fileinfos) { + Assertions.assertEquals(TEST_FILE_ID, fi.getFileId()); + Assertions.assertEquals(TEST_CHECKSUM, fi.getChecksum()); + Assertions.assertEquals(CalendarUtils.convertFromXMLGregorianCalendarToInstant(csData.get(0) + .getCalculationTimestamp()), + fi.getDateForLastChecksumCheckInstant()); + } + + addStep("Check that the extra collection is untouched by the ingest", + "should deliver an empty collection and no errors"); + Assertions.assertEquals(Long.valueOf(1), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); + Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); } - addStep("Check that the extra collection is untouched by the ingest", - "should deliver an empty collection and no errors"); - Assertions.assertEquals(Long.valueOf(1), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); - Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); - } @@ -267,81 +282,83 @@ void testIngestOfChecksumsData() throws Exception { @Tag("regressiontest") @Tag("databasetest") @Tag("integritytest") - void testDeletingEntry() throws Exception { + void testDeletingEntry() { addDescription("Tests the deletion of an FileID entry from a collection. " + - "Checks that it does not effect another collection with a fileID equal to the deleted"); - IntegrityDAO cache = createDAO(); - Collection fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); - Assertions.assertNotNull(fileinfos); - Assertions.assertEquals(0, fileinfos.size()); - - addStep("Create data", "Should be ingested into the database"); - FileIDsData data1 = getFileIDsData(TEST_FILE_ID); - cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); - - cache.updateFileIDs(data1, TEST_PILLAR_1, EXTRA_COLLECTION); - cache.updateFileIDs(data1, EXTRA_PILLAR, EXTRA_COLLECTION); - - addStep("Ensure that the data is present", "the data is present"); - fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); - Assertions.assertNotNull(fileinfos); - Assertions.assertEquals(2, fileinfos.size()); - fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, EXTRA_COLLECTION); - Assertions.assertNotNull(fileinfos); - Assertions.assertEquals(2, fileinfos.size()); - - addStep("Delete the entry for the first pillar", - "No fileinfos should be extracted from the pillar in the collection."); - cache.removeFile(TEST_COLLECTIONID, TEST_PILLAR_1, TEST_FILE_ID); - List fis = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); - Assertions.assertNotNull(fis); - Assertions.assertEquals(1, fis.size()); - Assertions.assertEquals(TEST_PILLAR_2, fis.get(0).getPillarId()); - - addStep("Delete the entry for the second pillar", - "No fileinfos should be extracted from the collection."); - cache.removeFile(TEST_COLLECTIONID, TEST_PILLAR_2, TEST_FILE_ID); - fis = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); - Assertions.assertNotNull(fis); - Assertions.assertEquals(0, fis.size()); - - addStep("Check that the data in the extra collection is still present", - "the data is present"); - fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, EXTRA_COLLECTION); - Assertions.assertNotNull(fileinfos); - Assertions.assertEquals(2, fileinfos.size()); + "Checks that it does not effect another collection with a fileID equal to the deleted"); + try (IntegrityDAO cache = createDAO()) { + Collection fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); + Assertions.assertNotNull(fileinfos); + Assertions.assertEquals(0, fileinfos.size()); + + addStep("Create data", "Should be ingested into the database"); + FileIDsData data1 = getFileIDsData(TEST_FILE_ID); + cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); + + cache.updateFileIDs(data1, TEST_PILLAR_1, EXTRA_COLLECTION); + cache.updateFileIDs(data1, EXTRA_PILLAR, EXTRA_COLLECTION); + + addStep("Ensure that the data is present", "the data is present"); + fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); + Assertions.assertNotNull(fileinfos); + Assertions.assertEquals(2, fileinfos.size()); + fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, EXTRA_COLLECTION); + Assertions.assertNotNull(fileinfos); + Assertions.assertEquals(2, fileinfos.size()); + + addStep("Delete the entry for the first pillar", + "No fileinfos should be extracted from the pillar in the collection."); + cache.removeFile(TEST_COLLECTIONID, TEST_PILLAR_1, TEST_FILE_ID); + List fis = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); + Assertions.assertNotNull(fis); + Assertions.assertEquals(1, fis.size()); + Assertions.assertEquals(TEST_PILLAR_2, fis.get(0).getPillarId()); + + addStep("Delete the entry for the second pillar", + "No fileinfos should be extracted from the collection."); + cache.removeFile(TEST_COLLECTIONID, TEST_PILLAR_2, TEST_FILE_ID); + fis = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); + Assertions.assertNotNull(fis); + Assertions.assertEquals(0, fis.size()); + + addStep("Check that the data in the extra collection is still present", + "the data is present"); + fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, EXTRA_COLLECTION); + Assertions.assertNotNull(fileinfos); + Assertions.assertEquals(2, fileinfos.size()); + } } @Test @Tag("regressiontest") @Tag("databasetest") @Tag("integritytest") - void testDeletingNonExistingEntry() throws Exception { + void testDeletingNonExistingEntry() { addDescription("Tests the deletion of an nonexisting FileID entry."); - IntegrityDAO cache = createDAO(); + try (IntegrityDAO cache = createDAO()) { - String nonexistingFileEntry = "NON-EXISTING-FILE-ENTRY" + Instant.now().toEpochMilli(); + String nonexistingFileEntry = "NON-EXISTING-FILE-ENTRY" + Instant.now().toEpochMilli(); - addStep("Create data", "Should be ingested into the database"); - FileIDsData data1 = getFileIDsData(TEST_FILE_ID); - cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); + addStep("Create data", "Should be ingested into the database"); + FileIDsData data1 = getFileIDsData(TEST_FILE_ID); + cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); - Collection fileinfos = cache.getFileInfosForFile(nonexistingFileEntry, TEST_COLLECTIONID); - Assertions.assertNotNull(fileinfos); - Assertions.assertEquals(0, fileinfos.size()); + Collection fileinfos = cache.getFileInfosForFile(nonexistingFileEntry, TEST_COLLECTIONID); + Assertions.assertNotNull(fileinfos); + Assertions.assertEquals(0, fileinfos.size()); - fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); - Assertions.assertNotNull(fileinfos); - Assertions.assertEquals(2, fileinfos.size()); + fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); + Assertions.assertNotNull(fileinfos); + Assertions.assertEquals(2, fileinfos.size()); - addStep("Delete a nonexisting entry", "Should not change the state of the database."); - cache.removeFile(TEST_COLLECTIONID, TEST_PILLAR_1, nonexistingFileEntry); - cache.removeFile(TEST_COLLECTIONID, TEST_PILLAR_2, nonexistingFileEntry); - fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); - Assertions.assertNotNull(fileinfos); - Assertions.assertEquals(2, fileinfos.size()); + addStep("Delete a nonexisting entry", "Should not change the state of the database."); + cache.removeFile(TEST_COLLECTIONID, TEST_PILLAR_1, nonexistingFileEntry); + cache.removeFile(TEST_COLLECTIONID, TEST_PILLAR_2, nonexistingFileEntry); + fileinfos = cache.getFileInfosForFile(TEST_FILE_ID, TEST_COLLECTIONID); + Assertions.assertNotNull(fileinfos); + Assertions.assertEquals(2, fileinfos.size()); + } } @Test @@ -350,70 +367,74 @@ void testDeletingNonExistingEntry() throws Exception { @Tag("integritytest") void testFindOrphanFiles() throws Exception { addDescription("Tests the ability to find orphan files."); - IntegrityDAO cache = createDAO(); - - addStep("Create data", "Should be ingested into the database"); - String orphanFile = "orphan"; - String existingFile = "existing"; - FileIDsData data1 = getFileIDsData(existingFile); - FileIDsData data3 = getFileIDsData(orphanFile); - cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); - cache.updateFileIDs(data3, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data3, TEST_PILLAR_2, TEST_COLLECTIONID); - Assertions.assertEquals(Long.valueOf(2), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); - Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); - Thread.sleep(100); - Instant updateTime = Instant.now(); - cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); - cache.updateFileIDs(data3, TEST_PILLAR_1, TEST_COLLECTIONID); - - List orphanFilesPillar1 = getIssuesFromIterator(cache.getOrphanFilesOnPillar(TEST_COLLECTIONID, - TEST_PILLAR_1, updateTime)); - Assertions.assertEquals(0, orphanFilesPillar1.size()); - List orphanFilesPillar2 = getIssuesFromIterator(cache.getOrphanFilesOnPillar(TEST_COLLECTIONID, - TEST_PILLAR_2, updateTime)); - Assertions.assertEquals(1, orphanFilesPillar2.size()); + try (IntegrityDAO cache = createDAO()) { + + addStep("Create data", "Should be ingested into the database"); + String orphanFile = "orphan"; + String existingFile = "existing"; + FileIDsData data1 = getFileIDsData(existingFile); + FileIDsData data3 = getFileIDsData(orphanFile); + cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); + cache.updateFileIDs(data3, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data3, TEST_PILLAR_2, TEST_COLLECTIONID); + Assertions.assertEquals(Long.valueOf(2), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); + Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION)); + Thread.sleep(100); + Instant updateTime = Instant.now(); + cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); + cache.updateFileIDs(data3, TEST_PILLAR_1, TEST_COLLECTIONID); + + List orphanFilesPillar1 = getIssuesFromIterator(cache.getOrphanFilesOnPillar(TEST_COLLECTIONID, + TEST_PILLAR_1, + updateTime)); + Assertions.assertEquals(0, orphanFilesPillar1.size()); + List orphanFilesPillar2 = getIssuesFromIterator(cache.getOrphanFilesOnPillar(TEST_COLLECTIONID, + TEST_PILLAR_2, + updateTime)); + Assertions.assertEquals(1, orphanFilesPillar2.size()); + } } @Test @Tag("regressiontest") @Tag("databasetest") @Tag("integritytest") - void testFindInconsistentChecksum() throws Exception { + void testFindInconsistentChecksum() { addDescription("Testing the localization of inconsistent checksums"); - IntegrityDAO cache = createDAO(); - - String checksum1_1 = "11"; - String checksum1_2 = "12"; - String checksum3 = "33"; - String checksum2_1 = "21"; - String checksum2_2 = "22"; - - String BAD_FILE_ID_1 = "BAD-FILE-1"; - String BAD_FILE_ID_2 = "BAD-FILE-2"; - String GOOD_FILE_ID = "GOOD-FILE"; - - addStep("Update the database with 2 inconsistent files and one consistent file.", - "Ingesting the data into the database"); - List csData1_1 = getChecksumResults(BAD_FILE_ID_1, checksum1_1); - List csData1_2 = getChecksumResults(BAD_FILE_ID_2, checksum1_2); - List csData1_3 = getChecksumResults(GOOD_FILE_ID, checksum3); - cache.updateChecksums(csData1_1, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateChecksums(csData1_2, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateChecksums(csData1_3, TEST_PILLAR_1, TEST_COLLECTIONID); - List csData2_1 = getChecksumResults(BAD_FILE_ID_1, checksum2_1); - List csData2_2 = getChecksumResults(BAD_FILE_ID_2, checksum2_2); - List csData2_3 = getChecksumResults(GOOD_FILE_ID, checksum3); - cache.updateChecksums(csData2_1, TEST_PILLAR_2, TEST_COLLECTIONID); - cache.updateChecksums(csData2_2, TEST_PILLAR_2, TEST_COLLECTIONID); - cache.updateChecksums(csData2_3, TEST_PILLAR_2, TEST_COLLECTIONID); - - addStep("Find the files with inconsistent checksums", "Bad file 1 and 2"); - List filesWithChecksumError - = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); - Assertions.assertEquals(Arrays.asList(BAD_FILE_ID_1, BAD_FILE_ID_2), filesWithChecksumError); + try (IntegrityDAO cache = createDAO()) { + + String checksum1_1 = "11"; + String checksum1_2 = "12"; + String checksum3 = "33"; + String checksum2_1 = "21"; + String checksum2_2 = "22"; + + String BAD_FILE_ID_1 = "BAD-FILE-1"; + String BAD_FILE_ID_2 = "BAD-FILE-2"; + String GOOD_FILE_ID = "GOOD-FILE"; + + addStep("Update the database with 2 inconsistent files and one consistent file.", + "Ingesting the data into the database"); + List csData1_1 = getChecksumResults(BAD_FILE_ID_1, checksum1_1); + List csData1_2 = getChecksumResults(BAD_FILE_ID_2, checksum1_2); + List csData1_3 = getChecksumResults(GOOD_FILE_ID, checksum3); + cache.updateChecksums(csData1_1, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateChecksums(csData1_2, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateChecksums(csData1_3, TEST_PILLAR_1, TEST_COLLECTIONID); + List csData2_1 = getChecksumResults(BAD_FILE_ID_1, checksum2_1); + List csData2_2 = getChecksumResults(BAD_FILE_ID_2, checksum2_2); + List csData2_3 = getChecksumResults(GOOD_FILE_ID, checksum3); + cache.updateChecksums(csData2_1, TEST_PILLAR_2, TEST_COLLECTIONID); + cache.updateChecksums(csData2_2, TEST_PILLAR_2, TEST_COLLECTIONID); + cache.updateChecksums(csData2_3, TEST_PILLAR_2, TEST_COLLECTIONID); + + addStep("Find the files with inconsistent checksums", "Bad file 1 and 2"); + List filesWithChecksumError + = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); + Assertions.assertEquals(Arrays.asList(BAD_FILE_ID_1, BAD_FILE_ID_2), filesWithChecksumError); + } } @Test @@ -422,18 +443,19 @@ void testFindInconsistentChecksum() throws Exception { @Tag("integritytest") void testNoChecksums() { addDescription("Testing the checksum validation, when no checksums exists."); - IntegrityDAO cache = createDAO(); - - addStep("Update the database with 2 inconsistent files and one consistent file.", - "Ingesting the data into the database"); - FileIDsData data1 = getFileIDsData(TEST_FILE_ID); - cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); - - addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); - List filesWithChecksumError - = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); - Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); + try (IntegrityDAO cache = createDAO()) { + + addStep("Update the database with 2 inconsistent files and one consistent file.", + "Ingesting the data into the database"); + FileIDsData data1 = getFileIDsData(TEST_FILE_ID); + cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data1, TEST_PILLAR_2, TEST_COLLECTIONID); + + addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); + List filesWithChecksumError + = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); + Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); + } } @Test @@ -442,28 +464,29 @@ void testNoChecksums() { @Tag("integritytest") void testMissingChecksums() { addDescription("Testing the checksum validation, when only one pillar has a checksum for a file."); - IntegrityDAO cache = createDAO(); - - Instant testStart = Instant.now(); - addStep("Update the database with 1 file, missing its checksum on one pillar.", - "Ingesting the data into the database"); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); - cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_1, TEST_COLLECTIONID); - - addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); - List filesWithChecksumError - = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); - Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); - - List fileWithMissingChecksumPillar1 - = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_1, - testStart)); - Assertions.assertEquals(Collections.emptyList(), fileWithMissingChecksumPillar1); - List fileWithMissingChecksumPillar2 - = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_2, - testStart)); - Assertions.assertEquals(Collections.singletonList(TEST_FILE_ID), fileWithMissingChecksumPillar2); + try (IntegrityDAO cache = createDAO()) { + + Instant testStart = Instant.now(); + addStep("Update the database with 1 file, missing its checksum on one pillar.", + "Ingesting the data into the database"); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); + cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_1, TEST_COLLECTIONID); + + addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); + List filesWithChecksumError + = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); + Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); + + List fileWithMissingChecksumPillar1 + = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_1, + testStart)); + Assertions.assertEquals(Collections.emptyList(), fileWithMissingChecksumPillar1); + List fileWithMissingChecksumPillar2 + = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_2, + testStart)); + Assertions.assertEquals(Collections.singletonList(TEST_FILE_ID), fileWithMissingChecksumPillar2); + } } @Test @@ -472,47 +495,48 @@ void testMissingChecksums() { @Tag("integritytest") void testMissingChecksumsChecksumNotUpdated() throws Exception { addDescription("Testing the checksum validation, when only one pillar has a checksum for a file."); - IntegrityDAO cache = createDAO(); - - Instant testStart = Instant.now(); - addStep("Update the database with 1 file, no missing checksums.", - "Ingesting the data into the database"); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); - cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_2, TEST_COLLECTIONID); - - addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); - List filesWithChecksumError - = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); - Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); - - List fileWithMissingChecksumPillar1 - = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_1, - testStart)); - Assertions.assertEquals(Collections.emptyList(), fileWithMissingChecksumPillar1); - List fileWithMissingChecksumPillar2 - = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_2, - testStart)); - Assertions.assertEquals(Collections.emptyList(), fileWithMissingChecksumPillar2); - - addStep("Updating the checksum for one pillar, and checking that the other pillars checksum is now missing", - "The second pillar is reported to be missing the checksum for the file"); - Instant secondUpdate = Instant.now(); - Thread.sleep(1000); - cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_1, TEST_COLLECTIONID); - addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); - filesWithChecksumError = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); - Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); - - fileWithMissingChecksumPillar1 - = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_1, - secondUpdate)); - Assertions.assertEquals(Collections.emptyList(), fileWithMissingChecksumPillar1); - fileWithMissingChecksumPillar2 - = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_2, - secondUpdate)); - Assertions.assertEquals(Collections.singletonList(TEST_FILE_ID), fileWithMissingChecksumPillar2); + try (IntegrityDAO cache = createDAO()) { + + Instant testStart = Instant.now(); + addStep("Update the database with 1 file, no missing checksums.", + "Ingesting the data into the database"); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); + cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_2, TEST_COLLECTIONID); + + addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); + List filesWithChecksumError + = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); + Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); + + List fileWithMissingChecksumPillar1 + = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_1, + testStart)); + Assertions.assertEquals(Collections.emptyList(), fileWithMissingChecksumPillar1); + List fileWithMissingChecksumPillar2 + = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_2, + testStart)); + Assertions.assertEquals(Collections.emptyList(), fileWithMissingChecksumPillar2); + + addStep("Updating the checksum for one pillar, and checking that the other pillars checksum is now missing", + "The second pillar is reported to be missing the checksum for the file"); + Instant secondUpdate = Instant.now(); + Thread.sleep(1000); + cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_1, TEST_COLLECTIONID); + addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); + filesWithChecksumError = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); + Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); + + fileWithMissingChecksumPillar1 + = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_1, + secondUpdate)); + Assertions.assertEquals(Collections.emptyList(), fileWithMissingChecksumPillar1); + fileWithMissingChecksumPillar2 + = getIssuesFromIterator(cache.getFilesWithMissingChecksums(TEST_COLLECTIONID, TEST_PILLAR_2, + secondUpdate)); + Assertions.assertEquals(Collections.singletonList(TEST_FILE_ID), fileWithMissingChecksumPillar2); + } } @@ -522,32 +546,37 @@ void testMissingChecksumsChecksumNotUpdated() throws Exception { @Tag("integritytest") void testOutdatedChecksums() { addDescription("Testing the checksum validation, when only one pillar has a checksum for a file."); - IntegrityDAO cache = createDAO(); - - Instant maxDate = Instant.now().minusSeconds(10); - - addStep("Update the database with one file, one pillar having an outdated checksum.", - "Ingesting the data into the database"); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); - cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_1, TEST_COLLECTIONID); - - List checksumData = getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM); - checksumData.get(0).setCalculationTimestamp(CalendarUtils.getEpoch()); - cache.updateChecksums(checksumData, TEST_PILLAR_2, TEST_COLLECTIONID); - - addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); - List filesWithChecksumError - = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); - Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); - - List fileWithOutdatedChecksumsPillar1 - = getIssuesFromIterator(cache.getFilesWithOutdatedChecksums(TEST_COLLECTIONID, TEST_PILLAR_1, maxDate)); - Assertions.assertEquals(Collections.emptyList(), fileWithOutdatedChecksumsPillar1); - - List fileWithOutdatedChecksumPillar2 - = getIssuesFromIterator(cache.getFilesWithOutdatedChecksums(TEST_COLLECTIONID, TEST_PILLAR_2, maxDate)); - Assertions.assertEquals(Collections.singletonList(TEST_FILE_ID), fileWithOutdatedChecksumPillar2); + try (IntegrityDAO cache = createDAO()) { + + Instant maxDate = Instant.now().minusSeconds(10); + + addStep("Update the database with one file, one pillar having an outdated checksum.", + "Ingesting the data into the database"); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); + cache.updateChecksums(getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM), TEST_PILLAR_1, TEST_COLLECTIONID); + + List checksumData = getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM); + checksumData.get(0).setCalculationTimestamp(CalendarUtils.getEpoch()); + cache.updateChecksums(checksumData, TEST_PILLAR_2, TEST_COLLECTIONID); + + addStep("Finding the files with inconsistent checksums", "No checksum thus no errors"); + List filesWithChecksumError + = getIssuesFromIterator(cache.findFilesWithChecksumInconsistencies(TEST_COLLECTIONID)); + Assertions.assertEquals(Collections.emptyList(), filesWithChecksumError); + + List fileWithOutdatedChecksumsPillar1 + = getIssuesFromIterator(cache.getFilesWithOutdatedChecksums(TEST_COLLECTIONID, + TEST_PILLAR_1, + maxDate)); + Assertions.assertEquals(Collections.emptyList(), fileWithOutdatedChecksumsPillar1); + + List fileWithOutdatedChecksumPillar2 + = getIssuesFromIterator(cache.getFilesWithOutdatedChecksums(TEST_COLLECTIONID, + TEST_PILLAR_2, + maxDate)); + Assertions.assertEquals(Collections.singletonList(TEST_FILE_ID), fileWithOutdatedChecksumPillar2); + } } @Test @@ -556,38 +585,42 @@ void testOutdatedChecksums() { @Tag("integritytest") void testExtractingAllKnownFilesForPillars() { addDescription("Tests that known files can be extracted for specific pillars."); - IntegrityDAO cache = createDAO(); - String file2 = TEST_FILE_ID + "-2"; - String file3 = TEST_FILE_ID + "-3"; - - addStep("Insert two files into database for a pillar", - "Ingesting the data into the database"); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID, file2), TEST_PILLAR_1, TEST_COLLECTIONID); - addStep("Insert a file to the extra collection for the common pillar", - "Data is ingested into the database"); - cache.updateFileIDs(getFileIDsData(file3), TEST_PILLAR_1, EXTRA_COLLECTION); - - addStep("Extract all the existing file ids for the pillar for collection '" + TEST_COLLECTIONID + "'", - "Both file ids is found."); - IntegrityIssueIterator it = cache.getAllFileIDsOnPillar(TEST_COLLECTIONID, TEST_PILLAR_1, 0L, Long.MAX_VALUE); - Collection fileIDs = getIssuesFromIterator(it); - Assertions.assertEquals(2, fileIDs.size(), "Number of files: " + fileIDs.size()); - Assertions.assertTrue(fileIDs.contains(TEST_FILE_ID)); - Assertions.assertTrue(fileIDs.contains(file2)); - Assertions.assertFalse(fileIDs.contains(file3)); - - addStep("Extract the single fileID for the extra collection", "Only the one file id exists"); - it = cache.getAllFileIDsOnPillar(EXTRA_COLLECTION, TEST_PILLAR_1, 0L, Long.MAX_VALUE); - fileIDs = getIssuesFromIterator(it); - Assertions.assertEquals(1, fileIDs.size(), "Number of files: " + fileIDs.size()); - Assertions.assertTrue(fileIDs.contains(file3)); - Assertions.assertFalse(fileIDs.contains(file2)); - Assertions.assertFalse(fileIDs.contains(TEST_FILE_ID)); - - addStep("Extract all the existing file ids for another pillar", "No files are found."); - it = cache.getAllFileIDsOnPillar(TEST_COLLECTIONID, TEST_PILLAR_2, 0L, Long.MAX_VALUE); - fileIDs = getIssuesFromIterator(it); - Assertions.assertTrue(fileIDs.isEmpty()); + try (IntegrityDAO cache = createDAO()) { + String file2 = TEST_FILE_ID + "-2"; + String file3 = TEST_FILE_ID + "-3"; + + addStep("Insert two files into database for a pillar", + "Ingesting the data into the database"); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID, file2), TEST_PILLAR_1, TEST_COLLECTIONID); + addStep("Insert a file to the extra collection for the common pillar", + "Data is ingested into the database"); + cache.updateFileIDs(getFileIDsData(file3), TEST_PILLAR_1, EXTRA_COLLECTION); + + addStep("Extract all the existing file ids for the pillar for collection '" + TEST_COLLECTIONID + "'", + "Both file ids is found."); + IntegrityIssueIterator it = cache.getAllFileIDsOnPillar(TEST_COLLECTIONID, + TEST_PILLAR_1, + 0L, + Long.MAX_VALUE); + Collection fileIDs = getIssuesFromIterator(it); + Assertions.assertEquals(2, fileIDs.size(), "Number of files: " + fileIDs.size()); + Assertions.assertTrue(fileIDs.contains(TEST_FILE_ID)); + Assertions.assertTrue(fileIDs.contains(file2)); + Assertions.assertFalse(fileIDs.contains(file3)); + + addStep("Extract the single fileID for the extra collection", "Only the one file id exists"); + it = cache.getAllFileIDsOnPillar(EXTRA_COLLECTION, TEST_PILLAR_1, 0L, Long.MAX_VALUE); + fileIDs = getIssuesFromIterator(it); + Assertions.assertEquals(1, fileIDs.size(), "Number of files: " + fileIDs.size()); + Assertions.assertTrue(fileIDs.contains(file3)); + Assertions.assertFalse(fileIDs.contains(file2)); + Assertions.assertFalse(fileIDs.contains(TEST_FILE_ID)); + + addStep("Extract all the existing file ids for another pillar", "No files are found."); + it = cache.getAllFileIDsOnPillar(TEST_COLLECTIONID, TEST_PILLAR_2, 0L, Long.MAX_VALUE); + fileIDs = getIssuesFromIterator(it); + Assertions.assertTrue(fileIDs.isEmpty()); + } } @Test @@ -596,23 +629,24 @@ void testExtractingAllKnownFilesForPillars() { @Tag("integritytest") void testExtractingAllKnownFilesForPillarsLimits() { addDescription("Tests the limits for extracting files for specific pillars."); - IntegrityDAO cache = createDAO(); - String file2 = TEST_FILE_ID + "-2"; - - addStep("Insert two files into database for a pillar", "Ingesting the data into the database"); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID, file2), TEST_PILLAR_1, TEST_COLLECTIONID); - - addStep("Extract with a maximum of 1", "The first file."); - IntegrityIssueIterator it = cache.getAllFileIDsOnPillar(TEST_COLLECTIONID, TEST_PILLAR_1, 0L, 1L); - Collection fileIDs = getIssuesFromIterator(it); - Assertions.assertEquals(1, fileIDs.size()); - Assertions.assertTrue(fileIDs.contains(TEST_FILE_ID)); - - addStep("Extract with a minimum of 1 and maximum of infinite", "The last file."); - it = cache.getAllFileIDsOnPillar(TEST_COLLECTIONID, TEST_PILLAR_1, 1L, Long.MAX_VALUE); - fileIDs = getIssuesFromIterator(it); - Assertions.assertEquals(1, fileIDs.size()); - Assertions.assertTrue(fileIDs.contains(file2)); + try (IntegrityDAO cache = createDAO()) { + String file2 = TEST_FILE_ID + "-2"; + + addStep("Insert two files into database for a pillar", "Ingesting the data into the database"); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID, file2), TEST_PILLAR_1, TEST_COLLECTIONID); + + addStep("Extract with a maximum of 1", "The first file."); + IntegrityIssueIterator it = cache.getAllFileIDsOnPillar(TEST_COLLECTIONID, TEST_PILLAR_1, 0L, 1L); + Collection fileIDs = getIssuesFromIterator(it); + Assertions.assertEquals(1, fileIDs.size()); + Assertions.assertTrue(fileIDs.contains(TEST_FILE_ID)); + + addStep("Extract with a minimum of 1 and maximum of infinite", "The last file."); + it = cache.getAllFileIDsOnPillar(TEST_COLLECTIONID, TEST_PILLAR_1, 1L, Long.MAX_VALUE); + fileIDs = getIssuesFromIterator(it); + Assertions.assertEquals(1, fileIDs.size()); + Assertions.assertTrue(fileIDs.contains(file2)); + } } @Test @@ -621,26 +655,27 @@ void testExtractingAllKnownFilesForPillarsLimits() { @Tag("integritytest") void testExtractingAllMissingFiles() { addDescription("Tests that missing files can be extracted."); - IntegrityDAO cache = createDAO(); - String file2 = TEST_FILE_ID + "-2"; - - addStep("Insert two files into database for a pillar and mark them as missing", - "Ingesting the data into the database"); - - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID, file2), TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); - - addStep("Check the number of files in collection and on pillars", - "The collection should have two files, the first pillar two, the second one"); - Assertions.assertEquals(2, (long) cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); - Map metrics = cache.getPillarCollectionMetrics(TEST_COLLECTIONID); - Assertions.assertEquals(2, metrics.get(TEST_PILLAR_1).getPillarFileCount()); - Assertions.assertEquals(1, metrics.get(TEST_PILLAR_2).getPillarFileCount()); - - addStep("Extract missing files", "one file should be missing"); - List missingFiles - = getIssuesFromIterator(cache.findFilesWithMissingCopies(TEST_COLLECTIONID, 2, 0L, 10L)); - Assertions.assertEquals(Collections.singletonList(file2), missingFiles); + try (IntegrityDAO cache = createDAO()) { + String file2 = TEST_FILE_ID + "-2"; + + addStep("Insert two files into database for a pillar and mark them as missing", + "Ingesting the data into the database"); + + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID, file2), TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); + + addStep("Check the number of files in collection and on pillars", + "The collection should have two files, the first pillar two, the second one"); + Assertions.assertEquals(2, (long) cache.getNumberOfFilesInCollection(TEST_COLLECTIONID)); + Map metrics = cache.getPillarCollectionMetrics(TEST_COLLECTIONID); + Assertions.assertEquals(2, metrics.get(TEST_PILLAR_1).getPillarFileCount()); + Assertions.assertEquals(1, metrics.get(TEST_PILLAR_2).getPillarFileCount()); + + addStep("Extract missing files", "one file should be missing"); + List missingFiles + = getIssuesFromIterator(cache.findFilesWithMissingCopies(TEST_COLLECTIONID, 2, 0L, 10L)); + Assertions.assertEquals(Collections.singletonList(file2), missingFiles); + } } @Test @@ -649,26 +684,27 @@ void testExtractingAllMissingFiles() { @Tag("integritytest") void testExtractingAllMissingFilesForPillarsLimits() { addDescription("Tests the limits for extracting missing files for specific pillars."); - IntegrityDAO cache = createDAO(); - String file2 = TEST_FILE_ID + "-2"; - String file3 = TEST_FILE_ID + "-3"; - - addStep("Insert two files into database for a pillar and set them to missing", - "Ingesting the data into the database"); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID, file2, file3), TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); - - addStep("Extract with a maximum of 1", "The first file."); - IntegrityIssueIterator it = cache.findFilesWithMissingCopies(TEST_COLLECTIONID, 2, 0L, 1L); - Collection fileIDs = getIssuesFromIterator(it); - Assertions.assertEquals(1, fileIDs.size()); - Assertions.assertTrue(fileIDs.contains(file2)); - - addStep("Extract with a minimum of 1 and maximum of infinite", "The last file."); - it = cache.findFilesWithMissingCopies(TEST_COLLECTIONID, 2, 1L, Long.MAX_VALUE); - fileIDs = getIssuesFromIterator(it); - Assertions.assertEquals(1, fileIDs.size()); - Assertions.assertTrue(fileIDs.contains(file3)); + try (IntegrityDAO cache = createDAO()) { + String file2 = TEST_FILE_ID + "-2"; + String file3 = TEST_FILE_ID + "-3"; + + addStep("Insert two files into database for a pillar and set them to missing", + "Ingesting the data into the database"); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID, file2, file3), TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(getFileIDsData(TEST_FILE_ID), TEST_PILLAR_2, TEST_COLLECTIONID); + + addStep("Extract with a maximum of 1", "The first file."); + IntegrityIssueIterator it = cache.findFilesWithMissingCopies(TEST_COLLECTIONID, 2, 0L, 1L); + Collection fileIDs = getIssuesFromIterator(it); + Assertions.assertEquals(1, fileIDs.size()); + Assertions.assertTrue(fileIDs.contains(file2)); + + addStep("Extract with a minimum of 1 and maximum of infinite", "The last file."); + it = cache.findFilesWithMissingCopies(TEST_COLLECTIONID, 2, 1L, Long.MAX_VALUE); + fileIDs = getIssuesFromIterator(it); + Assertions.assertEquals(1, fileIDs.size()); + Assertions.assertTrue(fileIDs.contains(file3)); + } } @Test @@ -677,33 +713,36 @@ void testExtractingAllMissingFilesForPillarsLimits() { @Tag("integritytest") void testGetLatestFileDateEntryForCollection() { addDescription("Tests that checksum date entries can be retrieved and manipulated."); - IntegrityDAO cache = createDAO(); + try (IntegrityDAO cache = createDAO()) { - addStep("Create data", "Should be ingested into the database"); + addStep("Create data", "Should be ingested into the database"); - Assertions.assertNull(cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); - Assertions.assertNull(cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); + Assertions.assertNull(cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); + Assertions.assertNull(cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); - FileIDsData fidsPillar1 = getFileIDsData(TEST_FILE_ID); - Instant expectedLatestFileDatePillar1 = CalendarUtils.convertFromXMLGregorianCalendarToInstant( - fidsPillar1.getFileIDsDataItems().getFileIDsDataItem().get(0).getLastModificationTime()); - cache.updateFileIDs(fidsPillar1, TEST_PILLAR_1, TEST_COLLECTIONID); + FileIDsData fidsPillar1 = getFileIDsData(TEST_FILE_ID); + Instant expectedLatestFileDatePillar1 = CalendarUtils.convertFromXMLGregorianCalendarToInstant( + fidsPillar1.getFileIDsDataItems().getFileIDsDataItem().get(0).getLastModificationTime()); + cache.updateFileIDs(fidsPillar1, TEST_PILLAR_1, TEST_COLLECTIONID); - FileIDsData fidsPillar2 = getFileIDsData(TEST_FILE_ID); - Instant expectedLatestFileDatePillar2 = expectedLatestFileDatePillar1.plusMillis(100); - fidsPillar2.getFileIDsDataItems().getFileIDsDataItem().get(0) - .setLastModificationTime(CalendarUtils.getXmlGregorianCalendar(expectedLatestFileDatePillar2)); - cache.updateFileIDs(fidsPillar2, TEST_PILLAR_2, TEST_COLLECTIONID); + FileIDsData fidsPillar2 = getFileIDsData(TEST_FILE_ID); + Instant expectedLatestFileDatePillar2 = expectedLatestFileDatePillar1.plusMillis(100); + fidsPillar2.getFileIDsDataItems().getFileIDsDataItem().get(0) + .setLastModificationTime(CalendarUtils.getXmlGregorianCalendar(expectedLatestFileDatePillar2)); + cache.updateFileIDs(fidsPillar2, TEST_PILLAR_2, TEST_COLLECTIONID); - Assertions.assertEquals(expectedLatestFileDatePillar1, cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); - Assertions.assertEquals(expectedLatestFileDatePillar2, cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); + Assertions.assertEquals(expectedLatestFileDatePillar1, + cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); + Assertions.assertEquals(expectedLatestFileDatePillar2, + cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); - Assertions.assertEquals(cache.getLatestFileInstantInCollection(TEST_COLLECTIONID), - cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); + Assertions.assertEquals(cache.getLatestFileInstantInCollection(TEST_COLLECTIONID), + cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); - cache.resetFileCollectionProgress(TEST_COLLECTIONID); - Assertions.assertNull(cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); - Assertions.assertNull(cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); + cache.resetFileCollectionProgress(TEST_COLLECTIONID); + Assertions.assertNull(cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); + Assertions.assertNull(cache.getLatestFileInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); + } } @Test @@ -712,23 +751,27 @@ void testGetLatestFileDateEntryForCollection() { @Tag("integritytest") void testGetLatestChecksumDateEntryForCollection() { addDescription("Tests that checksum date entries can be retrieved and manipulated."); - IntegrityDAO cache = createDAO(); - - addStep("Create data", "Should be ingested into the database"); - - Assertions.assertNull(cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); - Assertions.assertNull(cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); - - List csData = getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM); - cache.updateChecksums(csData, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateChecksums(csData, TEST_PILLAR_2, TEST_COLLECTIONID); - Instant expectedLatestChecksum = CalendarUtils.convertFromXMLGregorianCalendarToInstant(csData.get(0).getCalculationTimestamp()); - Assertions.assertEquals(expectedLatestChecksum, cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); - Assertions.assertEquals(expectedLatestChecksum, cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); - - cache.resetChecksumCollectionProgress(TEST_COLLECTIONID); - Assertions.assertNull(cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); - Assertions.assertNull(cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); + try (IntegrityDAO cache = createDAO()) { + + addStep("Create data", "Should be ingested into the database"); + + Assertions.assertNull(cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); + Assertions.assertNull(cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); + + List csData = getChecksumResults(TEST_FILE_ID, TEST_CHECKSUM); + cache.updateChecksums(csData, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateChecksums(csData, TEST_PILLAR_2, TEST_COLLECTIONID); + Instant expectedLatestChecksum = CalendarUtils.convertFromXMLGregorianCalendarToInstant(csData.get(0) + .getCalculationTimestamp()); + Assertions.assertEquals(expectedLatestChecksum, + cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); + Assertions.assertEquals(expectedLatestChecksum, + cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); + + cache.resetChecksumCollectionProgress(TEST_COLLECTIONID); + Assertions.assertNull(cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_1)); + Assertions.assertNull(cache.getLatestChecksumInstant(TEST_COLLECTIONID, TEST_PILLAR_2)); + } } @Test @@ -737,36 +780,37 @@ void testGetLatestChecksumDateEntryForCollection() { @Tag("integritytest") void testExtractCollectionFileSize() { addDescription("Tests that the accumulated size of the collection can be extracted"); - IntegrityDAO cache = createDAO(); - - addStep("Insert test data into database", "Data is ingested"); - String file2 = TEST_FILE_ID + "-2"; - String file3 = TEST_FILE_ID + "-3"; - Long size1 = 100L; - Long size2 = 200L; - Long size3 = 300L; - FileIDsData data1 = makeFileIDsDataWithGivenFileSize(TEST_FILE_ID, size1); - FileIDsData data2 = makeFileIDsDataWithGivenFileSize(file2, size2); - FileIDsData data3 = makeFileIDsDataWithGivenFileSize(file3, size3); - cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data2, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data2, TEST_PILLAR_2, TEST_COLLECTIONID); - cache.updateFileIDs(data3, TEST_PILLAR_2, TEST_COLLECTIONID); - - long pillar1Size = size1 + size2; - long pillar2Size = size2 + size3; - long collectionSize = size1 + size2 + size3; - - Map metrics = cache.getPillarCollectionMetrics(TEST_COLLECTIONID); - addStep("Check the reported size of the first pillar in the collection", - "The reported size matches the precalculated"); - Assertions.assertEquals(pillar1Size, metrics.get(TEST_PILLAR_1).getPillarCollectionSize()); - addStep("Check the reported size of the second pillar in the collection", - "The reported size matches the precalculated"); - Assertions.assertEquals(pillar2Size, metrics.get(TEST_PILLAR_2).getPillarCollectionSize()); - addStep("Check the reported size of the whole collection", - "The reported size matches the precalculated"); - Assertions.assertEquals(collectionSize, cache.getCollectionSize(TEST_COLLECTIONID)); + try (IntegrityDAO cache = createDAO()) { + + addStep("Insert test data into database", "Data is ingested"); + String file2 = TEST_FILE_ID + "-2"; + String file3 = TEST_FILE_ID + "-3"; + Long size1 = 100L; + Long size2 = 200L; + Long size3 = 300L; + FileIDsData data1 = makeFileIDsDataWithGivenFileSize(TEST_FILE_ID, size1); + FileIDsData data2 = makeFileIDsDataWithGivenFileSize(file2, size2); + FileIDsData data3 = makeFileIDsDataWithGivenFileSize(file3, size3); + cache.updateFileIDs(data1, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data2, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data2, TEST_PILLAR_2, TEST_COLLECTIONID); + cache.updateFileIDs(data3, TEST_PILLAR_2, TEST_COLLECTIONID); + + long pillar1Size = size1 + size2; + long pillar2Size = size2 + size3; + long collectionSize = size1 + size2 + size3; + + Map metrics = cache.getPillarCollectionMetrics(TEST_COLLECTIONID); + addStep("Check the reported size of the first pillar in the collection", + "The reported size matches the precalculated"); + Assertions.assertEquals(pillar1Size, metrics.get(TEST_PILLAR_1).getPillarCollectionSize()); + addStep("Check the reported size of the second pillar in the collection", + "The reported size matches the precalculated"); + Assertions.assertEquals(pillar2Size, metrics.get(TEST_PILLAR_2).getPillarCollectionSize()); + addStep("Check the reported size of the whole collection", + "The reported size matches the precalculated"); + Assertions.assertEquals(collectionSize, cache.getCollectionSize(TEST_COLLECTIONID)); + } } @Test @@ -775,21 +819,22 @@ void testExtractCollectionFileSize() { @Tag("integritytest") void testGetFileIDAtIndex() { addDescription("Tests that a fileID at a given index can be extracted."); - IntegrityDAO cache = createDAO(); + try (IntegrityDAO cache = createDAO()) { - addStep("Extract a fileID from the empty database", "Returns a null"); - Assertions.assertNull(cache.getFileIdAtIndex(TEST_COLLECTIONID, 0L)); + addStep("Extract a fileID from the empty database", "Returns a null"); + Assertions.assertNull(cache.getFileIdAtIndex(TEST_COLLECTIONID, 0L)); - addStep("Insert test data into database", "Data is ingested"); - FileIDsData data = makeFileIDsDataWithGivenFileSize(TEST_FILE_ID, 100L); - cache.updateFileIDs(data, TEST_PILLAR_1, TEST_COLLECTIONID); - cache.updateFileIDs(data, TEST_PILLAR_2, TEST_COLLECTIONID); + addStep("Insert test data into database", "Data is ingested"); + FileIDsData data = makeFileIDsDataWithGivenFileSize(TEST_FILE_ID, 100L); + cache.updateFileIDs(data, TEST_PILLAR_1, TEST_COLLECTIONID); + cache.updateFileIDs(data, TEST_PILLAR_2, TEST_COLLECTIONID); - addStep("Extract the first fileID", "The inserted fileID"); - Assertions.assertEquals(TEST_FILE_ID, cache.getFileIdAtIndex(TEST_COLLECTIONID, 0L)); + addStep("Extract the first fileID", "The inserted fileID"); + Assertions.assertEquals(TEST_FILE_ID, cache.getFileIdAtIndex(TEST_COLLECTIONID, 0L)); - addStep("Extract a fileID at an incomprehendable index from the database", "Returns a null"); - Assertions.assertNull(cache.getFileIdAtIndex(TEST_COLLECTIONID, Long.MAX_VALUE)); + addStep("Extract a fileID at an incomprehendable index from the database", "Returns a null"); + Assertions.assertNull(cache.getFileIdAtIndex(TEST_COLLECTIONID, Long.MAX_VALUE)); + } } private FileIDsData makeFileIDsDataWithGivenFileSize(String fileID, Long size) { @@ -835,11 +880,6 @@ private FileIDsData getFileIDsData(String... fileIDs) { return res; } - private IntegrityDAO createDAO() { - DatabaseManager dm = new IntegrityDatabaseManager( - settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - return new DerbyIntegrityDAO(dm.getConnector()); - } /** * This is not the way to handle the iterators, as the lists might grow really long. diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDBToolsTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDBToolsTest.java index 76f30332c..41b1222e0 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDBToolsTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDBToolsTest.java @@ -58,9 +58,7 @@ class IntegrityDBToolsTest extends IntegrityDatabaseTestCase { String testCollectionid; @BeforeEach - @Override public void setup() throws Exception { - super.setup(); testCollectionid = settings.getRepositorySettings().getCollections().getCollection().get(0).getID(); } @@ -92,23 +90,21 @@ protected void customizeSettings() { void testAddCollectionSuccess() { addDescription("Tests that a new collection can be added to the integrity database"); String newCollectionID = "new-collectionid"; - DatabaseManager dm = new IntegrityDatabaseManager( - settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - DBConnector dbCon = new DBConnector(settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - IntegrityDAO integrityDAO = new DerbyIntegrityDAO(dm.getConnector()); - IntegrityDBTools tool = new IntegrityDBTools(dbCon); - List collections = integrityDAO.getCollections(); - addStep("Extract initial list of collections", "The list contains the expected collections"); - assertTrue(collections.contains(testCollectionid)); - assertTrue(collections.contains(extraCollectionId)); - assertFalse(collections.contains(newCollectionID)); - - addStep("Add the new collection", "The new collection is found in the list of collections"); - tool.addCollection(newCollectionID); - collections = integrityDAO.getCollections(); - assertTrue(collections.contains(testCollectionid)); - assertTrue(collections.contains(extraCollectionId)); - assertTrue(collections.contains(newCollectionID)); + try (IntegrityDAO integrityDAO = createDAO(); + IntegrityDBTools tool = new IntegrityDBTools(integrityDAO.getDbConnector())) { + List collections = integrityDAO.getCollections(); + addStep("Extract initial list of collections", "The list contains the expected collections"); + assertTrue(collections.contains(testCollectionid)); + assertTrue(collections.contains(extraCollectionId)); + assertFalse(collections.contains(newCollectionID)); + + addStep("Add the new collection", "The new collection is found in the list of collections"); + tool.addCollection(newCollectionID); + collections = integrityDAO.getCollections(); + assertTrue(collections.contains(testCollectionid)); + assertTrue(collections.contains(extraCollectionId)); + assertTrue(collections.contains(newCollectionID)); + } } @Test @@ -117,28 +113,27 @@ void testAddCollectionSuccess() { @Tag("integritytest") void testAddExistingCollection() { addDescription("Tests that an existing collectionID cannot be added to the integrity database."); - DatabaseManager dm = new IntegrityDatabaseManager( - settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - DBConnector dbCon = new DBConnector(settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - IntegrityDAO integrityDAO = new DerbyIntegrityDAO(dm.getConnector()); - IntegrityDBTools tool = new IntegrityDBTools(dbCon); - List collections = integrityDAO.getCollections(); - addStep("Extract initial list of collections.", - "The list contains the expected collections."); - assertTrue(collections.contains(testCollectionid)); - assertTrue(collections.contains(extraCollectionId)); - - addStep("Attempt to add the new collection.", - "An exception is thrown, and the collection list is uneffected."); - try { - tool.addCollection(testCollectionid); - fail("addCollection did not fail as expected"); - } catch (IntegrityDBStateException e) { + try (IntegrityDAO integrityDAO = createDAO(); + IntegrityDBTools tool = new IntegrityDBTools(integrityDAO.getDbConnector())) { + List collections = integrityDAO.getCollections(); + addStep("Extract initial list of collections.", + "The list contains the expected collections."); + assertTrue(collections.contains(testCollectionid)); + assertTrue(collections.contains(extraCollectionId)); + + addStep("Attempt to add the new collection.", + "An exception is thrown, and the collection list is uneffected."); + try { + tool.addCollection(testCollectionid); + fail("addCollection did not fail as expected"); + } catch (IntegrityDBStateException e) { + + } + collections = integrityDAO.getCollections(); + assertTrue(collections.contains(testCollectionid)); + assertTrue(collections.contains(extraCollectionId)); } - collections = integrityDAO.getCollections(); - assertTrue(collections.contains(testCollectionid)); - assertTrue(collections.contains(extraCollectionId)); } @Test @@ -148,29 +143,28 @@ void testAddExistingCollection() { void testRemoveNonExistingCollection() { addDescription("Tests that a non existing collection can't be removed from the integrity database."); String nonExistingCollectionID = "non-existing-collectionid"; - DatabaseManager dm = new IntegrityDatabaseManager( - settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - DBConnector dbCon = new DBConnector(settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - IntegrityDAO integrityDAO = new DerbyIntegrityDAO(dm.getConnector()); - IntegrityDBTools tool = new IntegrityDBTools(dbCon); - List collections = integrityDAO.getCollections(); - addStep("Extract initial list of collections.", - "The list contains the expected collections."); - assertTrue(collections.contains(testCollectionid)); - assertTrue(collections.contains(extraCollectionId)); - assertFalse(collections.contains(nonExistingCollectionID)); - - addStep("Attempt to remove the non-existing collection.", - "An exception is thrown, the collection list is uneffected."); - try { - tool.removeCollection(nonExistingCollectionID); - fail("removeCollection did not fail as expected"); - } catch (IntegrityDBStateException e) { + try (IntegrityDAO integrityDAO = createDAO(); + IntegrityDBTools tool = new IntegrityDBTools(integrityDAO.getDbConnector())) { + List collections = integrityDAO.getCollections(); + addStep("Extract initial list of collections.", + "The list contains the expected collections."); + assertTrue(collections.contains(testCollectionid)); + assertTrue(collections.contains(extraCollectionId)); + assertFalse(collections.contains(nonExistingCollectionID)); + + addStep("Attempt to remove the non-existing collection.", + "An exception is thrown, the collection list is uneffected."); + try { + tool.removeCollection(nonExistingCollectionID); + fail("removeCollection did not fail as expected"); + } catch (IntegrityDBStateException e) { + + } + collections = integrityDAO.getCollections(); + assertTrue(collections.contains(testCollectionid)); + assertTrue(collections.contains(extraCollectionId)); } - collections = integrityDAO.getCollections(); - assertTrue(collections.contains(testCollectionid)); - assertTrue(collections.contains(extraCollectionId)); } private void populateCollection(IntegrityDAO dao, String collectionID) { diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDatabaseTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDatabaseTest.java index 6cb75040f..eec45d8be 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDatabaseTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDatabaseTest.java @@ -62,9 +62,7 @@ class IntegrityDatabaseTest extends IntegrityDatabaseTestCase { String TEST_COLLECTIONID; @BeforeEach - @Override public void setup() throws Exception { - super.setup(); TEST_COLLECTIONID = settings.getRepositorySettings().getCollections().getCollection().get(0).getID(); auditManager = Mockito.mock(AuditTrailManager.class); } diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java index f5411dbd9..dfbcacda0 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java @@ -52,15 +52,25 @@ import org.bitrepository.integrityservice.workflow.step.FullUpdateChecksumsStep; import org.bitrepository.integrityservice.workflow.step.HandleMissingChecksumsStep; import org.bitrepository.integrityservice.workflow.step.UpdateChecksumsStep; +import org.bitrepository.pillar.integration.PostgresFixedPortContainer; +import org.bitrepository.service.database.DBConnector; +import org.bitrepository.service.database.DatabaseUtils; import org.bitrepository.service.database.DerbyDatabaseDestroyer; import org.bitrepository.service.exception.WorkflowAbortedException; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; import org.mockito.ArgumentMatchers; import org.mockito.Mockito; +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.postgresql.PostgreSQLContainer; +import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; import javax.xml.datatype.XMLGregorianCalendar; @@ -75,6 +85,8 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@Testcontainers class MissingChecksumTests { private static final String PILLAR_1 = "pillar1"; private static final String PILLAR_2 = "pillar2"; @@ -90,16 +102,29 @@ class MissingChecksumTests { protected IntegrityContributors integrityContributors; IntegrityReporter reporter; - - @BeforeEach - void setup() throws Exception { + @Container + static PostgreSQLContainer postgreSQLContainer = new PostgresFixedPortContainer("postgres:12-alpine") + .withFixedExposedPort(9876, 5432, InternetProtocol.TCP) + .withDatabaseName("integrityDB") + .withUsername("testcontainerUser") + .withPassword("testcontainerPassword") + .withLabel("purpose","integrityDB"); + + @BeforeAll + public void beforeAll() throws Exception { settings = TestSettingsProvider.reloadSettings("IntegrityCheckingUnderTest"); + SettingsUtils.initialize(settings); + IntegrityDatabaseCreator integrityDatabaseCreator = new IntegrityDatabaseCreator(); + integrityDatabaseCreator.createIntegrityDatabase(settings, "sql/postgres/integrityDBCreation.sql", "sql/postgres/integrityDB7to8migration.sql"); - DerbyDatabaseDestroyer.deleteDatabase( - settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); + } + @BeforeEach + public void beforeEach() throws Exception { + + clearDatabase(); IntegrityDatabaseCreator integrityDatabaseCreator = new IntegrityDatabaseCreator(); - integrityDatabaseCreator.createIntegrityDatabase(settings, null); + integrityDatabaseCreator.createIntegrityDatabase(settings, "sql/postgres/integrityDBCreation.sql", "sql/postgres/integrityDB7to8migration.sql"); settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID().clear(); settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID().add(PILLAR_1); @@ -120,6 +145,21 @@ void setup() throws Exception { SettingsUtils.initialize(settings); } + public void clearDatabase() { + DBConnector connector = new DBConnector(settings.getReferenceSettings() + .getIntegrityServiceSettings() + .getIntegrityDatabase()); + DatabaseUtils.executeStatement(connector, "DELETE FROM fileinfo"); + DatabaseUtils.executeStatement(connector, "DELETE FROM collection_progress"); + DatabaseUtils.executeStatement(connector, "DELETE FROM pillarstats"); + DatabaseUtils.executeStatement(connector, "DELETE FROM collectionstats"); + DatabaseUtils.executeStatement(connector, "DELETE FROM stats"); + DatabaseUtils.executeStatement(connector, "DELETE FROM pillar"); + DatabaseUtils.executeStatement(connector, "DELETE FROM collections"); + } + + + @Test @Tag("regressiontest") @Tag("integritytest") diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java index 079a307dd..0a79c49dc 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java @@ -27,20 +27,26 @@ import org.bitrepository.common.settings.Settings; import org.bitrepository.common.settings.TestSettingsProvider; import org.bitrepository.common.utils.CalendarUtils; +import org.bitrepository.common.utils.SettingsUtils; import org.bitrepository.common.utils.TimeUtils; import org.bitrepository.integrityservice.cache.IntegrityDatabaseManager; -import org.bitrepository.integrityservice.cache.database.DerbyIntegrityDAO; import org.bitrepository.integrityservice.cache.database.IntegrityDAO; import org.bitrepository.integrityservice.cache.database.IntegrityDatabaseCreator; +import org.bitrepository.integrityservice.cache.database.PostgresIntegrityDAO; +import org.bitrepository.pillar.integration.PostgresFixedPortContainer; import org.bitrepository.service.database.DBConnector; import org.bitrepository.service.database.DatabaseManager; import org.bitrepository.service.database.DatabaseUtils; -import org.bitrepository.service.database.DerbyDatabaseDestroyer; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.postgresql.PostgreSQLContainer; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; @@ -50,6 +56,8 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@Testcontainers class DatabaseStressTests { private static final String PILLAR_1 = "pillar1"; @@ -61,15 +69,28 @@ class DatabaseStressTests { protected Settings settings; - @BeforeEach - void setup() throws Exception { + @Container + static PostgreSQLContainer postgreSQLContainer = new PostgresFixedPortContainer("postgres:12-alpine") + .withFixedExposedPort(9876, 5432, InternetProtocol.TCP) + .withDatabaseName("integrityDB") + .withUsername("testcontainerUser") + .withPassword("testcontainerPassword") + .withLabel("purpose","integrityDB"); + + @BeforeAll + public void beforeAll() throws Exception { settings = TestSettingsProvider.reloadSettings("IntegrityCheckingUnderTest"); + SettingsUtils.initialize(settings); + IntegrityDatabaseCreator integrityDatabaseCreator = new IntegrityDatabaseCreator(); + integrityDatabaseCreator.createIntegrityDatabase(settings, "sql/postgres/integrityDBCreation.sql", "sql/postgres/integrityDB7to8migration.sql"); - DerbyDatabaseDestroyer.deleteDatabase( - settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); + } + @BeforeEach + public void beforeEach() throws Exception { + clearDatabase(); IntegrityDatabaseCreator integrityDatabaseCreator = new IntegrityDatabaseCreator(); - integrityDatabaseCreator.createIntegrityDatabase(settings, null); + integrityDatabaseCreator.createIntegrityDatabase(settings, "sql/postgres/integrityDBCreation.sql", "sql/postgres/integrityDB7to8migration.sql"); settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID().clear(); settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID().add(PILLAR_1); @@ -79,6 +100,20 @@ void setup() throws Exception { Duration time = DatatypeFactory.newInstance().newDuration(0); settings.getReferenceSettings().getIntegrityServiceSettings().setTimeBeforeMissingFileCheck(time); + SettingsUtils.initialize(settings); + + } + public void clearDatabase() { + DBConnector connector = new DBConnector(settings.getReferenceSettings() + .getIntegrityServiceSettings() + .getIntegrityDatabase()); + DatabaseUtils.executeStatement(connector, "DELETE FROM fileinfo"); + DatabaseUtils.executeStatement(connector, "DELETE FROM collection_progress"); + DatabaseUtils.executeStatement(connector, "DELETE FROM pillarstats"); + DatabaseUtils.executeStatement(connector, "DELETE FROM collectionstats"); + DatabaseUtils.executeStatement(connector, "DELETE FROM stats"); + DatabaseUtils.executeStatement(connector, "DELETE FROM pillar"); + DatabaseUtils.executeStatement(connector, "DELETE FROM collections"); } protected void populateDatabase(IntegrityDAO cache) { @@ -100,13 +135,6 @@ protected void populateDatabase(IntegrityDAO cache) { cache.updateFileIDs(data, PILLAR_4, collectionID); } - @AfterEach - void clearDatabase() { - DBConnector connector = - new DBConnector(settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - DatabaseUtils.executeStatement(connector, "DELETE FROM fileinfo"); - DatabaseUtils.executeStatement(connector, "DELETE FROM pillar"); - } @Test @Tag("stresstest") @@ -137,7 +165,7 @@ void testDatabasePerformance() { private IntegrityDAO createDAO() { DatabaseManager dm = new IntegrityDatabaseManager( settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); - return new DerbyIntegrityDAO(dm.getConnector()); + return new PostgresIntegrityDAO(dm.getConnector()); } } diff --git a/bitrepository-reference-pillar/pom.xml b/bitrepository-reference-pillar/pom.xml index 31f4fd306..3664f9e73 100644 --- a/bitrepository-reference-pillar/pom.xml +++ b/bitrepository-reference-pillar/pom.xml @@ -56,6 +56,21 @@ ${artemis.version} test + + org.testcontainers + testcontainers-junit-jupiter + test + + + org.testcontainers + testcontainers-activemq + test + + + org.testcontainers + testcontainers-postgresql + test + diff --git a/bitrepository-reference-pillar/src/main/resources/sql/postgres/checksumDBCreation.sql b/bitrepository-reference-pillar/src/main/resources/sql/postgres/checksumDBCreation.sql index 342f0c3da..8691cb0b6 100644 --- a/bitrepository-reference-pillar/src/main/resources/sql/postgres/checksumDBCreation.sql +++ b/bitrepository-reference-pillar/src/main/resources/sql/postgres/checksumDBCreation.sql @@ -29,12 +29,12 @@ -- of the tables, especially when upgrading. -- Expected entry count: only those in this script. --**************************************************************************-- -CREATE TABLE tableversions ( +CREATE TABLE IF NOT EXISTS tableversions ( tablename VARCHAR(100) NOT NULL, -- Name of table version INT NOT NULL -- version of table ); -INSERT INTO tableversions ( tablename, version ) VALUES ( 'checksums', 4); +INSERT INTO tableversions ( tablename, version ) VALUES ( 'checksums', 4) ON CONFLICT DO NOTHING; --*************************************************************************-- -- Name: checksums @@ -44,7 +44,7 @@ INSERT INTO tableversions ( tablename, version ) VALUES ( 'checksums', 4); -- Purpose: Keep track of the checksum entries. -- Expected entry count: Very many, one for each file.. --*************************************************************************-- -CREATE TABLE checksums ( +CREATE TABLE IF NOT EXISTS checksums ( guid SERIAL PRIMARY KEY, -- The sequence number and unique key for this table. fileid VARCHAR(255) NOT NULL, -- The id of the file. collectionid VARCHAR(255) NOT NULL, -- The id of the collection. @@ -52,6 +52,6 @@ CREATE TABLE checksums ( calculationdate BIGINT -- The timestamp for the calculation of the checksum. ); -CREATE INDEX fileindex ON checksums ( fileid, collectionid ); -CREATE INDEX filedateindex ON checksums ( fileid, calculationdate ); -CREATE INDEX calculationindex ON checksums ( calculationdate ); +CREATE INDEX IF NOT EXISTS fileindex ON checksums ( fileid, collectionid ); +CREATE INDEX IF NOT EXISTS filedateindex ON checksums ( fileid, calculationdate ); +CREATE INDEX IF NOT EXISTS calculationindex ON checksums ( calculationdate ); diff --git a/bitrepository-reference-pillar/src/main/resources/sql/postgres/correctChecksumDB3to4Migration.sql b/bitrepository-reference-pillar/src/main/resources/sql/postgres/correctChecksumDB3to4Migration.sql index 3bed2d936..e4c43237c 100644 --- a/bitrepository-reference-pillar/src/main/resources/sql/postgres/correctChecksumDB3to4Migration.sql +++ b/bitrepository-reference-pillar/src/main/resources/sql/postgres/correctChecksumDB3to4Migration.sql @@ -20,4 +20,4 @@ -- #L% --- ALTER TABLE checksums RENAME COLUMN calculationdate2 TO calculationdate; -CREATE INDEX calculationindex ON checksums ( calculationdate ); +CREATE INDEX IF NOT EXISTS calculationindex ON checksums ( calculationdate ); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java index 8b49b9494..f76f17ac1 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java @@ -1,85 +1,369 @@ /* * #%L * Bitrepository Protocol - * + * * $Id: DefaultFixturePillarTest.java 452 2011-11-10 09:59:11Z mss $ * $HeadURL: https://sbforge.org/svn/bitrepository/bitrepository-reference/trunk/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java $ * %% * Copyright (C) 2010 - 2011 The State and University Library, The Royal Library and The State Archives, Denmark * %% * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 2.1 of the + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 2.1 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public + * + * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * . * #L% */ package org.bitrepository.pillar; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.core.util.StatusPrinter; +import org.bitrepository.client.conversation.mediator.CollectionBasedConversationMediator; +import org.bitrepository.client.conversation.mediator.ConversationMediator; import org.bitrepository.common.settings.Settings; -import org.bitrepository.protocol.IntegrationTest; +import org.bitrepository.common.settings.TestSettingsProvider; +import org.bitrepository.common.utils.SettingsUtils; +import org.bitrepository.common.utils.TestFileHelper; +import org.bitrepository.pillar.integration.ActiveMQFixedPortContainer; +import org.bitrepository.protocol.MessageReceiverManager; +import org.bitrepository.protocol.activemq.ActiveMQMessageBus; +import org.bitrepository.protocol.bus.LocalActiveMQBroker; import org.bitrepository.protocol.bus.MessageReceiver; +import org.bitrepository.protocol.fileexchange.HttpServerConfiguration; +import org.bitrepository.protocol.http.EmbeddedHttpServer; +import org.bitrepository.protocol.message.ClientTestMessageFactory; +import org.bitrepository.protocol.messagebus.MessageBus; +import org.bitrepository.protocol.messagebus.MessageBusManager; +import org.bitrepository.protocol.security.DummySecurityManager; +import org.bitrepository.protocol.security.SecurityManager; +import org.bitrepository.protocol.utils.TestWatcherExtension; import org.bitrepository.settings.repositorysettings.Collection; +import org.bitrepository.settings.repositorysettings.MessageBusConfiguration; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.TestInfo; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.slf4j.LoggerFactory; +import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.junit.jupiter.Container; + +import javax.jms.JMSException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; /** - * Contains the generic parts for pillar tests integrating to the message bus. + * Contains the generic parts for pillar tests integrating to the message bus. * Mostly copied from DefaultFixtureClientTest... */ -public abstract class DefaultFixturePillarTest extends IntegrationTest { - protected static String pillarDestinationId; +public abstract class DefaultFixturePillarTest { + protected static final String DEFAULT_FILE_ID = ClientTestMessageFactory.FILE_ID_DEFAULT; + public static LocalActiveMQBroker broker; + public static EmbeddedHttpServer server; + public static HttpServerConfiguration httpServerConfiguration; + public static MessageBus messageBus; + + protected static MessageReceiver collectionReceiver; protected String clientDestinationId; protected MessageReceiver clientReceiver; + protected String pillarDestinationId; + + + protected static String alarmDestinationID; + protected static MessageReceiver alarmReceiver; + + protected static SecurityManager securityManager; + + protected static Settings settingsForCUT; + protected static Settings settingsForTestClient; + + protected ConversationMediator conversationMediator; + private static MessageReceiverManager receiverManager; + + @Container + static ActiveMQContainer activemq = new ActiveMQFixedPortContainer("apache/activemq:5.17.7") + .withFixedExposedPort(9999, 61616, InternetProtocol.TCP); + + protected static String defaultDownloadFileAddress; + protected static String defaultUploadFileAddress; + protected static String collectionID; + protected static String defaultFileId; + protected String nonDefaultFileId; + + + protected String testMethodName; + + + @RegisterExtension + TestWatcherExtension testWatcher = new TestWatcherExtension(); + + + @BeforeAll + public static void initializeSuite() { + settingsForTestClient = loadSettings("TestSuiteInitialiser"); + makeUserSpecificSettings(settingsForTestClient, getTopicPostfix()); + httpServerConfiguration = new HttpServerConfiguration(settingsForTestClient.getReferenceSettings() + .getFileExchangeSettings()); + collectionID = settingsForTestClient.getCollections().get(0).getID(); + + securityManager = createSecurityManager(); + defaultFileId = "DefaultFile"; + try { + URL defaultFileUrl = httpServerConfiguration.getURL(TestFileHelper.DEFAULT_FILE_ID); + defaultDownloadFileAddress = defaultFileUrl.toExternalForm(); + defaultUploadFileAddress = defaultFileUrl.toExternalForm() + "-" + "DefaultFile"; + } catch (MalformedURLException e) { + throw new RuntimeException("Never happens"); + } + + startMessageBus(); + } + + @AfterAll + static void tearDown() { + teardownMessageBus(); + teardownHttpServer(); + } + + + @BeforeEach + public void writeLogStatus() { + if (System.getProperty("enableLogStatus", "false").equals("true")) { + LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + StatusPrinter.print(lc); + } + } + + /** + * Initializes the settings. Will postfix the alarm and collection topics with '-${user.name} + */ + @BeforeEach + protected void setupSettings(TestInfo testInfo) { + testMethodName = testInfo.getTestMethod().get().getName(); + + settingsForCUT = loadSettings(getComponentID()); + makeUserSpecificSettings(settingsForCUT, getTopicPostfix()); + + SettingsUtils.initialize(settingsForCUT); + + nonDefaultFileId = TestFileHelper.createUniquePrefix(testMethodName); + + settingsForTestClient = loadSettings(testMethodName); + makeUserSpecificSettings(settingsForTestClient, getTopicPostfix()); + + alarmDestinationID = settingsForCUT.getRepositorySettings().getProtocolSettings().getAlarmDestination(); + pillarDestinationId = settingsForCUT.getContributorDestinationID(); + clientDestinationId = settingsForTestClient.getReceiverDestinationID(); + + messageBus.setCollectionFilter(List.of()); + messageBus.setComponentFilter(List.of()); + receiverManager = new MessageReceiverManager(messageBus); + + alarmReceiver = addReceiver(new MessageReceiver(settingsForCUT.getAlarmDestination())); + collectionReceiver = addReceiver(new MessageReceiver(settingsForCUT.getCollectionDestination())); + clientReceiver = addReceiver(new MessageReceiver(clientDestinationId)); + + receiverManager.startListeners(); + + renewConversationMediator(); + } + + + @AfterEach + public void shutdownConversationMediator() { + if (receiverManager != null) { + receiverManager.stopListeners(); + } + if (testWatcher.isTestSuccessful()) { + afterMethodVerification(); + } + + if (conversationMediator != null) { + conversationMediator.shutdown(); + } + conversationMediator = null; + } + + + @AfterEach + public final void afterMethod() { + if (receiverManager != null) { + receiverManager.stopListeners(); + } + if (testWatcher.isTestSuccessful()) { + afterMethodVerification(); + } + } + + /** + * Indicated whether an embedded http server should be started and used + */ + public static boolean useEmbeddedHttpServer() { + return System.getProperty("useEmbeddedHttpServer", "false").equals("true"); + } /** * Replaces the pillarID references in the settings will test specific pillarIDs. */ - @Override - protected Settings loadSettings(String componentID) { - Settings settings = super.loadSettings(componentID); + protected static Settings loadSettings(String componentID) { + Settings settings = TestSettingsProvider.reloadSettings(componentID); updateSettingsWithSpecificPillarID(settings, componentID); return settings; } - @Override - protected void registerMessageReceivers() { - super.registerMessageReceivers(); - clientDestinationId = settingsForTestClient.getReceiverDestinationID(); - clientReceiver = new MessageReceiver(clientDestinationId); - addReceiver(clientReceiver); + /** + * Hooks up the message bus. + */ + protected static void startMessageBus() { + activemq.start(); + while (!activemq.isRunning()) { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } - pillarDestinationId = settingsForCUT.getContributorDestinationID(); + messageBus = new ActiveMQMessageBus(settingsForTestClient, securityManager); + MessageBusManager.clear(); + MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); + } + + /** + * Shutdown the message bus. + */ + private static void teardownMessageBus() { + MessageBusManager.clear(); + if (messageBus != null) { + try { + messageBus.setComponentFilter(List.of()); + messageBus.setCollectionFilter(List.of()); + + messageBus.close(); + messageBus = null; + } catch (JMSException e) { + + } + } + + if (broker != null) { + try { + broker.stop(); + broker = null; + } catch (Exception e) { + // No reason to pollute the test output with this + } + } } + protected String getPillarID() { return getComponentID(); } - /** The default pillar id in the settings to replace.*/ + /** + * The default pillar id in the settings to replace. + */ private static final String DEFAULT_PILLAR_ID_TO_REPLACE = "Pillar1"; /** - * Sets the given id to be the pillar id, also in the collections. + * Sets the given id to be the pillar id, also in the collections. + * * @param settings The settings. * @param pillarID The new pillar id. */ - private void updateSettingsWithSpecificPillarID(Settings settings, String pillarID) { + private static void updateSettingsWithSpecificPillarID(Settings settings, String pillarID) { settings.getReferenceSettings().getPillarSettings().setPillarID(pillarID); - for(Collection collection : settings.getRepositorySettings().getCollections().getCollection()) { - if(collection.getPillarIDs().getPillarID().remove(DEFAULT_PILLAR_ID_TO_REPLACE)) { + for (Collection collection : settings.getRepositorySettings().getCollections().getCollection()) { + if (collection.getPillarIDs().getPillarID().remove(DEFAULT_PILLAR_ID_TO_REPLACE)) { collection.getPillarIDs().getPillarID().add(pillarID); } } } + /** + * Used for creating a new conversationMediator between tests, and for tests needing to use a differently configured + * mediator. + */ + protected void renewConversationMediator() { + if (conversationMediator != null) { + conversationMediator.shutdown(); + } + conversationMediator = new CollectionBasedConversationMediator(settingsForCUT, securityManager); + } + + + protected static MessageReceiver addReceiver(MessageReceiver receiver) { + receiverManager.addReceiver(receiver); + return receiver; + } + + /** + * May be used by specific tests for general verification when the test method has finished. Will only be run + * if the test has passed (so far). + */ + protected void afterMethodVerification() { + receiverManager.checkNoMessagesRemainInReceivers(); + } + + /** + * Purges all messages from the receivers. + */ + protected void clearReceivers() { + receiverManager.clearMessagesInReceivers(); + } + + + private static void makeUserSpecificSettings(Settings settings, final String topicPostfix) { + settings.getRepositorySettings().getProtocolSettings() + .setCollectionDestination(settings.getCollectionDestination() + topicPostfix); + settings.getRepositorySettings().getProtocolSettings() + .setAlarmDestination(settings.getAlarmDestination() + topicPostfix); + } + + + /** + * Shutdown the embedded http server if any. + */ + protected static void teardownHttpServer() { + if (useEmbeddedHttpServer()) { + server.stop(); + } + } + + /** + * Returns the postfix string to use when accessing user specific topics, which is the mechanism we use in the + * bit repository tests. + * + * @return The string to postfix all topix names with. + */ + protected static String getTopicPostfix() { + return "-" + System.getProperty("user.name"); + } + + protected String getComponentID() { + return getClass().getSimpleName(); + } + + protected String createDate() { + return Long.toString(System.currentTimeMillis()); + } + + protected static SecurityManager createSecurityManager() { + return new DummySecurityManager(); + } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java index f6059f36f..20cc2a73a 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java @@ -41,6 +41,8 @@ import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.service.audit.MockAuditManager; import org.bitrepository.service.contributor.ResponseDispatcher; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import java.io.ByteArrayInputStream; import java.io.File; @@ -73,9 +75,8 @@ public abstract class DefaultPillarTest extends DefaultFixturePillarTest { } } - @Override + @BeforeEach protected void initializeCUT() { - super.initializeCUT(); collectionID = settingsForTestClient.getCollections().get(0).getID(); File fileDir = new File(settingsForCUT.getReferenceSettings().getPillarSettings().getCollectionDirs().get(0).getFileDirs().get(0)); if (fileDir.exists()) { @@ -84,7 +85,7 @@ protected void initializeCUT() { createReferencePillar(); } - @Override + @AfterEach protected void shutdownCUT() { shutdownMediator(); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java index 5fb0a0528..e1da1bb2c 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java @@ -35,6 +35,8 @@ import org.bitrepository.protocol.FileExchange; import org.bitrepository.service.audit.MockAuditManager; import org.bitrepository.service.contributor.ResponseDispatcher; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import static org.bitrepository.common.utils.AllureTestUtils.addFixture; import static org.mockito.Mockito.mock; @@ -52,9 +54,7 @@ public abstract class MockedPillarTest extends DefaultFixturePillarTest { protected static String DEFAULT_MD5_CHECKSUM = "1234cccccccc4321"; protected static String NON_DEFAULT_MD5_CHECKSUM = "1234cccccccc4322"; - @Override protected void initializeCUT() { - super.initializeCUT(); audits = new MockAuditManager(); model = mock(StorageModel.class); fileExchangeMock = mock(FileExchange.class); @@ -62,10 +62,9 @@ protected void initializeCUT() { createPillar(); } - @Override + @AfterEach protected void shutdownCUT() { shutdownMediator(); - super.shutdownCUT(); } /** diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java index 2bb5492d2..5e0c175b9 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java @@ -60,6 +60,11 @@ import org.junit.platform.suite.api.AfterSuite; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.postgresql.PostgreSQLContainer; import java.io.IOException; import java.io.InputStream; @@ -99,17 +104,25 @@ public abstract class PillarIntegrationTest extends IntegrationTest { protected static String irrelevantCollectionId; protected static ClientEventLogger clientEventHandler; private static final Logger log = LoggerFactory.getLogger(PillarIntegrationTest.class); - @Override - protected void initializeCUT() { - super.initializeCUT(); - reloadMessageBus(); - clientProvider = new ClientProvider(securityManager, settingsForTestClient); - pillarFileManager = new PillarFileManager(collectionID, - getPillarID(), settingsForTestClient, clientProvider, httpServerConfiguration); - clientEventHandler = new ClientEventLogger(); - } - /** + @Container + static ActiveMQContainer activemq = new ActiveMQFixedPortContainer("apache/activemq:5.17.7") + .withFixedExposedPort(61616, 61616, InternetProtocol.TCP); + @Container + static PostgreSQLContainer auditTrailDB = new PostgresFixedPortContainer("postgres:12-alpine") + .withFixedExposedPort(65432, 5432, InternetProtocol.TCP) + .withDatabaseName("auditcontributerdb") + .withUsername("testcontainerUser") + .withPassword("testcontainerPassword") + .withLabel("purpose","auditcontributerdb"); + @Container + static PostgreSQLContainer checksumDB = new PostgresFixedPortContainer("postgres:12-alpine") + .withFixedExposedPort(54321, 5432, InternetProtocol.TCP) + .withDatabaseName("checksumdb") + .withUsername("testcontainerUser") + .withPassword("testcontainerPassword") + .withLabel("purpose","checksumdb"); + /** * Initializes the test suite environment. *

* This method is annotated with {@link BeforeAll} and is responsible for: @@ -134,7 +147,6 @@ public void initializeSuite(SuiteInfo testInfo) { setupRealMessageBus(); - startEmbeddedPillar(testInfo); reloadMessageBus(); clientProvider = new ClientProvider(securityManager, settingsForTestClient); @@ -161,6 +173,7 @@ public void shutdownRealMessageBus() { } messageBus = null; } + activemq.stop(); } } @@ -169,13 +182,30 @@ public void shutdownRealMessageBus() { *

* This includes stopping the embedded reference pillar and calling the superclass's shutdown method. */ - @AfterSuite + @AfterAll @Override public void shutdownSuite() { - stopEmbeddedReferencePillar(); + if (embeddedPillar != null) { + embeddedPillar.shutdown(); + auditTrailDB.stop(); + checksumDB.stop(); + } super.shutdownSuite(); } + @Override + protected void initializeCUT() { + super.initializeCUT(); + reloadMessageBus(); + clientProvider = new ClientProvider(securityManager, settingsForTestClient); + pillarFileManager = new PillarFileManager(collectionID, + getPillarID(), + settingsForTestClient, + clientProvider, + httpServerConfiguration); + clientEventHandler = new ClientEventLogger(); + } + /** * Adds context information to the test result in case of failure. *

@@ -191,6 +221,7 @@ public void addFailureContextInfo(TestInfo result) { protected void setupRealMessageBus() { if (!useEmbeddedMessageBus()) { MessageBusManager.clear(); + startContainer(activemq); messageBus = MessageBusManager.getMessageBus(settingsForCUT, securityManager); } else { messageBus = new SimpleMessageBus(); @@ -204,12 +235,18 @@ protected void setupRealMessageBus() { } } - @Override - public void initMessagebus() { - //Shortcircuit this so the messagebus is NOT INITIALISED BEFORE THE CONFIGURATION - //super.initMessagebus(); + private static void startContainer(final GenericContainer container) { + container.start(); + while (!container.isRunning()) { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } } + /** * Will start an embedded reference pillar if specified in the pillar-integration-test.properties.

* The type of pillar (full or checksum) is baed on the test group used, eg. if the group is @@ -220,6 +257,8 @@ public void initMessagebus() { */ protected void startEmbeddedPillar(SuiteInfo testInfo) { if (testConfiguration.useEmbeddedPillar()) { + startContainer(auditTrailDB); + startContainer(checksumDB); SettingsUtils.initialize(settingsForCUT); //TODO the tags are for the tags on the class, not the method // And they are not the tags from Suite, so you will not get the behaivour you want... @@ -231,15 +270,9 @@ protected void startEmbeddedPillar(SuiteInfo testInfo) { } } - protected void stopEmbeddedReferencePillar() { - if (embeddedPillar != null) { - embeddedPillar.shutdown(); - } - } - @Override public boolean useEmbeddedMessageBus() { - return true; + return false; } /** @@ -270,7 +303,9 @@ protected long getOperationTimeout() { protected String getTopicPostfix() { if (testConfiguration.useEmbeddedPillar()) { return "-" + System.getProperty("user.name"); - } else return ""; + } else { + return ""; + } } @Override @@ -283,8 +318,12 @@ protected SecurityManager createSecurityManager() { MessageSigner signer = new BasicMessageSigner(); OperationAuthorizer authorizer = new BasicOperationAuthorizer(permissionStore); return new BasicSecurityManager(settingsForTestClient.getRepositorySettings(), - testConfiguration.getPrivateKeyFileLocation(), - authenticator, signer, authorizer, permissionStore, settingsForTestClient.getComponentID()); + testConfiguration.getPrivateKeyFileLocation(), + authenticator, + signer, + authorizer, + permissionStore, + settingsForTestClient.getComponentID()); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ReferencePillarDerbyDBTestUtils.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ReferencePillarDerbyDBTestUtils.java index 246b5ad61..1bee706d7 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ReferencePillarDerbyDBTestUtils.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ReferencePillarDerbyDBTestUtils.java @@ -5,16 +5,16 @@ * Copyright (C) 2010 - 2012 The State and University Library, The Royal Library and The State Archives, Denmark * %% * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 2.1 of the + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 2.1 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public + * + * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * . * #L% @@ -41,22 +41,48 @@ public ReferencePillarDerbyDBTestUtils(Settings pillarSettings) { /** * Creates the Derby databases needed by the reference pillar, * as specified in the settings. - * + *

* Will also remove existing databases. */ public void createEmptyDatabases() { + + DatabaseSpecifics auditTrailDB = - pillarSettings.getReferenceSettings().getPillarSettings().getAuditTrailContributerDatabase(); - DerbyDatabaseDestroyer.deleteDatabase(auditTrailDB); - PillarAuditTrailDatabaseCreator pillarAuditTrailDatabaseCreator = - new PillarAuditTrailDatabaseCreator(); - pillarAuditTrailDatabaseCreator.createAuditTrailContributorDatabase(pillarSettings, null); + pillarSettings.getReferenceSettings().getPillarSettings().getAuditTrailContributerDatabase(); + var pillarAuditTrailDBCreator = new PillarAuditTrailDatabaseCreator(); + + switch (auditTrailDB.getDriverClass()) { + case "org.postgresql.Driver": { + pillarAuditTrailDBCreator.createAuditTrailContributorDatabase(pillarSettings, + "sql/postgres/auditContributorDBCreation.sql"); + break; + } + case "org.apache.derby.jdbc.EmbeddedDriver": + default: { + DerbyDatabaseDestroyer.deleteDatabase(auditTrailDB); + PillarAuditTrailDatabaseCreator pillarAuditTrailDatabaseCreator = + new PillarAuditTrailDatabaseCreator(); + pillarAuditTrailDatabaseCreator.createAuditTrailContributorDatabase(pillarSettings, + "sql/derby/auditContributorDBCreation.sql"); + break; + } + } DatabaseSpecifics checksumDB = - pillarSettings.getReferenceSettings().getPillarSettings().getChecksumDatabase(); - DerbyDatabaseDestroyer.deleteDatabase(checksumDB); + pillarSettings.getReferenceSettings().getPillarSettings().getChecksumDatabase(); + var checksumDBCreator = new ChecksumDatabaseCreator(); + switch (checksumDB.getDriverClass()) { + case "org.postgresql.Driver": { + checksumDBCreator.createChecksumDatabase(pillarSettings, "sql/postgres/checksumDBCreation.sql"); + break; + } + case "org.apache.derby.jdbc.EmbeddedDriver": + default: { + DerbyDatabaseDestroyer.deleteDatabase(checksumDB); + checksumDBCreator.createChecksumDatabase(pillarSettings, "sql/derby/checksumDBCreation.sql"); + break; + } + } - ChecksumDatabaseCreator checksumDatabaseCreator = new ChecksumDatabaseCreator(); - checksumDatabaseCreator.createChecksumDatabase(pillarSettings, null); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceTest.java index 399345093..21127e14c 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceTest.java @@ -32,7 +32,6 @@ import org.bitrepository.pillar.integration.perf.metrics.MetricAppender; import org.bitrepository.pillar.integration.perf.metrics.Metrics; import org.bitrepository.protocol.MessageContext; -import org.bitrepository.protocol.ProtocolComponentFactory; import org.bitrepository.protocol.bus.MessageReceiver; import org.bitrepository.protocol.messagebus.MessageListener; import org.junit.jupiter.api.Assertions; @@ -56,16 +55,9 @@ private void defineMetricAppenders() { } @Override - protected void addReceiver(MessageReceiver receiver) { + protected MessageReceiver addReceiver(MessageReceiver receiver) { // Do Nothing, test receivers should be used in performance tests. - } - /** - * Avoid using messagebuswrapper. - */ - @Override - protected void setupMessageBus() { - super.setupMessageBus(); - messageBus = ProtocolComponentFactory.getInstance().getMessageBus(settingsForCUT, securityManager); + return receiver; } /** diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileTest.java index 7bb25ea50..0c0e69c3e 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileTest.java @@ -37,6 +37,7 @@ import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileResponse; import org.bitrepository.pillar.MockedPillarTest; import org.bitrepository.pillar.messagefactories.DeleteFileMessageFactory; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -59,7 +60,7 @@ class DeleteFileTest extends MockedPillarTest { private DeleteFileMessageFactory msgFactory; - @Override + @BeforeEach public void initializeCUT() { super.initializeCUT(); msgFactory = new DeleteFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java index 44150a0a9..b0d62ab38 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java @@ -51,6 +51,7 @@ class GeneralMessageHandlingTest extends MockedPillarTest { @BeforeEach void setup() { + super.initializeCUT(); this.requestHandler = new MockRequestHandler(context, model); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsTest.java index 69e861dd5..b256f86a9 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsTest.java @@ -34,6 +34,7 @@ import org.bitrepository.pillar.MockedPillarTest; import org.bitrepository.pillar.messagefactories.GetAuditTrailsMessageFactory; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -49,7 +50,7 @@ class GetAuditTrailsTest extends MockedPillarTest { private GetAuditTrailsMessageFactory msgFactory; - @Override + @BeforeEach public void initializeCUT() { super.initializeCUT(); msgFactory = new GetAuditTrailsMessageFactory(collectionID, settingsForTestClient); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsTest.java index cfacccfd3..5a557b5bd 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsTest.java @@ -42,6 +42,7 @@ import org.bitrepository.pillar.store.checksumdatabase.ChecksumEntry; import org.bitrepository.pillar.store.checksumdatabase.ExtractedChecksumResultSet; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -66,7 +67,7 @@ class GetChecksumsTest extends MockedPillarTest { private GetChecksumsMessageFactory msgFactory; - @Override + @BeforeEach public void initializeCUT() { super.initializeCUT(); msgFactory = new GetChecksumsMessageFactory(collectionID, settingsForTestClient, getPillarID(), diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsTest.java index c0084b099..ed52e8fa4 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsTest.java @@ -41,6 +41,7 @@ import org.bitrepository.pillar.messagefactories.GetFileIDsMessageFactory; import org.bitrepository.pillar.store.checksumdatabase.ExtractedFileIDsResultSet; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -61,7 +62,7 @@ class GetFileIDsTest extends MockedPillarTest { private GetFileIDsMessageFactory msgFactory; - @Override + @BeforeEach public void initializeCUT() { super.initializeCUT(); msgFactory = new GetFileIDsMessageFactory(collectionID, settingsForTestClient, getPillarID(), diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileTest.java index abd8cb773..bc405aeb3 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileTest.java @@ -41,6 +41,7 @@ import org.bitrepository.service.exception.InvalidMessageException; import org.bitrepository.service.exception.RequestHandlerException; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -62,7 +63,7 @@ class GetFileTest extends MockedPillarTest { private GetFileMessageFactory msgFactory; - @Override + @BeforeEach public void initializeCUT() { super.initializeCUT(); msgFactory = new GetFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), pillarDestinationId); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileTest.java index a47bfc39b..b6ed1b489 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileTest.java @@ -41,6 +41,7 @@ import org.bitrepository.pillar.MockedPillarTest; import org.bitrepository.pillar.messagefactories.PutFileMessageFactory; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -60,7 +61,7 @@ class PutFileTest extends MockedPillarTest { PutFileMessageFactory msgFactory; Long FILE_SIZE = 1L; - @Override + @BeforeEach public void initializeCUT() { super.initializeCUT(); msgFactory = new PutFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileTest.java index 930c65d6e..3d38c9995 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileTest.java @@ -42,6 +42,7 @@ import org.bitrepository.pillar.MockedPillarTest; import org.bitrepository.pillar.messagefactories.ReplaceFileMessageFactory; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -64,7 +65,7 @@ class ReplaceFileTest extends MockedPillarTest { ReplaceFileMessageFactory msgFactory; Long FILE_SIZE = 1L; - @Override + @BeforeEach public void initializeCUT() { super.initializeCUT(); msgFactory = new ReplaceFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java index b93238503..8805af8f1 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java @@ -31,6 +31,7 @@ import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.settings.referencesettings.ChecksumPillarFileDownload; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -51,7 +52,7 @@ public class ChecksumPillarModelTest extends DefaultFixturePillarTest { protected static final String EMPTY_MD5_CHECKSUM = "d41d8cd98f00b204e9800998ecf8427e"; - @Override + @BeforeEach protected void initializeCUT() { cache = new MemoryCacheMock(); alarmDispatcher = new AlarmDispatcher(settingsForCUT, messageBus); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java index d5d888ca2..ac3a6868f 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java @@ -34,6 +34,7 @@ import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.service.exception.RequestHandlerException; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -57,7 +58,7 @@ public class FullPillarModelTest extends DefaultFixturePillarTest { "3e7012b39d4f6c503b2a4846fff3f4d0d61fb1a58b81035765f283cfa5f1b93e57ded9e0a946447ff24e5c9be39c8573"; protected static final String EMPTY_MD5_CHECKSUM = "d41d8cd98f00b204e9800998ecf8427e"; - @Override + @BeforeEach protected void initializeCUT() { cache = new MemoryCacheMock(); archives = new CollectionArchiveManager(settingsForCUT); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ArchiveDirectoryTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ArchiveDirectoryTest.java index eb54203a8..a2915f099 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ArchiveDirectoryTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ArchiveDirectoryTest.java @@ -41,7 +41,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; class ArchiveDirectoryTest { - private static final String DIR_NAME = "archive-directory"; + private static final String DIR_NAME = "target/test/archive-directory"; private static final String FILE_DIR_NAME = DIR_NAME + "/fileDir"; private static final String FOLDER_DIR_NAME = DIR_NAME + "/" + ArchiveDirectory.FOLDER_DIR; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveTest.java index 697b4e9eb..e6fe898aa 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveTest.java @@ -33,6 +33,7 @@ import org.bitrepository.pillar.messagehandler.PillarMediator; import org.bitrepository.pillar.store.filearchive.ReferenceArchive; import org.bitrepository.service.audit.MockAuditManager; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -55,19 +56,18 @@ class ReferenceArchiveTest extends DefaultPillarTest { protected MockAuditManager audits; protected MessageHandlerContext context; - private static final String DIR_NAME = "archive-directory"; + private static final String DIR_NAME = "target/test/reference-archive-directory"; private static final String FILE_DIR_NAME = DIR_NAME + "/fileDir"; private static final String EXISTING_FILE = "file1"; private static final String MISSING_FILE = "Missing-filE"; - @Override - protected void shutdownCUT() { + @AfterEach + protected void cleanTestDir() { File archiveDirectory = new File(DIR_NAME); if (archiveDirectory.exists()) { FileUtils.delete(new File(DIR_NAME)); } - super.shutdownCUT(); } @Test diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java index 1bdf5aab4..0ceacac8f 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java @@ -32,13 +32,16 @@ import org.bitrepository.pillar.store.checksumdatabase.ChecksumEntry; import org.bitrepository.pillar.store.checksumdatabase.ExtractedChecksumResultSet; import org.bitrepository.pillar.store.checksumdatabase.ExtractedFileIDsResultSet; -import org.bitrepository.service.database.DerbyDatabaseDestroyer; -import org.bitrepository.settings.referencesettings.DatabaseSpecifics; import org.bitrepository.settings.repositorysettings.PillarIDs; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.postgresql.PostgreSQLContainer; import java.time.Instant; import java.util.List; @@ -46,6 +49,8 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; +@Testcontainers +@Disabled class ChecksumDatabaseTest { private String collectionID; protected Settings settings; @@ -54,17 +59,23 @@ class ChecksumDatabaseTest { private static final String DEFAULT_CHECKSUM = "abcdef0110fedcba"; private static final Instant DEFAULT_DATE = Instant.ofEpochMilli(System.currentTimeMillis()); + @Container + static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine"); + @BeforeEach void setup() throws Exception { loadSettings(); collectionID = settings.getCollections().get(0).getID(); - DatabaseSpecifics checksumDB = - settings.getReferenceSettings().getPillarSettings().getChecksumDatabase(); - DerbyDatabaseDestroyer.deleteDatabase(checksumDB); + + var dbsettings = settings.getReferenceSettings().getPillarSettings().getChecksumDatabase(); + dbsettings.setDatabaseURL(postgreSQLContainer.getJdbcUrl()); + dbsettings.setUsername(postgreSQLContainer.getUsername()); + dbsettings.setPassword(postgreSQLContainer.getPassword()); + dbsettings.setDriverClass(postgreSQLContainer.getDriverClassName()); ChecksumDatabaseCreator checksumDatabaseCreator = new ChecksumDatabaseCreator(); - checksumDatabaseCreator.createChecksumDatabase(settings, null); + checksumDatabaseCreator.createChecksumDatabase(settings, "sql/postgres/checksumDBCreation.sql"); } @Test diff --git a/bitrepository-reference-pillar/src/test/resources/conf/ReferenceSettings.xml b/bitrepository-reference-pillar/src/test/resources/conf/ReferenceSettings.xml index a74e730df..0dfa2a708 100644 --- a/bitrepository-reference-pillar/src/test/resources/conf/ReferenceSettings.xml +++ b/bitrepository-reference-pillar/src/test/resources/conf/ReferenceSettings.xml @@ -46,12 +46,16 @@ P1D PT1H - org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:target/reference1pillar/auditcontributerdb + org.postgresql.Driver + jdbc:postgresql://localhost:65432/auditcontributerdb + testcontainerUser + testcontainerPassword - org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:target/reference1pillar/checksumdb + org.postgresql.Driver + jdbc:postgresql://localhost:54321/checksumdb + testcontainerUser + testcontainerPassword ERROR true diff --git a/bitrepository-reference-pillar/src/test/resources/logback-test.xml b/bitrepository-reference-pillar/src/test/resources/logback-test.xml index 4bc0d7be7..2ddca7379 100644 --- a/bitrepository-reference-pillar/src/test/resources/logback-test.xml +++ b/bitrepository-reference-pillar/src/test/resources/logback-test.xml @@ -10,5 +10,8 @@ + + + diff --git a/bitrepository-service/pom.xml b/bitrepository-service/pom.xml index 082e2abbf..afe6079b0 100644 --- a/bitrepository-service/pom.xml +++ b/bitrepository-service/pom.xml @@ -60,5 +60,15 @@ test-jar test + + org.testcontainers + testcontainers-postgresql + test + + + org.testcontainers + testcontainers-junit-jupiter + test + diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/database/DatabaseCreator.java b/bitrepository-service/src/main/java/org/bitrepository/service/database/DatabaseCreator.java index 2b8c0566a..1bfeb1439 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/database/DatabaseCreator.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/database/DatabaseCreator.java @@ -63,7 +63,7 @@ protected void createDatabase(DatabaseSpecifics databaseSpecifics, String script private static DatabaseSpecifics updateDatabaseSpecificsForDBCreation(DatabaseSpecifics databaseSpecifics) { DatabaseSpecifics newDatabaseSpecifics = new DatabaseSpecifics(); newDatabaseSpecifics.setDriverClass(databaseSpecifics.getDriverClass()); - newDatabaseSpecifics.setDatabaseURL(databaseSpecifics.getDatabaseURL() + ";create=true"); + newDatabaseSpecifics.setDatabaseURL(databaseSpecifics.getDatabaseURL() ); newDatabaseSpecifics.setUsername(databaseSpecifics.getUsername()); newDatabaseSpecifics.setPassword(databaseSpecifics.getPassword()); return newDatabaseSpecifics; diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/database/DatabaseMaintainer.java b/bitrepository-service/src/main/java/org/bitrepository/service/database/DatabaseMaintainer.java index 019381bd1..b0edd2cf1 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/database/DatabaseMaintainer.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/database/DatabaseMaintainer.java @@ -118,7 +118,7 @@ private static Reader getReaderForFile(String filePath) throws FileNotFoundExcep */ protected static Connection getDBConnection(DatabaseSpecifics databaseSpecifics) throws SQLException, ClassNotFoundException { Class.forName(databaseSpecifics.getDriverClass()); - Connection connection = DriverManager.getConnection(databaseSpecifics.getDatabaseURL()); + Connection connection = DriverManager.getConnection(databaseSpecifics.getDatabaseURL(), databaseSpecifics.getUsername(), databaseSpecifics.getPassword()); return connection; } } diff --git a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBCreation.sql b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBCreation.sql index 55bf9a713..912c582bc 100644 --- a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBCreation.sql +++ b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBCreation.sql @@ -29,15 +29,15 @@ -- of the tables, especially when upgrading. -- Expected entry count: only those in this script. --**************************************************************************-- -CREATE TABLE tableversions ( +CREATE TABLE IF NOT EXISTS tableversions ( tablename VARCHAR(100) NOT NULL, -- Name of table version INT NOT NULL -- version of table ); -insert into tableversions ( tablename, version ) values ( 'audit', 5); -insert into tableversions ( tablename, version ) values ( 'file', 2); -insert into tableversions ( tablename, version ) values ( 'actor', 1); -insert into tableversions ( tablename, version ) values ( 'auditcontributordb', 5); +insert into tableversions ( tablename, version ) values ( 'audit', 5) on conflict do nothing; +insert into tableversions ( tablename, version ) values ( 'file', 2) on conflict do nothing; +insert into tableversions ( tablename, version ) values ( 'actor', 1) on conflict do nothing; +insert into tableversions ( tablename, version ) values ( 'auditcontributordb', 5) on conflict do nothing; --*************************************************************************-- -- Name: file @@ -45,13 +45,13 @@ insert into tableversions ( tablename, version ) values ( 'auditcontributordb', -- Purpose: Keeps track of the different file ids. -- Expected entry count: A lot. Though not as many as 'audittrail'. --*************************************************************************-- -CREATE TABLE file ( +CREATE TABLE IF NOT EXISTS file ( file_guid SERIAL PRIMARY KEY, -- The guid for the file id. fileid VARCHAR(255), -- The actual file id. collectionid VARCHAR(255) -- The collection for the file id. ); -CREATE INDEX fileindex ON file ( fileid, collectionid ); +CREATE INDEX IF NOT EXISTS fileindex ON file ( fileid, collectionid ); --*************************************************************************-- -- Name: actor @@ -59,12 +59,12 @@ CREATE INDEX fileindex ON file ( fileid, collectionid ); -- Purpose: Keeps track of the different actors. -- Expected entry count: Some, though not many. --*************************************************************************-- -CREATE TABLE actor ( +CREATE TABLE IF NOT EXISTS actor ( actor_guid SERIAL PRIMARY KEY, -- The guid for the actor. actor_name VARCHAR(255) UNIQUE -- The name of the actor. ); -CREATE INDEX actorindex ON actor ( actor_name ); +CREATE INDEX IF NOT EXISTS actorindex ON actor ( actor_name ); --*************************************************************************-- -- Name: audittrail @@ -74,7 +74,7 @@ CREATE INDEX actorindex ON actor ( actor_name ); -- Purpose: Keeps track of the different audits. -- Expected entry count: Very, very many. --*************************************************************************-- -CREATE TABLE audittrail ( +CREATE TABLE IF NOT EXISTS audittrail ( sequence_number SERIAL PRIMARY KEY, -- The sequence number and unique key for this table. file_guid INT, -- The identifier for the file. Used to lookup in the file table. @@ -92,5 +92,5 @@ CREATE TABLE audittrail ( -- Foreign key constraint for enforcing relationship ); -CREATE INDEX dateindex ON audittrail ( operation_date ); -CREATE INDEX fileidindex ON audittrail ( file_guid ); +CREATE INDEX IF NOT EXISTS dateindex ON audittrail ( operation_date ); +CREATE INDEX IF NOT EXISTS fileidindex ON audittrail ( file_guid ); diff --git a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate2to3.sql b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate2to3.sql index 3bedc403c..25f59a445 100644 --- a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate2to3.sql +++ b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate2to3.sql @@ -21,11 +21,11 @@ --- -- Change the 'information' column from varchar(255) into TEXT -ALTER TABLE audittrail ALTER COLUMN information TYPE TEXT; +ALTER TABLE IF EXISTS audittrail ALTER COLUMN information TYPE TEXT; -- Change the 'audit' column from varchar(255) into TEXT -ALTER TABLE audittrail ALTER COLUMN audit TYPE TEXT; +ALTER TABLE IF EXISTS audittrail ALTER COLUMN audit TYPE TEXT; -- Set the table versions -insert into tableversions ( tablename, version ) values ( 'auditcontributordb', 3); +insert into tableversions ( tablename, version ) values ( 'auditcontributordb', 3) on conflict do nothing; update tableversions set version = 3 where tablename = 'audittrail'; diff --git a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate3to4.sql b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate3to4.sql index 52e9bff95..c3e32cf13 100644 --- a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate3to4.sql +++ b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate3to4.sql @@ -20,9 +20,9 @@ -- #L% --- -ALTER TABLE audittrail ADD operationID VARCHAR(100); -ALTER TABLE audittrail ADD fingerprint VARCHAR(100); +ALTER TABLE IF EXISTS audittrail ADD operationID VARCHAR(100); +ALTER TABLE IF EXISTS audittrail ADD fingerprint VARCHAR(100); -- Set the table versions -insert into tableversions ( tablename, version ) values ( 'auditcontributordb', 4); +insert into tableversions ( tablename, version ) values ( 'auditcontributordb', 4) on conflict do NOTHING; update tableversions set version = 4 where tablename = 'audit'; diff --git a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate4to5.sql b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate4to5.sql index bd77e74ce..4d2076df6 100644 --- a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate4to5.sql +++ b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate4to5.sql @@ -25,16 +25,16 @@ UPDATE tableversions SET version = 5 WHERE tablename = 'audit'; UPDATE tableversions SET version = 5 WHERE tablename = 'auditcontributordb'; -- migrate the audittrail table -ALTER TABLE audittrail ADD COLUMN operation_date2 BIGINT; +ALTER TABLE IF EXISTS audittrail ADD COLUMN operation_date2 BIGINT; -DROP INDEX dateindex; +DROP INDEX IF EXISTS dateindex; UPDATE audittrail SET operation_date2 = (EXTRACT (epoch FROM operation_date AT TIME ZONE (SELECT current_setting('TIMEZONE'))) * 1000); -ALTER TABLE audittrail DROP COLUMN operation_date; +ALTER TABLE IF EXISTS audittrail DROP COLUMN operation_date; -ALTER TABLE audittrail RENAME COLUMN operation_date2 TO operation_date; +ALTER TABLE IF EXISTS audittrail RENAME COLUMN operation_date2 TO operation_date; -ALTER TABLE audittrail ALTER COLUMN operation_date SET NOT NULL; +ALTER TABLE IF EXISTS audittrail ALTER COLUMN operation_date SET NOT NULL; -CREATE INDEX dateindex ON audittrail ( operation_date ); +CREATE INDEX IF NOT EXISTS dateindex ON audittrail ( operation_date ); diff --git a/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java b/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java index 8f39fb488..630f6a1f9 100644 --- a/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java +++ b/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java @@ -21,6 +21,7 @@ */ package org.bitrepository.service.audit; +import net.bytebuddy.utility.dispatcher.JavaDispatcher; import org.bitrepository.bitrepositoryelements.FileAction; import org.bitrepository.common.settings.Settings; import org.bitrepository.common.settings.TestSettingsProvider; @@ -33,6 +34,10 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.testcontainers.containers.BindMode; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.postgresql.PostgreSQLContainer; import java.time.Instant; import java.time.OffsetDateTime; @@ -44,6 +49,7 @@ * Run audit trail contributor database test using Derby. Generates Allure reports. */ +@Testcontainers class AuditTrailContributorDatabaseTest { private Settings settings; private DatabaseSpecifics databaseSpecifics; @@ -57,18 +63,23 @@ class AuditTrailContributorDatabaseTest { private static final String FILE_ID_1 = "FILE-ID-1"; private static final String FILE_ID_2 = "FILE-ID-2"; + @Container + static PostgreSQLContainer postgreSQLContainer = + new PostgreSQLContainer("postgres:12-alpine") + .withClasspathResourceMapping("sql/postgres/auditContributorDBCreation.sql", + "/docker-entrypoint-initdb.d/init.sql", + BindMode.READ_ONLY); + @BeforeEach void setup() throws Exception { settings = TestSettingsProvider.reloadSettings(getClass().getSimpleName()); databaseSpecifics = new DatabaseSpecifics(); - databaseSpecifics.setDriverClass("org.apache.derby.jdbc.EmbeddedDriver"); - databaseSpecifics.setDatabaseURL("jdbc:derby:target/test/auditcontributerdb"); - - DerbyDatabaseDestroyer.deleteDatabase(databaseSpecifics); + databaseSpecifics.setDriverClass(postgreSQLContainer.getDriverClassName()); + databaseSpecifics.setDatabaseURL(postgreSQLContainer.getJdbcUrl()); + databaseSpecifics.setUsername(postgreSQLContainer.getUsername()); + databaseSpecifics.setPassword(postgreSQLContainer.getPassword()); - TestAuditTrailContributorDBCreator dbCreator = new TestAuditTrailContributorDBCreator(); - dbCreator.createAuditTrailContributorDatabase(databaseSpecifics); firstCollectionID = settings.getCollections().get(0).getID(); } @@ -84,64 +95,64 @@ void testAuditTrailDatabaseExtraction() throws Exception { addStep("Populate the database.", "Should be inserted into database."); daba.addAuditEvent(firstCollectionID, FILE_ID_1, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.PUT_FILE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.PUT_FILE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_1, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.CHECKSUM_CALCULATED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.CHECKSUM_CALCULATED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.FILE_MOVED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.FILE_MOVED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.FAILURE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.FAILURE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.INCONSISTENCY, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.INCONSISTENCY, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); addStep("Test extracting all the events", "Should be all 5 events."); AuditTrailDatabaseResults events = daba.getAudits(firstCollectionID, null, null, - null, (Instant) null, (Instant) null, null); + null, (Instant) null, (Instant) null, null); Assertions.assertEquals(5, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events for fileID1", "Should be 2 events."); events = daba.getAudits(firstCollectionID, FILE_ID_1, null, null, (Instant) null, - (Instant) null, null); + (Instant) null, null); Assertions.assertEquals(2, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events for fileID2", "Should be 3 events."); events = daba.getAudits(firstCollectionID, FILE_ID_2, null, null, (Instant) null, - (Instant) null, null); + (Instant) null, null); Assertions.assertEquals(3, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events with the sequence number at least equal to the largest sequence number.", "Should be 1 event."); Long seq = daba.extractLargestSequenceNumber(); events = daba.getAudits(firstCollectionID, null, seq, null, (Instant) null, (Instant) null, - null); + null); Assertions.assertEquals(1, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events for fileID1 with sequence number 2 or more", "Should be 1 event."); events = daba.getAudits(firstCollectionID, FILE_ID_1, seq - 3, null, (Instant) null, - (Instant) null, null); + (Instant) null, null); Assertions.assertEquals(1, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events for fileID1 with at most sequence number 2", "Should be 2 events."); events = daba.getAudits(firstCollectionID, FILE_ID_1, null, seq - 3, (Instant) null, - (Instant) null, null); + (Instant) null, null); Assertions.assertEquals(2, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting at most 3 events", "Should extract 3 events."); events = daba.getAudits(firstCollectionID, null, null, null, (Instant) null, - (Instant) null, 3L); + (Instant) null, 3L); Assertions.assertEquals(3, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting at most 1000 events", "Should extract all 5 events."); events = daba.getAudits(firstCollectionID, null, null, null, (Instant) null, - (Instant) null, 1000L); + (Instant) null, 1000L); Assertions.assertEquals(5, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting from another collection", "Should not extract anything."); String secondCollectionID = settings.getCollections().get(1).getID(); events = daba.getAudits(secondCollectionID, null, null, null, (Instant) null, - (Instant) null, 1000L); + (Instant) null, 1000L); Assertions.assertEquals(0, events.getAuditTrailEvents().getAuditTrailEvent().size()); dm.getConnector().destroy(); @@ -159,47 +170,59 @@ void testAuditTrailDatabaseExtractionOrder() throws Exception { addStep("Populate the database.", "Should be inserted into database."); daba.addAuditEvent(firstCollectionID, FILE_ID_1, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.PUT_FILE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.PUT_FILE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_1, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.CHECKSUM_CALCULATED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.CHECKSUM_CALCULATED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.FILE_MOVED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.FILE_MOVED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.FAILURE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.FAILURE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.INCONSISTENCY, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.INCONSISTENCY, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); addStep("Extract 3 audit-trails", "Should give first 3 audit-trails in order."); AuditTrailDatabaseResults events = - daba.getAudits(firstCollectionID, null, null, null, - null, (Instant) null, 3L); + daba.getAudits(firstCollectionID, null, null, null, + null, (Instant) null, 3L); Assertions.assertEquals(3L, events.getAuditTrailEvents().getAuditTrailEvent().size()); Assertions.assertEquals(FileAction.PUT_FILE, - events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionOnFile()); Assertions.assertEquals(1L, - events.getAuditTrailEvents().getAuditTrailEvent().get(0).getSequenceNumber().longValue()); + events.getAuditTrailEvents() + .getAuditTrailEvent() + .get(0) + .getSequenceNumber() + .longValue()); Assertions.assertEquals(FileAction.CHECKSUM_CALCULATED, - events.getAuditTrailEvents().getAuditTrailEvent().get(1).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(1).getActionOnFile()); Assertions.assertEquals(2L, - events.getAuditTrailEvents().getAuditTrailEvent().get(1).getSequenceNumber().longValue()); + events.getAuditTrailEvents() + .getAuditTrailEvent() + .get(1) + .getSequenceNumber() + .longValue()); Assertions.assertEquals(FileAction.FILE_MOVED, - events.getAuditTrailEvents().getAuditTrailEvent().get(2).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(2).getActionOnFile()); Assertions.assertEquals(3L, - events.getAuditTrailEvents().getAuditTrailEvent().get(2).getSequenceNumber().longValue()); + events.getAuditTrailEvents() + .getAuditTrailEvent() + .get(2) + .getSequenceNumber() + .longValue()); long firstSeq = events.getAuditTrailEvents().getAuditTrailEvent().get(0).getSequenceNumber().longValue(); addStep("Extract 3 audit-trails, with larger seq-number than the first", "Should give audit-trail #2, #3, #4"); events = daba.getAudits(firstCollectionID, null, firstSeq + 1, null, - null, (Instant) null, 3L); + null, (Instant) null, 3L); Assertions.assertEquals(3L, events.getAuditTrailEvents().getAuditTrailEvent().size()); Assertions.assertEquals(FileAction.CHECKSUM_CALCULATED, - events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionOnFile()); Assertions.assertEquals(FileAction.FILE_MOVED, - events.getAuditTrailEvents().getAuditTrailEvent().get(1).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(1).getActionOnFile()); Assertions.assertEquals(FileAction.FAILURE, - events.getAuditTrailEvents().getAuditTrailEvent().get(2).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(2).getActionOnFile()); dm.getConnector().destroy(); } @@ -220,22 +243,22 @@ void contributorDatabaseCorrectTimestampTest() { Assertions.assertEquals(wintertimeUnix, wintertimeTS); daba.addAuditEvent(firstCollectionID, "summertime", summertimeTS, "actor", "info", - "auditTrail", FileAction.OTHER, null, null); + "auditTrail", FileAction.OTHER, null, null); daba.addAuditEvent(firstCollectionID, "wintertime", wintertimeTS, "actor", "info" - , "auditTrail", FileAction.OTHER, null, null); + , "auditTrail", FileAction.OTHER, null, null); AuditTrailDatabaseResults events = - daba.getAudits(firstCollectionID, "summertime", null, null, - null, (Instant) null, 2L); + daba.getAudits(firstCollectionID, "summertime", null, null, + null, (Instant) null, 2L); Assertions.assertEquals(1, events.getAuditTrailEvents().getAuditTrailEvent().size(), events.toString()); Assertions.assertEquals(summertimeUnix, CalendarUtils.convertFromXMLGregorianCalendarToInstant( - events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionDateTime())); + events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionDateTime())); events = daba.getAudits(firstCollectionID, "wintertime", null, null, - null, (Instant) null, 2L); + null, (Instant) null, 2L); Assertions.assertEquals(1, events.getAuditTrailEvents().getAuditTrailEvent().size(), events.toString()); Assertions.assertEquals(wintertimeUnix, CalendarUtils.convertFromXMLGregorianCalendarToInstant( - events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionDateTime())); + events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionDateTime())); } @@ -262,7 +285,7 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with all data.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, auditTrail, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with no collection", "Throws exception"); try { @@ -274,23 +297,23 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with with no file id.", "No failures"); daba.addAuditEvent(firstCollectionID, null, actor, info, auditTrail, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with with no actor.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, null, info, auditTrail, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with with no info.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, null, auditTrail, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with with no audittrail.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, null, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with with no operationID.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, auditTrail, FileAction.FAILURE, null, - certificateID); + certificateID); addStep("Test with with no certificateID.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, auditTrail, FileAction.FAILURE, operationID, null); @@ -306,7 +329,7 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with with very large file id.", "Throws exception"); try { daba.addAuditEvent(firstCollectionID, veryLongString, actor, info, auditTrail, FileAction.FAILURE, - operationID, certificateID); + operationID, certificateID); Assertions.fail("Should throw an exception"); } catch (IllegalStateException e) { // expected @@ -315,7 +338,7 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with with very large actor name.", "Throws exception"); try { daba.addAuditEvent(firstCollectionID, fileID1, veryLongString, info, auditTrail, FileAction.FAILURE, - operationID, certificateID); + operationID, certificateID); Assertions.fail("Should throw an exception"); } catch (IllegalStateException e) { // expected @@ -323,11 +346,11 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with with very large info.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, veryLongString, auditTrail, FileAction.FAILURE, - operationID, certificateID); + operationID, certificateID); addStep("Test with with very large audittrail.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, veryLongString, FileAction.FAILURE, operationID, - certificateID); + certificateID); dm.getConnector().destroy(); } @@ -337,7 +360,7 @@ void testAuditTrailDatabaseIngest() throws Exception { */ private static class TestAuditTrailContributorDBCreator extends DatabaseCreator { - public static final String DEFAULT_AUDIT_TRAIL_DB_SCRIPT = "sql/derby/auditContributorDBCreation.sql"; + public static final String DEFAULT_AUDIT_TRAIL_DB_SCRIPT = "sql/postgres/auditContributorDBCreation.sql"; public void createAuditTrailContributorDatabase(DatabaseSpecifics databaseSpecifics) { createDatabase(databaseSpecifics, DEFAULT_AUDIT_TRAIL_DB_SCRIPT); diff --git a/pom.xml b/pom.xml index f9bbb8ea8..11ada4b0f 100644 --- a/pom.xml +++ b/pom.xml @@ -148,6 +148,42 @@ slf4j-api 2.0.17 + + org.mockito + mockito-bom + 5.23.0 + pom + import + + + org.junit + junit-bom + 5.14.3 + pom + import + + + org.testcontainers + testcontainers-bom + 2.0.5 + pom + import + + + org.apache.cxf + cxf-bom + 3.6.7 + pom + import + + + + com.fasterxml.jackson + jackson-bom + ${jackson.version} + pom + import + @@ -201,19 +237,16 @@ org.junit.jupiter junit-jupiter - 5.13.4 test org.junit.platform junit-platform-suite-engine - 1.13.4 test org.mockito mockito-core - 3.3.3 test @@ -236,7 +269,6 @@ io.qameta.allure allure-junit5 - 2.32.0 test @@ -434,6 +466,7 @@ 3.2.0 + org.apache.maven.plugins maven-surefire-plugin 3.5.4 @@ -510,7 +543,7 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.4.5 + 3.9.0 org.apache.maven.plugins @@ -575,6 +608,13 @@ skip-unit-tests + + org.apache.maven.plugins + maven-surefire-plugin + + true + + From ef34a335d1022500505995b50b4735feb1e95d6d Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Mon, 8 Jun 2026 18:39:40 +0200 Subject: [PATCH 02/22] Attempt at shutting up error logs from successful tests --- .../protocol/IntegrationTest.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java index ed625deda..d460a686e 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java @@ -25,6 +25,9 @@ package org.bitrepository.protocol; import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.Appender; +import ch.qos.logback.core.read.ListAppender; import ch.qos.logback.core.util.StatusPrinter; import jakarta.jms.JMSException; import org.bitrepository.SuiteInfo; @@ -51,10 +54,13 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.RegisterExtension; +import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; import java.util.List; @TestInstance(TestInstance.Lifecycle.PER_CLASS) @@ -64,6 +70,7 @@ public abstract class IntegrationTest { public static EmbeddedHttpServer server; public static HttpServerConfiguration httpServerConfiguration; public static MessageBus messageBus; + protected MessageReceiverManager receiverManager; protected static String alarmDestinationID; protected static MessageReceiver alarmReceiver; @@ -80,6 +87,8 @@ public abstract class IntegrationTest { @RegisterExtension protected TestWatcherExtension testWatcher = new TestWatcherExtension(); protected String testMethodName; + private ListAppender appender; + private static List> appenders; @BeforeEach public void print(TestInfo testInfo) throws Exception { @@ -146,6 +155,7 @@ public void beforeMethod(TestInfo testInfo) { messageBus.setComponentFilter(List.of()); initializeCUT(); receiverManager.startListeners(); + appender = hookLogger(); } @@ -153,7 +163,8 @@ protected void initializeCUT() { } @AfterEach - public final void afterMethod() { + public final void afterMethod(TestInfo testInfo) { + if (receiverManager != null) { receiverManager.stopListeners(); } @@ -161,6 +172,37 @@ public final void afterMethod() { afterMethodVerification(); } shutdownCUT(); + + //Log the stuff if the test is not successfull + if (!testWatcher.isTestSuccessful()){ + for (ILoggingEvent iLoggingEvent : appender.list) { + for (Appender iLoggingEventAppender : appenders) { + iLoggingEventAppender.doAppend(iLoggingEvent); + } + } + } + } + + private static ListAppender hookLogger() { + // get Logback Logger + var fooLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); + + // create and start a ListAppender + ListAppender listAppender = new ListAppender<>(); + listAppender.start(); + + + //Save the appenders and detach them + appenders = new ArrayList<>(); + Iterator> iterator= fooLogger.iteratorForAppenders(); + while (iterator.hasNext()) { + Appender next = iterator.next(); + fooLogger.detachAppender(next); + appenders.add(next); + } + // add the appender to the logger + fooLogger.addAppender(listAppender); + return listAppender; } /** From 2f538c009c5d0aaa0cab9f388532292f71dea1d4 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Mon, 8 Jun 2026 18:52:40 +0200 Subject: [PATCH 03/22] Integration tests marked as such --- ...rmHandlerTest.java => AlarmHandlerIT.java} | 2 +- ....java => AuditTrailClientComponentIT.java} | 4 +- ...ava => GetChecksumsClientComponentIT.java} | 4 +- ...Test.java => AbstractGetFileClientIT.java} | 4 +- ...est.java => GetFileClientComponentIT.java} | 2 +- ....java => GetFileIDsClientComponentIT.java} | 4 +- ...t.java => GetStatusClientComponentIT.java} | 4 +- ...ltClientTest.java => DefaultClientIT.java} | 2 +- ...tTest.java => DefaultFixtureClientIT.java} | 2 +- ...eFileCmdTest.java => DeleteFileCmdIT.java} | 4 +- ...umsCmdTest.java => GetChecksumsCmdIT.java} | 4 +- ...{GetFileCmdTest.java => GetFileCmdIT.java} | 4 +- ...leIDsCmdTest.java => GetFileIDsCmdIT.java} | 4 +- ...{PutFileCmdTest.java => PutFileCmdIT.java} | 4 +- ...FileCmdTest.java => ReplaceFileCmdIT.java} | 4 +- ...st.java => ChecksumExtractionUtilsIT.java} | 4 +- ....java => DeleteFileClientComponentIT.java} | 4 +- ...est.java => PutFileClientComponentIT.java} | 4 +- ...java => ReplaceFileClientComponentIT.java} | 4 +- ...BusTest.java => ActiveMQMessageBusIT.java} | 42 +++++++++---------- ...eBusTest.java => GeneralMessageBusIT.java} | 2 +- ...erterTest.java => IntegrityAlerterIT.java} | 2 +- ...est.java => BasicIntegrityReporterIT.java} | 2 +- ...AlerterTest.java => MonitorAlerterIT.java} | 2 +- ...tionTest.java => PillarIntegrationIT.java} | 5 +-- ...ava => DefaultPillarIdentificationIT.java} | 2 +- ...est.java => DefaultPillarMessagingIT.java} | 2 +- ...est.java => DefaultPillarOperationIT.java} | 2 +- ...unctionTest.java => PillarFunctionIT.java} | 4 +- .../func/deletefile/DeleteFileRequestIT.java | 4 +- .../IdentifyPillarsForDeleteFileIT.java | 4 +- ...tTrailsTest.java => GetAuditTrailsIT.java} | 4 +- ...etChecksumTest.java => GetChecksumIT.java} | 4 +- ...QueryTest.java => GetChecksumQueryIT.java} | 4 +- .../IdentifyPillarsForGetChecksumsIT.java | 4 +- .../func/getfile/GetFileRequestIT.java | 4 +- .../getfile/IdentifyPillarsForGetFileIT.java | 4 +- ...{GetFileIDsTest.java => GetFileIDsIT.java} | 4 +- ...sQueryTest.java => GetFileIDsQueryIT.java} | 4 +- .../IdentifyPillarsForGetFileIDsIT.java | 4 +- .../func/getstatus/GetStatusRequestIT.java | 4 +- .../IdentifyContributorsForGetStatusIT.java | 4 +- .../multicollection/MultipleCollectionIT.java | 4 +- .../putfile/IdentifyPillarsForPutFileIT.java | 4 +- .../func/putfile/PutFileRequestIT.java | 4 +- .../IdentifyPillarsForReplaceFileIT.java | 4 +- .../replacefile/ReplaceFileRequestIT.java | 4 +- .../perf/GetAuditTrailsFileStressIT.java | 2 +- .../integration/perf/GetFileStressIT.java | 2 +- ...anceTest.java => PillarPerformanceIT.java} | 4 +- .../integration/perf/PutFileStressIT.java | 2 +- ...ontributorTest.java => ContributorIT.java} | 2 +- pom.xml | 12 ++++++ 53 files changed, 120 insertions(+), 109 deletions(-) rename bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/handler/{AlarmHandlerTest.java => AlarmHandlerIT.java} (98%) rename bitrepository-client/src/test/java/org/bitrepository/access/getaudittrails/{AuditTrailClientComponentTest.java => AuditTrailClientComponentIT.java} (99%) rename bitrepository-client/src/test/java/org/bitrepository/access/getchecksums/{GetChecksumsClientComponentTest.java => GetChecksumsClientComponentIT.java} (99%) rename bitrepository-client/src/test/java/org/bitrepository/access/getfile/{AbstractGetFileClientTest.java => AbstractGetFileClientIT.java} (93%) rename bitrepository-client/src/test/java/org/bitrepository/access/getfile/{GetFileClientComponentTest.java => GetFileClientComponentIT.java} (99%) rename bitrepository-client/src/test/java/org/bitrepository/access/getfileids/{GetFileIDsClientComponentTest.java => GetFileIDsClientComponentIT.java} (99%) rename bitrepository-client/src/test/java/org/bitrepository/access/getstatus/{GetStatusClientComponentTest.java => GetStatusClientComponentIT.java} (98%) rename bitrepository-client/src/test/java/org/bitrepository/client/{DefaultClientTest.java => DefaultClientIT.java} (99%) rename bitrepository-client/src/test/java/org/bitrepository/client/{DefaultFixtureClientTest.java => DefaultFixtureClientIT.java} (98%) rename bitrepository-client/src/test/java/org/bitrepository/commandline/{DeleteFileCmdTest.java => DeleteFileCmdIT.java} (97%) rename bitrepository-client/src/test/java/org/bitrepository/commandline/{GetChecksumsCmdTest.java => GetChecksumsCmdIT.java} (97%) rename bitrepository-client/src/test/java/org/bitrepository/commandline/{GetFileCmdTest.java => GetFileCmdIT.java} (96%) rename bitrepository-client/src/test/java/org/bitrepository/commandline/{GetFileIDsCmdTest.java => GetFileIDsCmdIT.java} (96%) rename bitrepository-client/src/test/java/org/bitrepository/commandline/{PutFileCmdTest.java => PutFileCmdIT.java} (98%) rename bitrepository-client/src/test/java/org/bitrepository/commandline/{ReplaceFileCmdTest.java => ReplaceFileCmdIT.java} (98%) rename bitrepository-client/src/test/java/org/bitrepository/commandline/utils/{ChecksumExtractionUtilsTest.java => ChecksumExtractionUtilsIT.java} (97%) rename bitrepository-client/src/test/java/org/bitrepository/modify/deletefile/{DeleteFileClientComponentTest.java => DeleteFileClientComponentIT.java} (99%) rename bitrepository-client/src/test/java/org/bitrepository/modify/putfile/{PutFileClientComponentTest.java => PutFileClientComponentIT.java} (99%) rename bitrepository-client/src/test/java/org/bitrepository/modify/replacefile/{ReplaceFileClientComponentTest.java => ReplaceFileClientComponentIT.java} (99%) rename bitrepository-core/src/test/java/org/bitrepository/protocol/bus/{ActiveMQMessageBusTest.java => ActiveMQMessageBusIT.java} (97%) rename bitrepository-core/src/test/java/org/bitrepository/protocol/bus/{GeneralMessageBusTest.java => GeneralMessageBusIT.java} (99%) rename bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/{IntegrityAlerterTest.java => IntegrityAlerterIT.java} (98%) rename bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/reports/{BasicIntegrityReporterTest.java => BasicIntegrityReporterIT.java} (99%) rename bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/alarm/{MonitorAlerterTest.java => MonitorAlerterIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/{PillarIntegrationTest.java => PillarIntegrationIT.java} (99%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/{DefaultPillarIdentificationTest.java => DefaultPillarIdentificationIT.java} (96%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/{DefaultPillarMessagingTest.java => DefaultPillarMessagingIT.java} (97%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/{DefaultPillarOperationTest.java => DefaultPillarOperationIT.java} (93%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/{PillarFunctionTest.java => PillarFunctionIT.java} (94%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getaudittrails/{GetAuditTrailsTest.java => GetAuditTrailsIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/{GetChecksumTest.java => GetChecksumIT.java} (97%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/{GetChecksumQueryTest.java => GetChecksumQueryIT.java} (99%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/{GetFileIDsTest.java => GetFileIDsIT.java} (99%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/{GetFileIDsQueryTest.java => GetFileIDsQueryIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/{PillarPerformanceTest.java => PillarPerformanceIT.java} (98%) rename bitrepository-service/src/test/java/org/bitrepository/service/{ContributorTest.java => ContributorIT.java} (97%) diff --git a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/handler/AlarmHandlerTest.java b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/handler/AlarmHandlerIT.java similarity index 98% rename from bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/handler/AlarmHandlerTest.java rename to bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/handler/AlarmHandlerIT.java index f773926cf..db1482c9e 100644 --- a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/handler/AlarmHandlerTest.java +++ b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/handler/AlarmHandlerIT.java @@ -36,7 +36,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; @ExtendWith(SuiteInfoParameterResolver.class) -public class AlarmHandlerTest extends IntegrationTest { +public class AlarmHandlerIT extends IntegrationTest { @Test @Tag("regressiontest") public void alarmMediatorTest() throws Exception { diff --git a/bitrepository-client/src/test/java/org/bitrepository/access/getaudittrails/AuditTrailClientComponentTest.java b/bitrepository-client/src/test/java/org/bitrepository/access/getaudittrails/AuditTrailClientComponentIT.java similarity index 99% rename from bitrepository-client/src/test/java/org/bitrepository/access/getaudittrails/AuditTrailClientComponentTest.java rename to bitrepository-client/src/test/java/org/bitrepository/access/getaudittrails/AuditTrailClientComponentIT.java index c3a174be2..1f1cee0c6 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/access/getaudittrails/AuditTrailClientComponentTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/access/getaudittrails/AuditTrailClientComponentIT.java @@ -37,7 +37,7 @@ import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetAuditTrailsResponse; import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; -import org.bitrepository.client.DefaultClientTest; +import org.bitrepository.client.DefaultClientIT; import org.bitrepository.client.TestEventHandler; import org.bitrepository.client.eventhandler.OperationEvent; import org.bitrepository.common.utils.CalendarUtils; @@ -61,7 +61,7 @@ * Test the default AuditTrailClient. */ @ExtendWith(SuiteInfoParameterResolver.class) -class AuditTrailClientComponentTest extends DefaultClientTest { +class AuditTrailClientComponentIT extends DefaultClientIT { private GetAuditTrailsMessageFactory testMessageFactory; private DatatypeFactory datatypeFactory; diff --git a/bitrepository-client/src/test/java/org/bitrepository/access/getchecksums/GetChecksumsClientComponentTest.java b/bitrepository-client/src/test/java/org/bitrepository/access/getchecksums/GetChecksumsClientComponentIT.java similarity index 99% rename from bitrepository-client/src/test/java/org/bitrepository/access/getchecksums/GetChecksumsClientComponentTest.java rename to bitrepository-client/src/test/java/org/bitrepository/access/getchecksums/GetChecksumsClientComponentIT.java index 2427c8517..372a7444b 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/access/getchecksums/GetChecksumsClientComponentTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/access/getchecksums/GetChecksumsClientComponentIT.java @@ -53,7 +53,7 @@ import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetChecksumsResponse; import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; -import org.bitrepository.client.DefaultClientTest; +import org.bitrepository.client.DefaultClientIT; import org.bitrepository.client.TestEventHandler; import org.bitrepository.client.eventhandler.OperationEvent; import org.bitrepository.common.utils.CalendarUtils; @@ -78,7 +78,7 @@ * Test class for the 'GetFileClient'. */ @ExtendWith(SuiteInfoParameterResolver.class) -class GetChecksumsClientComponentTest extends DefaultClientTest { +class GetChecksumsClientComponentIT extends DefaultClientIT { private TestGetChecksumsMessageFactory messageFactory; private static final ChecksumSpecTYPE DEFAULT_CHECKSUM_SPECS; diff --git a/bitrepository-client/src/test/java/org/bitrepository/access/getfile/AbstractGetFileClientTest.java b/bitrepository-client/src/test/java/org/bitrepository/access/getfile/AbstractGetFileClientIT.java similarity index 93% rename from bitrepository-client/src/test/java/org/bitrepository/access/getfile/AbstractGetFileClientTest.java rename to bitrepository-client/src/test/java/org/bitrepository/access/getfile/AbstractGetFileClientIT.java index af7d6c969..7d634667b 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/access/getfile/AbstractGetFileClientTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/access/getfile/AbstractGetFileClientIT.java @@ -39,7 +39,7 @@ */ package org.bitrepository.access.getfile; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.junit.jupiter.api.BeforeEach; @@ -47,7 +47,7 @@ * Runs the DefaultFixtureClient test using a TestGetFileMessageFactory as the message factory. */ -public abstract class AbstractGetFileClientTest extends DefaultFixtureClientTest { +public abstract class AbstractGetFileClientIT extends DefaultFixtureClientIT { protected TestGetFileMessageFactory messageFactory; @BeforeEach diff --git a/bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentTest.java b/bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentIT.java similarity index 99% rename from bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentTest.java rename to bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentIT.java index 8f9fbd0e2..96ffc4fe5 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentIT.java @@ -56,7 +56,7 @@ * Test class for the 'GetFileClient'. */ @ExtendWith(SuiteInfoParameterResolver.class) -class GetFileClientComponentTest extends AbstractGetFileClientTest { +class GetFileClientComponentIT extends AbstractGetFileClientIT { private static final FilePart NO_FILE_PART = null; diff --git a/bitrepository-client/src/test/java/org/bitrepository/access/getfileids/GetFileIDsClientComponentTest.java b/bitrepository-client/src/test/java/org/bitrepository/access/getfileids/GetFileIDsClientComponentIT.java similarity index 99% rename from bitrepository-client/src/test/java/org/bitrepository/access/getfileids/GetFileIDsClientComponentTest.java rename to bitrepository-client/src/test/java/org/bitrepository/access/getfileids/GetFileIDsClientComponentIT.java index 845049ae4..cf3c01792 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/access/getfileids/GetFileIDsClientComponentTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/access/getfileids/GetFileIDsClientComponentIT.java @@ -43,7 +43,7 @@ import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileIDsResponse; import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; -import org.bitrepository.client.DefaultClientTest; +import org.bitrepository.client.DefaultClientIT; import org.bitrepository.client.TestEventHandler; import org.bitrepository.client.eventhandler.OperationEvent; import org.bitrepository.common.utils.CalendarUtils; @@ -68,7 +68,7 @@ */ @ExtendWith(AllureJunit5.class) @ExtendWith(SuiteInfoParameterResolver.class) -class GetFileIDsClientComponentTest extends DefaultClientTest { +class GetFileIDsClientComponentIT extends DefaultClientIT { private TestGetFileIDsMessageFactory messageFactory; diff --git a/bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentTest.java b/bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentIT.java similarity index 98% rename from bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentTest.java rename to bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentIT.java index 847ef5277..dabc53e7b 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentIT.java @@ -31,7 +31,7 @@ import org.bitrepository.bitrepositorymessages.GetStatusRequest; import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetStatusRequest; import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetStatusResponse; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.bitrepository.client.TestEventHandler; import org.bitrepository.client.eventhandler.OperationEvent; import org.bitrepository.common.utils.CalendarUtils; @@ -50,7 +50,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -public class GetStatusClientComponentTest extends DefaultFixtureClientTest { +public class GetStatusClientComponentIT extends DefaultFixtureClientIT { private TestGetStatusMessageFactory testMessageFactory; diff --git a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientTest.java b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientIT.java similarity index 99% rename from bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientTest.java rename to bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientIT.java index 0bf9eb302..086df5af1 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientIT.java @@ -41,7 +41,7 @@ * Tests the general client functionality. A number of abstract methods with needs to be implemented with concrete * functionality by the test for the specific operations. */ -public abstract class DefaultClientTest extends DefaultFixtureClientTest { +public abstract class DefaultClientIT extends DefaultFixtureClientIT { protected final TestEventHandler testEventHandler = new TestEventHandler(); private DatatypeFactory datatypeFactory; diff --git a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientTest.java b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java similarity index 98% rename from bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientTest.java rename to bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java index 0504b8515..e81666aaa 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java @@ -46,7 +46,7 @@ */ @Testcontainers @TestInstance(TestInstance.Lifecycle.PER_CLASS) -public abstract class DefaultFixtureClientTest extends IntegrationTest { +public abstract class DefaultFixtureClientIT extends IntegrationTest { protected static final String DEFAULT_FILE_ID = ClientTestMessageFactory.FILE_ID_DEFAULT; protected static MessageReceiver collectionReceiver; diff --git a/bitrepository-client/src/test/java/org/bitrepository/commandline/DeleteFileCmdTest.java b/bitrepository-client/src/test/java/org/bitrepository/commandline/DeleteFileCmdIT.java similarity index 97% rename from bitrepository-client/src/test/java/org/bitrepository/commandline/DeleteFileCmdTest.java rename to bitrepository-client/src/test/java/org/bitrepository/commandline/DeleteFileCmdIT.java index 324be49f7..73acfd626 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/commandline/DeleteFileCmdTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/commandline/DeleteFileCmdIT.java @@ -22,7 +22,7 @@ package org.bitrepository.commandline; import org.bitrepository.SuiteInfoParameterResolver; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -35,7 +35,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @ExtendWith(SuiteInfoParameterResolver.class) -public class DeleteFileCmdTest extends DefaultFixtureClientTest { +public class DeleteFileCmdIT extends DefaultFixtureClientIT { private static final String SETTINGS_DIR = "settings/xml/bitrepository-devel"; private static final String KEY_FILE = "KeyFile"; private static final String DEFAULT_CHECKSUM = "0123456789"; diff --git a/bitrepository-client/src/test/java/org/bitrepository/commandline/GetChecksumsCmdTest.java b/bitrepository-client/src/test/java/org/bitrepository/commandline/GetChecksumsCmdIT.java similarity index 97% rename from bitrepository-client/src/test/java/org/bitrepository/commandline/GetChecksumsCmdTest.java rename to bitrepository-client/src/test/java/org/bitrepository/commandline/GetChecksumsCmdIT.java index ac5181d84..e29728999 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/commandline/GetChecksumsCmdTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/commandline/GetChecksumsCmdIT.java @@ -22,7 +22,7 @@ package org.bitrepository.commandline; import org.bitrepository.SuiteInfoParameterResolver; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -34,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @ExtendWith(SuiteInfoParameterResolver.class) -public class GetChecksumsCmdTest extends DefaultFixtureClientTest { +public class GetChecksumsCmdIT extends DefaultFixtureClientIT { private static final String SETTINGS_DIR = "settings/xml/bitrepository-devel"; private static final String KEY_FILE = "KeyFile"; diff --git a/bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileCmdTest.java b/bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileCmdIT.java similarity index 96% rename from bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileCmdTest.java rename to bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileCmdIT.java index bdf8f6f11..15d21d77f 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileCmdTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileCmdIT.java @@ -22,7 +22,7 @@ package org.bitrepository.commandline; import org.bitrepository.SuiteInfoParameterResolver; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -34,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @ExtendWith(SuiteInfoParameterResolver.class) -public class GetFileCmdTest extends DefaultFixtureClientTest { +public class GetFileCmdIT extends DefaultFixtureClientIT { private static final String SETTINGS_DIR = "settings/xml/bitrepository-devel"; private static final String KEY_FILE = "KeyFile"; diff --git a/bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileIDsCmdTest.java b/bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileIDsCmdIT.java similarity index 96% rename from bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileIDsCmdTest.java rename to bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileIDsCmdIT.java index e97b32900..674975fc7 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileIDsCmdTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/commandline/GetFileIDsCmdIT.java @@ -22,7 +22,7 @@ package org.bitrepository.commandline; import org.bitrepository.SuiteInfoParameterResolver; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -34,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @ExtendWith(SuiteInfoParameterResolver.class) -public class GetFileIDsCmdTest extends DefaultFixtureClientTest { +public class GetFileIDsCmdIT extends DefaultFixtureClientIT { private static final String SETTINGS_DIR = "settings/xml/bitrepository-devel"; private static final String KEY_FILE = "KeyFile"; diff --git a/bitrepository-client/src/test/java/org/bitrepository/commandline/PutFileCmdTest.java b/bitrepository-client/src/test/java/org/bitrepository/commandline/PutFileCmdIT.java similarity index 98% rename from bitrepository-client/src/test/java/org/bitrepository/commandline/PutFileCmdTest.java rename to bitrepository-client/src/test/java/org/bitrepository/commandline/PutFileCmdIT.java index 61b096f02..2160cbcc7 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/commandline/PutFileCmdTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/commandline/PutFileCmdIT.java @@ -22,7 +22,7 @@ package org.bitrepository.commandline; import org.bitrepository.SuiteInfoParameterResolver; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -32,7 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @ExtendWith(SuiteInfoParameterResolver.class) -public class PutFileCmdTest extends DefaultFixtureClientTest { +public class PutFileCmdIT extends DefaultFixtureClientIT { private static final String SETTINGS_DIR = "settings/xml/bitrepository-devel"; private static final String KEY_FILE = "KeyFile"; private static final String DEFAULT_CHECKSUM = "0123456789"; diff --git a/bitrepository-client/src/test/java/org/bitrepository/commandline/ReplaceFileCmdTest.java b/bitrepository-client/src/test/java/org/bitrepository/commandline/ReplaceFileCmdIT.java similarity index 98% rename from bitrepository-client/src/test/java/org/bitrepository/commandline/ReplaceFileCmdTest.java rename to bitrepository-client/src/test/java/org/bitrepository/commandline/ReplaceFileCmdIT.java index c3c29642b..0d4cc4c5a 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/commandline/ReplaceFileCmdTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/commandline/ReplaceFileCmdIT.java @@ -22,7 +22,7 @@ package org.bitrepository.commandline; import org.bitrepository.SuiteInfoParameterResolver; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -35,7 +35,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @ExtendWith(SuiteInfoParameterResolver.class) -public class ReplaceFileCmdTest extends DefaultFixtureClientTest { +public class ReplaceFileCmdIT extends DefaultFixtureClientIT { private static final String SETTINGS_DIR = "settings/xml/bitrepository-devel"; private static final String KEY_FILE = "KeyFile"; private static final String DEFAULT_CHECKSUM = "0123456789"; diff --git a/bitrepository-client/src/test/java/org/bitrepository/commandline/utils/ChecksumExtractionUtilsTest.java b/bitrepository-client/src/test/java/org/bitrepository/commandline/utils/ChecksumExtractionUtilsIT.java similarity index 97% rename from bitrepository-client/src/test/java/org/bitrepository/commandline/utils/ChecksumExtractionUtilsTest.java rename to bitrepository-client/src/test/java/org/bitrepository/commandline/utils/ChecksumExtractionUtilsIT.java index 76b8153c5..428aa4680 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/commandline/utils/ChecksumExtractionUtilsTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/commandline/utils/ChecksumExtractionUtilsIT.java @@ -24,7 +24,7 @@ import org.apache.commons.cli.Option; import org.bitrepository.SuiteInfoParameterResolver; import org.bitrepository.bitrepositoryelements.ChecksumType; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.bitrepository.commandline.Constants; import org.bitrepository.commandline.output.OutputHandler; import org.junit.jupiter.api.Assertions; @@ -37,7 +37,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; @ExtendWith(SuiteInfoParameterResolver.class) -public class ChecksumExtractionUtilsTest extends DefaultFixtureClientTest { +public class ChecksumExtractionUtilsIT extends DefaultFixtureClientIT { CommandLineArgumentsHandler cmdHandler; OutputHandler output; diff --git a/bitrepository-client/src/test/java/org/bitrepository/modify/deletefile/DeleteFileClientComponentTest.java b/bitrepository-client/src/test/java/org/bitrepository/modify/deletefile/DeleteFileClientComponentIT.java similarity index 99% rename from bitrepository-client/src/test/java/org/bitrepository/modify/deletefile/DeleteFileClientComponentTest.java rename to bitrepository-client/src/test/java/org/bitrepository/modify/deletefile/DeleteFileClientComponentIT.java index a6f3d47b6..87a62a93a 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/modify/deletefile/DeleteFileClientComponentTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/modify/deletefile/DeleteFileClientComponentIT.java @@ -35,7 +35,7 @@ import org.bitrepository.bitrepositorymessages.DeleteFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileResponse; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.bitrepository.client.TestEventHandler; import org.bitrepository.client.eventhandler.OperationEvent.OperationEventType; import org.bitrepository.common.utils.Base16Utils; @@ -55,7 +55,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -public class DeleteFileClientComponentTest extends DefaultFixtureClientTest { +public class DeleteFileClientComponentIT extends DefaultFixtureClientIT { private TestDeleteFileMessageFactory messageFactory; private DatatypeFactory datatypeFactory; diff --git a/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentTest.java b/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java similarity index 99% rename from bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentTest.java rename to bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java index 23cab5c1c..ae654aa05 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java @@ -40,7 +40,7 @@ import org.bitrepository.bitrepositorymessages.PutFileFinalResponse; import org.bitrepository.bitrepositorymessages.PutFileProgressResponse; import org.bitrepository.bitrepositorymessages.PutFileRequest; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.bitrepository.client.TestEventHandler; import org.bitrepository.client.eventhandler.OperationEvent.OperationEventType; import org.bitrepository.common.utils.Base16Utils; @@ -63,7 +63,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -public class PutFileClientComponentTest extends DefaultFixtureClientTest { +public class PutFileClientComponentIT extends DefaultFixtureClientIT { private TestPutFileMessageFactory messageFactory; private DatatypeFactory datatypeFactory; diff --git a/bitrepository-client/src/test/java/org/bitrepository/modify/replacefile/ReplaceFileClientComponentTest.java b/bitrepository-client/src/test/java/org/bitrepository/modify/replacefile/ReplaceFileClientComponentIT.java similarity index 99% rename from bitrepository-client/src/test/java/org/bitrepository/modify/replacefile/ReplaceFileClientComponentTest.java rename to bitrepository-client/src/test/java/org/bitrepository/modify/replacefile/ReplaceFileClientComponentIT.java index 3c3cf32b3..eb2ea77b7 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/modify/replacefile/ReplaceFileClientComponentTest.java +++ b/bitrepository-client/src/test/java/org/bitrepository/modify/replacefile/ReplaceFileClientComponentIT.java @@ -27,7 +27,7 @@ import org.bitrepository.SuiteInfoParameterResolver; import org.bitrepository.bitrepositoryelements.*; import org.bitrepository.bitrepositorymessages.*; -import org.bitrepository.client.DefaultFixtureClientTest; +import org.bitrepository.client.DefaultFixtureClientIT; import org.bitrepository.client.TestEventHandler; import org.bitrepository.client.eventhandler.OperationEvent; import org.bitrepository.client.eventhandler.OperationEvent.OperationEventType; @@ -50,7 +50,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -public class ReplaceFileClientComponentTest extends DefaultFixtureClientTest { +public class ReplaceFileClientComponentIT extends DefaultFixtureClientIT { private ChecksumSpecTYPE DEFAULT_CHECKSUM_SPEC; private ChecksumDataForFileTYPE DEFAULT_OLD_CHECKSUM_DATA; private ChecksumDataForFileTYPE DEFAULT_NEW_CHECKSUM_DATA; diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java similarity index 97% rename from bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java rename to bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java index cc946dc83..7804850a4 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java @@ -52,13 +52,13 @@ * MessageBus based on TestContainers. Regression tests utilized that uses Allure to generate reports. */ @Testcontainers -class ActiveMQMessageBusTest extends GeneralMessageBusTest { - +class ActiveMQMessageBusIT extends GeneralMessageBusIT { + @Container static ActiveMQContainer activemqContainer = new ActiveMQContainer("apache/activemq:5.17.7"); - + private MessageBusConfiguration messageBusConfig; - + @Override protected void setupMessageBus() { activemqContainer.start(); @@ -69,25 +69,25 @@ protected void setupMessageBus() { throw new RuntimeException(e); } } - + messageBusConfig = new MessageBusConfiguration(); messageBusConfig.setURL(activemqContainer.getBrokerUrl()); messageBusConfig.setName(activemqContainer.getContainerName()); settingsForTestClient.getRepositorySettings() .getProtocolSettings() .setMessageBusConfiguration(messageBusConfig); - - + + messageBus = new ActiveMQMessageBus(settingsForTestClient, securityManager); MessageBusManager.clear(); MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); } - + @Override public boolean useEmbeddedMessageBus() { return false; } - + @Test @Tag("regressiontest") final void collectionFilterTest() throws Exception { @@ -98,7 +98,7 @@ final void collectionFilterTest() throws Exception { String myCollectionID = "MyCollection"; messageBus.setCollectionFilter(List.of(myCollectionID)); String collectionDestination = settingsForTestClient.getCollectionDestination(); - + try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig, securityManager)) { var identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); identifyRequest.setCollectionID(myCollectionID); @@ -108,16 +108,16 @@ final void collectionFilterTest() throws Exception { identifyRequest.getReplyTo(), null, identifyRequest.getCorrelationID()); - + rawMessagebus.sendMessage(collectionDestination, msg); collectionReceiver.waitForMessage(identifyRequest.getClass()); - + addStep("Send an identify request with the 'Collection' header property set to my collection", "Verify that the request bus accepts this message."); msg.setStringProperty(ActiveMQMessageBus.COLLECTION_ID_KEY, myCollectionID); rawMessagebus.sendMessage(collectionDestination, msg); collectionReceiver.waitForMessage(identifyRequest.getClass()); - + addStep("Send an invalid message with the 'Receiver' header property set to another specific component", "Verify that the message bus ignores this before parsing the message."); msg.setStringProperty(ActiveMQMessageBus.COLLECTION_ID_KEY, "OtherCollection"); @@ -125,7 +125,7 @@ final void collectionFilterTest() throws Exception { collectionReceiver.checkNoMessageIsReceived(identifyRequest.getClass()); } } - + @Test @Tag("regressiontest") final void sendMessageToSpecificComponentTest() throws Exception { @@ -151,7 +151,7 @@ public void onMessage(Message message) { Assertions.assertEquals(receiverID, receivedMessage.getStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY)); } } - + @Test @Tag("regressiontest") final void toFilterTest() throws Exception { @@ -161,10 +161,10 @@ final void toFilterTest() throws Exception { "Verify that the identify request bus accepts this identify request."); messageBus.setComponentFilter(Arrays.asList(settingsForTestClient.getComponentID())); String collectionDestination = settingsForTestClient.getCollectionDestination(); - + try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig, securityManager)) { var identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); - + identifyRequest.setDestination(collectionDestination); jakarta.jms.Message msg = rawMessagebus.createMessage(identifyRequest); rawMessagebus.addHeader(msg, @@ -174,19 +174,19 @@ final void toFilterTest() throws Exception { identifyRequest.getCorrelationID()); rawMessagebus.sendMessage(collectionDestination, msg); var msg1 = collectionReceiver.waitForMessage(identifyRequest.getClass()); - + addStep("Send an identify request with the 'To' header property set to this component", "Verify that the identify request bus accepts this identify request."); msg.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, settingsForTestClient.getComponentID()); rawMessagebus.sendMessage(collectionDestination, msg); var msg2 = collectionReceiver.waitForMessage(identifyRequest.getClass()); - + addStep("Send an invalid identify request with the 'To' header property set to another specific component", "Verify that the identify request bus ignores this before parsing the identify request."); msg.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); rawMessagebus.sendMessage(collectionDestination, msg); collectionReceiver.checkNoMessageIsReceived(identifyRequest.getClass()); - + addStep("Send an identify response with the 'To' header property set to another component", "Verify that the message bus accepts this message."); var identifyResponse = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileResponse.class); @@ -200,7 +200,7 @@ final void toFilterTest() throws Exception { response.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); rawMessagebus.sendMessage(collectionDestination, response); var msg3 = collectionReceiver.waitForMessage(identifyResponse.getClass()); - + addStep("Send an non-identify request with the 'To' header property set to another component", "Verify that the message bus accepts this message."); var deleteFileRequest = ExampleMessageFactory.createMessage(DeleteFileRequest.class); diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java similarity index 99% rename from bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusTest.java rename to bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java index a16827f1e..76cac3396 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java @@ -53,7 +53,7 @@ */ @ExtendWith(SuiteInfoParameterResolver.class) @TestInstance(TestInstance.Lifecycle.PER_CLASS) -abstract class GeneralMessageBusTest extends IntegrationTest { +abstract class GeneralMessageBusIT extends IntegrationTest { /** * The time to wait when sending a message before it definitely should * have been consumed by a listener. diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityAlerterTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityAlerterIT.java similarity index 98% rename from bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityAlerterTest.java rename to bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityAlerterIT.java index 526a23753..a5f49fa52 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityAlerterTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityAlerterIT.java @@ -36,7 +36,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -public class IntegrityAlerterTest extends IntegrationTest { +public class IntegrityAlerterIT extends IntegrationTest { @Test @Tag("regressiontest") @Tag("integritytest") diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/reports/BasicIntegrityReporterTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/reports/BasicIntegrityReporterIT.java similarity index 99% rename from bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/reports/BasicIntegrityReporterTest.java rename to bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/reports/BasicIntegrityReporterIT.java index 8aaac8070..24854928b 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/reports/BasicIntegrityReporterTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/reports/BasicIntegrityReporterIT.java @@ -35,7 +35,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -public class BasicIntegrityReporterTest extends IntegrationTest { +public class BasicIntegrityReporterIT extends IntegrationTest { private static final String REPORT_SUMMARY_START = "The following integrity issues were found:\n"; @Test diff --git a/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/alarm/MonitorAlerterTest.java b/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/alarm/MonitorAlerterIT.java similarity index 98% rename from bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/alarm/MonitorAlerterTest.java rename to bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/alarm/MonitorAlerterIT.java index 8210501c5..179c21b0a 100644 --- a/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/alarm/MonitorAlerterTest.java +++ b/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/alarm/MonitorAlerterIT.java @@ -45,7 +45,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -public class MonitorAlerterTest extends IntegrationTest { +public class MonitorAlerterIT extends IntegrationTest { @Test @Tag("regressiontest") diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java similarity index 99% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java index 5e0c175b9..0e2c64429 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java @@ -57,7 +57,6 @@ import org.junit.jupiter.api.TestInfo; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.platform.suite.api.AfterSuite; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testcontainers.activemq.ActiveMQContainer; @@ -80,7 +79,7 @@ */ @TestInstance(TestInstance.Lifecycle.PER_CLASS) @ExtendWith(SuiteInfoParameterResolver.class) -public abstract class PillarIntegrationTest extends IntegrationTest { +public abstract class PillarIntegrationIT extends IntegrationTest { /** * The path to the directory containing the integration test configuration files */ @@ -103,7 +102,7 @@ public abstract class PillarIntegrationTest extends IntegrationTest { protected static String nonDefaultCollectionId; protected static String irrelevantCollectionId; protected static ClientEventLogger clientEventHandler; - private static final Logger log = LoggerFactory.getLogger(PillarIntegrationTest.class); + private static final Logger log = LoggerFactory.getLogger(PillarIntegrationIT.class); @Container static ActiveMQContainer activemq = new ActiveMQFixedPortContainer("apache/activemq:5.17.7") diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java similarity index 96% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java index e144e35e2..5d58bae5f 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java @@ -33,7 +33,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -public abstract class DefaultPillarIdentificationTest extends DefaultPillarMessagingTest { +public abstract class DefaultPillarIdentificationIT extends DefaultPillarMessagingIT { @Test @Tag(PillarTestGroups.FULL_PILLAR_TEST) diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java similarity index 97% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java index e5f7a1068..b719aeeae 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java @@ -38,7 +38,7 @@ * implement the abstract methods and add any operation specific tests. The test will not work for Alarm and status * messaging, as it is assumed that operations are collection scope. */ -public abstract class DefaultPillarMessagingTest extends PillarFunctionTest { +public abstract class DefaultPillarMessagingIT extends PillarFunctionIT { @Test @Tag(PillarTestGroups.FULL_PILLAR_TEST) diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationIT.java similarity index 93% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationIT.java index 63a4d834e..e1d32fda9 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationIT.java @@ -26,7 +26,7 @@ import org.bitrepository.bitrepositorymessages.MessageResponse; import org.junit.jupiter.api.Assertions; -public abstract class DefaultPillarOperationTest extends DefaultPillarMessagingTest { +public abstract class DefaultPillarOperationIT extends DefaultPillarMessagingIT { protected void assertPositivResponseIsReceived() { MessageResponse receivedResponse = receiveResponse(); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java similarity index 94% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java index 1cc90df5f..5945d4f80 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java @@ -21,7 +21,7 @@ */ package org.bitrepository.pillar.integration.func; -import org.bitrepository.pillar.integration.PillarIntegrationTest; +import org.bitrepository.pillar.integration.PillarIntegrationIT; import org.bitrepository.pillar.messagefactories.PutFileMessageFactory; import org.bitrepository.protocol.bus.MessageReceiver; import org.junit.jupiter.api.BeforeEach; @@ -34,7 +34,7 @@ * The parent class for pillar acceptance tests. The tests can be run in a multi pillar collection has the tests will * ignore responses from other pillars. */ -public abstract class PillarFunctionTest extends PillarIntegrationTest { +public abstract class PillarFunctionIT extends PillarIntegrationIT { protected static final Long DEFAULT_FILE_SIZE = 10L; protected PutFileMessageFactory msgFactory; protected String testSpecificFileID; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java index 9ec15f4b8..5c99f52bf 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java @@ -35,7 +35,7 @@ import org.bitrepository.common.utils.Base16Utils; import org.bitrepository.common.utils.TestFileHelper; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.DefaultPillarOperationTest; +import org.bitrepository.pillar.integration.func.DefaultPillarOperationIT; import org.bitrepository.pillar.messagefactories.DeleteFileMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -47,7 +47,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class DeleteFileRequestIT extends DefaultPillarOperationTest { +class DeleteFileRequestIT extends DefaultPillarOperationIT { protected DeleteFileMessageFactory msgFactory; private String pillarDestination; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java index 4e0f1f85f..7d97022a9 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java @@ -27,7 +27,7 @@ import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationTest; +import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationIT; import org.bitrepository.pillar.messagefactories.DeleteFileMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -38,7 +38,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class IdentifyPillarsForDeleteFileIT extends DefaultPillarIdentificationTest { +class IdentifyPillarsForDeleteFileIT extends DefaultPillarIdentificationIT { protected DeleteFileMessageFactory msgFactory; @BeforeEach diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getaudittrails/GetAuditTrailsTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getaudittrails/GetAuditTrailsIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getaudittrails/GetAuditTrailsTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getaudittrails/GetAuditTrailsIT.java index 3255baabf..afb121bbe 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getaudittrails/GetAuditTrailsTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getaudittrails/GetAuditTrailsIT.java @@ -26,7 +26,7 @@ import org.bitrepository.bitrepositoryelements.AuditTrailEvent; import org.bitrepository.client.exceptions.NegativeResponseException; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.PillarFunctionTest; +import org.bitrepository.pillar.integration.func.PillarFunctionIT; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -40,7 +40,7 @@ @Tag(PillarTestGroups.FULL_PILLAR_TEST) @Tag(PillarTestGroups.CHECKSUM_PILLAR_TEST) -class GetAuditTrailsTest extends PillarFunctionTest { +class GetAuditTrailsIT extends PillarFunctionIT { @Override protected void initializeCUT() { super.initializeCUT(); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumIT.java similarity index 97% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumIT.java index 516cce89d..bc474c26d 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumIT.java @@ -28,7 +28,7 @@ import org.bitrepository.client.exceptions.NegativeResponseException; import org.bitrepository.common.utils.Base16Utils; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.PillarFunctionTest; +import org.bitrepository.pillar.integration.func.PillarFunctionIT; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; @@ -41,7 +41,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @TestInstance(TestInstance.Lifecycle.PER_CLASS) -class GetChecksumTest extends PillarFunctionTest { +class GetChecksumIT extends PillarFunctionIT { @BeforeAll void retrieveFirst2Files() { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryIT.java similarity index 99% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryIT.java index 95036e038..081c0d023 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryIT.java @@ -25,7 +25,7 @@ import org.bitrepository.bitrepositoryelements.ChecksumDataForChecksumSpecTYPE; import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.PillarFunctionTest; +import org.bitrepository.pillar.integration.func.PillarFunctionIT; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -40,7 +40,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addFixture; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class GetChecksumQueryTest extends PillarFunctionTest { +class GetChecksumQueryIT extends PillarFunctionIT { @Test @Tag(PillarTestGroups.FULL_PILLAR_TEST) diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java index 28f724bbf..b661bfbac 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java @@ -31,7 +31,7 @@ import org.bitrepository.common.utils.ChecksumUtils; import org.bitrepository.common.utils.FileIDsUtils; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationTest; +import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationIT; import org.bitrepository.pillar.messagefactories.GetChecksumsMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -41,7 +41,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class IdentifyPillarsForGetChecksumsIT extends DefaultPillarIdentificationTest { +class IdentifyPillarsForGetChecksumsIT extends DefaultPillarIdentificationIT { protected GetChecksumsMessageFactory msgFactory; @BeforeEach diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java index c5b841298..93cfa7798 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java @@ -11,7 +11,7 @@ import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.common.utils.TestFileHelper; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.PillarFunctionTest; +import org.bitrepository.pillar.integration.func.PillarFunctionIT; import org.bitrepository.pillar.messagefactories.GetFileMessageFactory; import org.bitrepository.protocol.FileExchange; import org.bitrepository.protocol.ProtocolComponentFactory; @@ -35,7 +35,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class GetFileRequestIT extends PillarFunctionTest { +class GetFileRequestIT extends PillarFunctionIT { private final Logger log = LoggerFactory.getLogger(this.getClass()); protected GetFileMessageFactory msgFactory; protected URL testFileURL = null; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/IdentifyPillarsForGetFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/IdentifyPillarsForGetFileIT.java index 94403fc65..7909c52c8 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/IdentifyPillarsForGetFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/IdentifyPillarsForGetFileIT.java @@ -25,7 +25,7 @@ import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileResponse; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.PillarFunctionTest; +import org.bitrepository.pillar.integration.func.PillarFunctionIT; import org.bitrepository.pillar.messagefactories.GetFileMessageFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; @@ -35,7 +35,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; import static org.junit.jupiter.api.Assertions.assertEquals; -class IdentifyPillarsForGetFileIT extends PillarFunctionTest { +class IdentifyPillarsForGetFileIT extends PillarFunctionIT { protected GetFileMessageFactory msgFactory; @BeforeEach diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java similarity index 99% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java index 6874d0324..95da203b8 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java @@ -32,7 +32,7 @@ import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.common.utils.FileIDsUtils; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.DefaultPillarOperationTest; +import org.bitrepository.pillar.integration.func.DefaultPillarOperationIT; import org.bitrepository.pillar.messagefactories.GetFileIDsMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -46,7 +46,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -class GetFileIDsTest extends DefaultPillarOperationTest { +class GetFileIDsIT extends DefaultPillarOperationIT { protected GetFileIDsMessageFactory msgFactory; private String pillarDestination; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java index dc8536aad..b7565dfa6 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java @@ -26,7 +26,7 @@ import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.integration.func.Assert; -import org.bitrepository.pillar.integration.func.PillarFunctionTest; +import org.bitrepository.pillar.integration.func.PillarFunctionIT; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -41,7 +41,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addFixture; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class GetFileIDsQueryTest extends PillarFunctionTest { +class GetFileIDsQueryIT extends PillarFunctionIT { @Test @Tag(PillarTestGroups.FULL_PILLAR_TEST) diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/IdentifyPillarsForGetFileIDsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/IdentifyPillarsForGetFileIDsIT.java index 5640c41f9..7f3c36cf7 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/IdentifyPillarsForGetFileIDsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/IdentifyPillarsForGetFileIDsIT.java @@ -29,7 +29,7 @@ import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.common.utils.FileIDsUtils; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationTest; +import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationIT; import org.bitrepository.pillar.messagefactories.GetFileIDsMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -39,7 +39,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class IdentifyPillarsForGetFileIDsIT extends DefaultPillarIdentificationTest { +class IdentifyPillarsForGetFileIDsIT extends DefaultPillarIdentificationIT { protected GetFileIDsMessageFactory msgFactory; @BeforeEach diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getstatus/GetStatusRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getstatus/GetStatusRequestIT.java index 2555db86e..c1ec48bf0 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getstatus/GetStatusRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getstatus/GetStatusRequestIT.java @@ -29,7 +29,7 @@ import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetStatusRequest; import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetStatusResponse; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.PillarFunctionTest; +import org.bitrepository.pillar.integration.func.PillarFunctionIT; import org.bitrepository.pillar.messagefactories.GetStatusMessageFactory; import org.bitrepository.settings.referencesettings.AlarmLevel; import org.junit.jupiter.api.Assertions; @@ -40,7 +40,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class GetStatusRequestIT extends PillarFunctionTest { +class GetStatusRequestIT extends PillarFunctionIT { protected GetStatusMessageFactory msgFactory; private String pillarDestination; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getstatus/IdentifyContributorsForGetStatusIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getstatus/IdentifyContributorsForGetStatusIT.java index e2a900ae7..956e3cfad 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getstatus/IdentifyContributorsForGetStatusIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getstatus/IdentifyContributorsForGetStatusIT.java @@ -26,7 +26,7 @@ import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetStatusRequest; import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetStatusResponse; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.PillarFunctionTest; +import org.bitrepository.pillar.integration.func.PillarFunctionIT; import org.bitrepository.pillar.messagefactories.GetStatusMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -36,7 +36,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class IdentifyContributorsForGetStatusIT extends PillarFunctionTest { +class IdentifyContributorsForGetStatusIT extends PillarFunctionIT { protected GetStatusMessageFactory msgFactory; @BeforeEach diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/multicollection/MultipleCollectionIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/multicollection/MultipleCollectionIT.java index 301130b06..27715a5c5 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/multicollection/MultipleCollectionIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/multicollection/MultipleCollectionIT.java @@ -25,7 +25,7 @@ import org.bitrepository.client.exceptions.NegativeResponseException; import org.bitrepository.common.utils.TestFileHelper; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.PillarIntegrationTest; +import org.bitrepository.pillar.integration.PillarIntegrationIT; import org.bitrepository.protocol.bus.MessageReceiver; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; @@ -38,7 +38,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -public class MultipleCollectionIT extends PillarIntegrationTest { +public class MultipleCollectionIT extends PillarIntegrationIT { /** * Used for receiving responses from the pillar */ diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java index 7249c4fba..9dfdc07d2 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java @@ -27,7 +27,7 @@ import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationTest; +import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationIT; import org.bitrepository.pillar.messagefactories.PutFileMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -37,7 +37,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class IdentifyPillarsForPutFileIT extends DefaultPillarIdentificationTest { +class IdentifyPillarsForPutFileIT extends DefaultPillarIdentificationIT { protected PutFileMessageFactory msgFactory; @BeforeEach diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java index f3cd4417b..f3a32fecb 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java @@ -32,7 +32,7 @@ import org.bitrepository.common.utils.ChecksumUtils; import org.bitrepository.common.utils.TestFileHelper; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.DefaultPillarOperationTest; +import org.bitrepository.pillar.integration.func.DefaultPillarOperationIT; import org.bitrepository.pillar.messagefactories.PutFileMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -44,7 +44,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class PutFileRequestIT extends DefaultPillarOperationTest { +class PutFileRequestIT extends DefaultPillarOperationIT { protected PutFileMessageFactory msgFactory; private String pillarDestination; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/IdentifyPillarsForReplaceFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/IdentifyPillarsForReplaceFileIT.java index 56626ff22..656d87ac1 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/IdentifyPillarsForReplaceFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/IdentifyPillarsForReplaceFileIT.java @@ -27,7 +27,7 @@ import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationTest; +import org.bitrepository.pillar.integration.func.DefaultPillarIdentificationIT; import org.bitrepository.pillar.messagefactories.ReplaceFileMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -37,7 +37,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class IdentifyPillarsForReplaceFileIT extends DefaultPillarIdentificationTest { +class IdentifyPillarsForReplaceFileIT extends DefaultPillarIdentificationIT { protected ReplaceFileMessageFactory msgFactory; @BeforeEach diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java index 6372f216f..b0437d513 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java @@ -31,7 +31,7 @@ import org.bitrepository.bitrepositorymessages.ReplaceFileRequest; import org.bitrepository.common.utils.TestFileHelper; import org.bitrepository.pillar.PillarTestGroups; -import org.bitrepository.pillar.integration.func.DefaultPillarOperationTest; +import org.bitrepository.pillar.integration.func.DefaultPillarOperationIT; import org.bitrepository.pillar.messagefactories.ReplaceFileMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -43,7 +43,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class ReplaceFileRequestIT extends DefaultPillarOperationTest { +class ReplaceFileRequestIT extends DefaultPillarOperationIT { protected ReplaceFileMessageFactory msgFactory; private String pillarDestination; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java index 75f2ed4e8..3ad61a7e1 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java @@ -39,7 +39,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class GetAuditTrailsFileStressIT extends PillarPerformanceTest { +class GetAuditTrailsFileStressIT extends PillarPerformanceIT { protected AuditTrailClient auditTrailClient; PutFileClient putClient; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java index 58747b4b7..0a0f534bd 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java @@ -46,7 +46,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -public class GetFileStressIT extends PillarPerformanceTest { +public class GetFileStressIT extends PillarPerformanceIT { public static final String FOLDER_NAME = "src/test/resources"; protected GetFileClient getFileClient; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java index 21127e14c..48887528e 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java @@ -27,7 +27,7 @@ import org.bitrepository.client.eventhandler.EventHandler; import org.bitrepository.client.eventhandler.OperationEvent; import org.bitrepository.common.utils.TimeUtils; -import org.bitrepository.pillar.integration.PillarIntegrationTest; +import org.bitrepository.pillar.integration.PillarIntegrationIT; import org.bitrepository.pillar.integration.perf.metrics.ConsoleMetricAppender; import org.bitrepository.pillar.integration.perf.metrics.MetricAppender; import org.bitrepository.pillar.integration.perf.metrics.Metrics; @@ -43,7 +43,7 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; -public class PillarPerformanceTest extends PillarIntegrationTest { +public class PillarPerformanceIT extends PillarIntegrationIT { protected final Logger log = LoggerFactory.getLogger(getClass()); protected List metricAppenders = new LinkedList<>(); protected String[] existingFiles; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PutFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PutFileStressIT.java index d66e7a070..00b87f91e 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PutFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PutFileStressIT.java @@ -38,7 +38,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; -class PutFileStressIT extends PillarPerformanceTest { +class PutFileStressIT extends PillarPerformanceIT { protected PutFileClient putClient; @BeforeEach diff --git a/bitrepository-service/src/test/java/org/bitrepository/service/ContributorTest.java b/bitrepository-service/src/test/java/org/bitrepository/service/ContributorIT.java similarity index 97% rename from bitrepository-service/src/test/java/org/bitrepository/service/ContributorTest.java rename to bitrepository-service/src/test/java/org/bitrepository/service/ContributorIT.java index 95cd95f1e..4bee9b130 100644 --- a/bitrepository-service/src/test/java/org/bitrepository/service/ContributorTest.java +++ b/bitrepository-service/src/test/java/org/bitrepository/service/ContributorIT.java @@ -28,7 +28,7 @@ /** * Contains the general functionality for creating contributor tests. */ -public abstract class ContributorTest extends IntegrationTest { +public abstract class ContributorIT extends IntegrationTest { protected static final String DEFAULT_FILE_ID = ClientTestMessageFactory.FILE_ID_DEFAULT; protected static String clientDestinationId; diff --git a/pom.xml b/pom.xml index 11ada4b0f..2cc0f6fdb 100644 --- a/pom.xml +++ b/pom.xml @@ -339,6 +339,18 @@ random + + org.apache.maven.plugins + maven-failsafe-plugin + + + + integration-test + verify + + + + maven-jar-plugin From 2a5cfe65ef0d9fb671381a3a3bdf223b41854ff5 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Tue, 9 Jun 2026 10:25:38 +0200 Subject: [PATCH 04/22] Fixed problem with test-jar not being build before assembly --- pom.xml | 50 +++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/pom.xml b/pom.xml index 2cc0f6fdb..f36cc1df1 100644 --- a/pom.xml +++ b/pom.xml @@ -351,28 +351,6 @@ - - maven-jar-plugin - - - - true - true - - - value - - - true - - - - - test-jar - - - - maven-release-plugin @@ -475,7 +453,33 @@ maven-jar-plugin - 3.2.0 + 3.5.0 + + + + true + true + + + value + + + true + + + + + test-jar + + + prepare-package + + + false + + + org.apache.maven.plugins From 9118804db79f23e87a5b7af0463a3769be92e57f Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Tue, 9 Jun 2026 12:01:18 +0200 Subject: [PATCH 05/22] Tests made working with minimal changes --- bitrepository-reference-pillar/pom.xml | 31 +- .../GetFileIDsRequestHandler.java | 4 +- .../BitrepositoryPerformanceTestSuite.java | 16 - ...itoryPillarCommonIntegrationTestSuite.java | 19 + .../pillar/DefaultFixturePillarIT.java | 138 +++++++ .../pillar/DefaultFixturePillarTest.java | 369 ------------------ ...ltPillarTest.java => DefaultPillarIT.java} | 2 +- .../{MediatorTest.java => MediatorIT.java} | 2 +- ...kedPillarTest.java => MockedPillarIT.java} | 5 +- .../pillar/PillarTestGroups.java | 1 + .../BitrepositoryChecksumPillarTestSuite.java | 9 +- .../BitrepositoryPerformanceTestSuite.java | 23 ++ .../BitrepositoryPillarTestSuite.java | 9 +- .../perf/GetAuditTrailsFileStressIT.java | 5 +- .../integration/perf/GetFileStressIT.java | 10 +- .../integration/perf/PillarPerformanceIT.java | 2 + .../integration/perf/PutFileStressIT.java | 7 +- ...{DeleteFileTest.java => DeleteFileIT.java} | 7 +- ...est.java => GeneralMessageHandlingIT.java} | 10 +- ...tTrailsTest.java => GetAuditTrailsIT.java} | 10 +- ...ChecksumsTest.java => GetChecksumsIT.java} | 10 +- ...{GetFileIDsTest.java => GetFileIDsIT.java} | 13 +- .../{GetFileTest.java => GetFileIT.java} | 10 +- .../{PutFileTest.java => PutFileIT.java} | 10 +- ...eplaceFileTest.java => ReplaceFileIT.java} | 10 +- ...ava => RecalculateChecksumWorkflowIT.java} | 4 +- ...elTest.java => ChecksumPillarModelIT.java} | 4 +- ...rModelTest.java => FullPillarModelIT.java} | 4 +- ...chiveTest.java => ReferenceArchiveIT.java} | 4 +- .../checksumcache/ChecksumDatabaseTest.java | 74 ++-- pom.xml | 19 +- 31 files changed, 344 insertions(+), 497 deletions(-) delete mode 100644 bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPerformanceTestSuite.java create mode 100644 bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPillarCommonIntegrationTestSuite.java create mode 100644 bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java delete mode 100644 bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/{DefaultPillarTest.java => DefaultPillarIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/{MediatorTest.java => MediatorIT.java} (99%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/{MockedPillarTest.java => MockedPillarIT.java} (97%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/{ => integration}/BitrepositoryChecksumPillarTestSuite.java (63%) create mode 100644 bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryPerformanceTestSuite.java rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/{ => integration}/BitrepositoryPillarTestSuite.java (61%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/{DeleteFileTest.java => DeleteFileIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/{GeneralMessageHandlingTest.java => GeneralMessageHandlingIT.java} (97%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/{GetAuditTrailsTest.java => GetAuditTrailsIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/{GetChecksumsTest.java => GetChecksumsIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/{GetFileIDsTest.java => GetFileIDsIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/{GetFileTest.java => GetFileIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/{PutFileTest.java => PutFileIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/{ReplaceFileTest.java => ReplaceFileIT.java} (99%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/{RecalculateChecksumWorkflowTest.java => RecalculateChecksumWorkflowIT.java} (97%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/{ChecksumPillarModelTest.java => ChecksumPillarModelIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/{FullPillarModelTest.java => FullPillarModelIT.java} (98%) rename bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/{ReferenceArchiveTest.java => ReferenceArchiveIT.java} (98%) diff --git a/bitrepository-reference-pillar/pom.xml b/bitrepository-reference-pillar/pom.xml index 3664f9e73..66e07fca6 100644 --- a/bitrepository-reference-pillar/pom.xml +++ b/bitrepository-reference-pillar/pom.xml @@ -190,18 +190,29 @@ maven-failsafe-plugin - BitrepositoryPillarTestSuite - BitrepositoryChecksumPillarTestSuite + org.bitrepository.pillar.integration.BitrepositoryPillarTestSuite + org.bitrepository.pillar.integration.BitrepositoryChecksumPillarTestSuite + org.bitrepository.pillar.BitrepositoryPillarCommonIntegrationTestSuite true - - - - integration-test - verify - - - + + + + + + + Stress-test + + + + maven-failsafe-plugin + + org.bitrepository.pillar.integration.BitrepositoryPerformanceTestSuite + true + + true + + diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java index f5e49e2bd..d18d25ebf 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java @@ -270,7 +270,9 @@ private GetFileIDsProgressResponse createProgressResponse(GetFileIDsRequest mess */ private GetFileIDsFinalResponse createFinalResponse(GetFileIDsRequest message) { GetFileIDsFinalResponse res = new GetFileIDsFinalResponse(); - res.setPillarID(getPillarModel().getPillarID()); + StorageModel pillarModel = getPillarModel(); + String pillarID = pillarModel.getPillarID(); + res.setPillarID(pillarID); res.setFileIDs(message.getFileIDs()); return res; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPerformanceTestSuite.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPerformanceTestSuite.java deleted file mode 100644 index 4470c5e62..000000000 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPerformanceTestSuite.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.bitrepository.pillar; - -import org.junit.platform.suite.api.*; - -/** - * BitrepositoryPerformanceTestSuite is a JUnit 5 suite class that groups and configures multiple test classes - * for the BitRepositoryPillar project. - */ -@Suite -@SuiteDisplayName("Performance Test") -@SelectPackages({"org.bitrepository.pillar.integration.perf"}) -@IncludeClassNamePatterns(value = "^(Test.*|.+[.$]Test.*|.*Tests?|.*IT)$") -@IncludeTags("pillar-stress-test") -@ConfigurationParameter(key = "pillarType", value = "File") -public class BitrepositoryPerformanceTestSuite { -} diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPillarCommonIntegrationTestSuite.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPillarCommonIntegrationTestSuite.java new file mode 100644 index 000000000..d40946f2d --- /dev/null +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPillarCommonIntegrationTestSuite.java @@ -0,0 +1,19 @@ +package org.bitrepository.pillar; + +import org.junit.platform.suite.api.ExcludePackages; +import org.junit.platform.suite.api.IncludeClassNamePatterns; +import org.junit.platform.suite.api.SelectPackages; +import org.junit.platform.suite.api.Suite; +import org.junit.platform.suite.api.SuiteDisplayName; + +/** + * BitrepositoryPillarTestSuite is a JUnit 5 suite class that groups and configures multiple test classes + * for the BitRepositoryPillar project. + */ +@Suite +@SuiteDisplayName("Common Acceptance Test") +@SelectPackages({"org.bitrepository.pillar"}) +@ExcludePackages("org.bitrepository.pillar.integration") +@IncludeClassNamePatterns(value = {"^(.*IT)$"}) +public class BitrepositoryPillarCommonIntegrationTestSuite { +} diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java new file mode 100644 index 000000000..edea07cd0 --- /dev/null +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java @@ -0,0 +1,138 @@ +/* + * #%L + * Bitrepository Protocol + * + * $Id: DefaultFixturePillarTest.java 452 2011-11-10 09:59:11Z mss $ + * $HeadURL: https://sbforge.org/svn/bitrepository/bitrepository-reference/trunk/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java $ + * %% + * Copyright (C) 2010 - 2011 The State and University Library, The Royal Library and The State Archives, Denmark + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 2.1 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * . + * #L% + */ +package org.bitrepository.pillar; + +import org.bitrepository.common.settings.Settings; +import org.bitrepository.pillar.integration.ActiveMQFixedPortContainer; +import org.bitrepository.protocol.IntegrationTest; +import org.bitrepository.protocol.activemq.ActiveMQMessageBus; +import org.bitrepository.protocol.bus.MessageReceiver; +import org.bitrepository.protocol.messagebus.MessageBusManager; +import org.bitrepository.settings.repositorysettings.Collection; +import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.junit.jupiter.Container; + +import javax.jms.JMSException; +import java.util.List; + +public abstract class DefaultFixturePillarIT extends IntegrationTest { + protected static String pillarDestinationId; + + protected String clientDestinationId; + protected MessageReceiver clientReceiver; + + @Container + static ActiveMQContainer activemq = new ActiveMQFixedPortContainer("apache/activemq:5.17.7") + .withFixedExposedPort(9999, 61616, InternetProtocol.TCP); + + /** + * Replaces the pillarID references in the settings will test specific pillarIDs. + */ + @Override + protected Settings loadSettings(String componentID) { + Settings settings = super.loadSettings(componentID); + updateSettingsWithSpecificPillarID(settings, componentID); + return settings; + } + + @Override + protected void registerMessageReceivers() { + super.registerMessageReceivers(); + + clientDestinationId = settingsForTestClient.getReceiverDestinationID(); + clientReceiver = new MessageReceiver(clientDestinationId); + addReceiver(clientReceiver); + + pillarDestinationId = settingsForCUT.getContributorDestinationID(); + } + + @Override + protected void setupMessageBus() { + activemq.start(); + while (!activemq.isRunning()) { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + messageBus = new ActiveMQMessageBus(settingsForTestClient, securityManager); + MessageBusManager.clear(); + MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); + } + + /** + * Shutdown the message bus. + */ + @Override + protected void teardownMessageBus() { + MessageBusManager.clear(); + if (messageBus != null) { + try { + messageBus.setComponentFilter(List.of()); + messageBus.setCollectionFilter(List.of()); + + messageBus.close(); + messageBus = null; + } catch (JMSException e) { + + } + } + + if (broker != null) { + try { + broker.stop(); + broker = null; + } catch (Exception e) { + // No reason to pollute the test output with this + } + } + } + + protected String getPillarID() { + return getComponentID(); + } + + /** The default pillar id in the settings to replace.*/ + private static final String DEFAULT_PILLAR_ID_TO_REPLACE = "Pillar1"; + + /** + * Sets the given id to be the pillar id, also in the collections. + * @param settings The settings. + * @param pillarID The new pillar id. + */ + private void updateSettingsWithSpecificPillarID(Settings settings, String pillarID) { + settings.getReferenceSettings().getPillarSettings().setPillarID(pillarID); + for(Collection collection : settings.getRepositorySettings().getCollections().getCollection()) { + if(collection.getPillarIDs().getPillarID().remove(DEFAULT_PILLAR_ID_TO_REPLACE)) { + collection.getPillarIDs().getPillarID().add(pillarID); + } + } + } + + +} diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java deleted file mode 100644 index f76f17ac1..000000000 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java +++ /dev/null @@ -1,369 +0,0 @@ -/* - * #%L - * Bitrepository Protocol - * - * $Id: DefaultFixturePillarTest.java 452 2011-11-10 09:59:11Z mss $ - * $HeadURL: https://sbforge.org/svn/bitrepository/bitrepository-reference/trunk/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarTest.java $ - * %% - * Copyright (C) 2010 - 2011 The State and University Library, The Royal Library and The State Archives, Denmark - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 2.1 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * . - * #L% - */ -package org.bitrepository.pillar; - -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.core.util.StatusPrinter; -import org.bitrepository.client.conversation.mediator.CollectionBasedConversationMediator; -import org.bitrepository.client.conversation.mediator.ConversationMediator; -import org.bitrepository.common.settings.Settings; -import org.bitrepository.common.settings.TestSettingsProvider; -import org.bitrepository.common.utils.SettingsUtils; -import org.bitrepository.common.utils.TestFileHelper; -import org.bitrepository.pillar.integration.ActiveMQFixedPortContainer; -import org.bitrepository.protocol.MessageReceiverManager; -import org.bitrepository.protocol.activemq.ActiveMQMessageBus; -import org.bitrepository.protocol.bus.LocalActiveMQBroker; -import org.bitrepository.protocol.bus.MessageReceiver; -import org.bitrepository.protocol.fileexchange.HttpServerConfiguration; -import org.bitrepository.protocol.http.EmbeddedHttpServer; -import org.bitrepository.protocol.message.ClientTestMessageFactory; -import org.bitrepository.protocol.messagebus.MessageBus; -import org.bitrepository.protocol.messagebus.MessageBusManager; -import org.bitrepository.protocol.security.DummySecurityManager; -import org.bitrepository.protocol.security.SecurityManager; -import org.bitrepository.protocol.utils.TestWatcherExtension; -import org.bitrepository.settings.repositorysettings.Collection; -import org.bitrepository.settings.repositorysettings.MessageBusConfiguration; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.TestInfo; -import org.junit.jupiter.api.extension.RegisterExtension; -import org.slf4j.LoggerFactory; -import org.testcontainers.activemq.ActiveMQContainer; -import org.testcontainers.containers.InternetProtocol; -import org.testcontainers.junit.jupiter.Container; - -import javax.jms.JMSException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.List; - -/** - * Contains the generic parts for pillar tests integrating to the message bus. - * Mostly copied from DefaultFixtureClientTest... - */ -public abstract class DefaultFixturePillarTest { - protected static final String DEFAULT_FILE_ID = ClientTestMessageFactory.FILE_ID_DEFAULT; - public static LocalActiveMQBroker broker; - public static EmbeddedHttpServer server; - public static HttpServerConfiguration httpServerConfiguration; - public static MessageBus messageBus; - - protected static MessageReceiver collectionReceiver; - - protected String clientDestinationId; - protected MessageReceiver clientReceiver; - protected String pillarDestinationId; - - - protected static String alarmDestinationID; - protected static MessageReceiver alarmReceiver; - - protected static SecurityManager securityManager; - - protected static Settings settingsForCUT; - protected static Settings settingsForTestClient; - - protected ConversationMediator conversationMediator; - private static MessageReceiverManager receiverManager; - - @Container - static ActiveMQContainer activemq = new ActiveMQFixedPortContainer("apache/activemq:5.17.7") - .withFixedExposedPort(9999, 61616, InternetProtocol.TCP); - - protected static String defaultDownloadFileAddress; - protected static String defaultUploadFileAddress; - protected static String collectionID; - protected static String defaultFileId; - protected String nonDefaultFileId; - - - protected String testMethodName; - - - @RegisterExtension - TestWatcherExtension testWatcher = new TestWatcherExtension(); - - - @BeforeAll - public static void initializeSuite() { - settingsForTestClient = loadSettings("TestSuiteInitialiser"); - makeUserSpecificSettings(settingsForTestClient, getTopicPostfix()); - httpServerConfiguration = new HttpServerConfiguration(settingsForTestClient.getReferenceSettings() - .getFileExchangeSettings()); - collectionID = settingsForTestClient.getCollections().get(0).getID(); - - securityManager = createSecurityManager(); - defaultFileId = "DefaultFile"; - try { - URL defaultFileUrl = httpServerConfiguration.getURL(TestFileHelper.DEFAULT_FILE_ID); - defaultDownloadFileAddress = defaultFileUrl.toExternalForm(); - defaultUploadFileAddress = defaultFileUrl.toExternalForm() + "-" + "DefaultFile"; - } catch (MalformedURLException e) { - throw new RuntimeException("Never happens"); - } - - startMessageBus(); - } - - @AfterAll - static void tearDown() { - teardownMessageBus(); - teardownHttpServer(); - } - - - @BeforeEach - public void writeLogStatus() { - if (System.getProperty("enableLogStatus", "false").equals("true")) { - LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); - StatusPrinter.print(lc); - } - } - - /** - * Initializes the settings. Will postfix the alarm and collection topics with '-${user.name} - */ - @BeforeEach - protected void setupSettings(TestInfo testInfo) { - testMethodName = testInfo.getTestMethod().get().getName(); - - settingsForCUT = loadSettings(getComponentID()); - makeUserSpecificSettings(settingsForCUT, getTopicPostfix()); - - SettingsUtils.initialize(settingsForCUT); - - nonDefaultFileId = TestFileHelper.createUniquePrefix(testMethodName); - - settingsForTestClient = loadSettings(testMethodName); - makeUserSpecificSettings(settingsForTestClient, getTopicPostfix()); - - alarmDestinationID = settingsForCUT.getRepositorySettings().getProtocolSettings().getAlarmDestination(); - pillarDestinationId = settingsForCUT.getContributorDestinationID(); - clientDestinationId = settingsForTestClient.getReceiverDestinationID(); - - messageBus.setCollectionFilter(List.of()); - messageBus.setComponentFilter(List.of()); - receiverManager = new MessageReceiverManager(messageBus); - - alarmReceiver = addReceiver(new MessageReceiver(settingsForCUT.getAlarmDestination())); - collectionReceiver = addReceiver(new MessageReceiver(settingsForCUT.getCollectionDestination())); - clientReceiver = addReceiver(new MessageReceiver(clientDestinationId)); - - receiverManager.startListeners(); - - renewConversationMediator(); - } - - - @AfterEach - public void shutdownConversationMediator() { - if (receiverManager != null) { - receiverManager.stopListeners(); - } - if (testWatcher.isTestSuccessful()) { - afterMethodVerification(); - } - - if (conversationMediator != null) { - conversationMediator.shutdown(); - } - conversationMediator = null; - } - - - @AfterEach - public final void afterMethod() { - if (receiverManager != null) { - receiverManager.stopListeners(); - } - if (testWatcher.isTestSuccessful()) { - afterMethodVerification(); - } - } - - /** - * Indicated whether an embedded http server should be started and used - */ - public static boolean useEmbeddedHttpServer() { - return System.getProperty("useEmbeddedHttpServer", "false").equals("true"); - } - - /** - * Replaces the pillarID references in the settings will test specific pillarIDs. - */ - protected static Settings loadSettings(String componentID) { - Settings settings = TestSettingsProvider.reloadSettings(componentID); - updateSettingsWithSpecificPillarID(settings, componentID); - return settings; - } - - - /** - * Hooks up the message bus. - */ - protected static void startMessageBus() { - activemq.start(); - while (!activemq.isRunning()) { - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - - messageBus = new ActiveMQMessageBus(settingsForTestClient, securityManager); - MessageBusManager.clear(); - MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); - } - - /** - * Shutdown the message bus. - */ - private static void teardownMessageBus() { - MessageBusManager.clear(); - if (messageBus != null) { - try { - messageBus.setComponentFilter(List.of()); - messageBus.setCollectionFilter(List.of()); - - messageBus.close(); - messageBus = null; - } catch (JMSException e) { - - } - } - - if (broker != null) { - try { - broker.stop(); - broker = null; - } catch (Exception e) { - // No reason to pollute the test output with this - } - } - } - - - protected String getPillarID() { - return getComponentID(); - } - - /** - * The default pillar id in the settings to replace. - */ - private static final String DEFAULT_PILLAR_ID_TO_REPLACE = "Pillar1"; - - /** - * Sets the given id to be the pillar id, also in the collections. - * - * @param settings The settings. - * @param pillarID The new pillar id. - */ - private static void updateSettingsWithSpecificPillarID(Settings settings, String pillarID) { - settings.getReferenceSettings().getPillarSettings().setPillarID(pillarID); - for (Collection collection : settings.getRepositorySettings().getCollections().getCollection()) { - if (collection.getPillarIDs().getPillarID().remove(DEFAULT_PILLAR_ID_TO_REPLACE)) { - collection.getPillarIDs().getPillarID().add(pillarID); - } - } - } - - - /** - * Used for creating a new conversationMediator between tests, and for tests needing to use a differently configured - * mediator. - */ - protected void renewConversationMediator() { - if (conversationMediator != null) { - conversationMediator.shutdown(); - } - conversationMediator = new CollectionBasedConversationMediator(settingsForCUT, securityManager); - } - - - protected static MessageReceiver addReceiver(MessageReceiver receiver) { - receiverManager.addReceiver(receiver); - return receiver; - } - - /** - * May be used by specific tests for general verification when the test method has finished. Will only be run - * if the test has passed (so far). - */ - protected void afterMethodVerification() { - receiverManager.checkNoMessagesRemainInReceivers(); - } - - /** - * Purges all messages from the receivers. - */ - protected void clearReceivers() { - receiverManager.clearMessagesInReceivers(); - } - - - private static void makeUserSpecificSettings(Settings settings, final String topicPostfix) { - settings.getRepositorySettings().getProtocolSettings() - .setCollectionDestination(settings.getCollectionDestination() + topicPostfix); - settings.getRepositorySettings().getProtocolSettings() - .setAlarmDestination(settings.getAlarmDestination() + topicPostfix); - } - - - /** - * Shutdown the embedded http server if any. - */ - protected static void teardownHttpServer() { - if (useEmbeddedHttpServer()) { - server.stop(); - } - } - - /** - * Returns the postfix string to use when accessing user specific topics, which is the mechanism we use in the - * bit repository tests. - * - * @return The string to postfix all topix names with. - */ - protected static String getTopicPostfix() { - return "-" + System.getProperty("user.name"); - } - - protected String getComponentID() { - return getClass().getSimpleName(); - } - - protected String createDate() { - return Long.toString(System.currentTimeMillis()); - } - - protected static SecurityManager createSecurityManager() { - return new DummySecurityManager(); - } -} diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java index 20cc2a73a..1941d61cf 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java @@ -51,7 +51,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addFixture; -public abstract class DefaultPillarTest extends DefaultFixturePillarTest { +public abstract class DefaultPillarIT extends DefaultFixturePillarIT { protected FileStore archives; protected StorageModel model; protected PillarMediator mediator; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorIT.java similarity index 99% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorIT.java index bba7411a4..deda84163 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorIT.java @@ -51,7 +51,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -public class MediatorTest extends DefaultFixturePillarTest { +public class MediatorIT extends DefaultFixturePillarIT { MockAuditManager audits; MessageHandlerContext context; StorageModel model = null; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java similarity index 97% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java index e1da1bb2c..09fb58c62 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java @@ -36,12 +36,11 @@ import org.bitrepository.service.audit.MockAuditManager; import org.bitrepository.service.contributor.ResponseDispatcher; import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import static org.bitrepository.common.utils.AllureTestUtils.addFixture; import static org.mockito.Mockito.mock; -public abstract class MockedPillarTest extends DefaultFixturePillarTest { +public abstract class MockedPillarIT extends DefaultFixturePillarIT { protected PillarMediator mediator; protected StorageModel model; protected MockAuditManager audits; @@ -54,6 +53,7 @@ public abstract class MockedPillarTest extends DefaultFixturePillarTest { protected static String DEFAULT_MD5_CHECKSUM = "1234cccccccc4321"; protected static String NON_DEFAULT_MD5_CHECKSUM = "1234cccccccc4322"; + @Override protected void initializeCUT() { audits = new MockAuditManager(); model = mock(StorageModel.class); @@ -63,6 +63,7 @@ protected void initializeCUT() { } @AfterEach + @Override protected void shutdownCUT() { shutdownMediator(); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/PillarTestGroups.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/PillarTestGroups.java index 8068aa87b..d268b916f 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/PillarTestGroups.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/PillarTestGroups.java @@ -27,4 +27,5 @@ public class PillarTestGroups { public static final String FULL_PILLAR_TEST = "fullPillarTest"; public static final String OPERATION_ACCEPTED_PROGRESS = "operationAcceptedProgress"; public static final String RESULT_UPLOAD = "resultUploadTest"; + public static final String PILLAR_STRESS_TEST = "pillar-stress-test"; } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryChecksumPillarTestSuite.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryChecksumPillarTestSuite.java similarity index 63% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryChecksumPillarTestSuite.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryChecksumPillarTestSuite.java index d3b66bc78..30fbed954 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryChecksumPillarTestSuite.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryChecksumPillarTestSuite.java @@ -1,5 +1,6 @@ -package org.bitrepository.pillar; +package org.bitrepository.pillar.integration; +import org.bitrepository.pillar.PillarTestGroups; import org.junit.platform.suite.api.*; /** @@ -10,7 +11,11 @@ @SuiteDisplayName("Checksum Pillar Acceptance Test") @SelectPackages({"org.bitrepository.pillar.integration.func"}) @IncludeTags({PillarTestGroups.CHECKSUM_PILLAR_TEST}) -@IncludeClassNamePatterns(value = "^(Test.*|.+[.$]Test.*|.*Tests?|.*IT)$") +@IncludeClassNamePatterns(value = {"^(Test.*)$", + "^(.+[.$]Test.*)$", + "^(.*Tests?)$", + "^(.*IT)$" +}) @ConfigurationParameter(key = "pillarType", value = "Checksum") public class BitrepositoryChecksumPillarTestSuite { } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryPerformanceTestSuite.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryPerformanceTestSuite.java new file mode 100644 index 000000000..d39dd0b46 --- /dev/null +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryPerformanceTestSuite.java @@ -0,0 +1,23 @@ +package org.bitrepository.pillar.integration; + +import org.bitrepository.pillar.PillarTestGroups; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; +import org.junit.platform.suite.api.*; + +/** + * BitrepositoryPerformanceTestSuite is a JUnit 5 suite class that groups and configures multiple test classes + * for the BitRepositoryPillar project. + */ +@Suite +@SuiteDisplayName("Performance Test") +@SelectPackages({"org.bitrepository.pillar.integration.perf"}) +@IncludeClassNamePatterns(value = {"^(Test.*)$", + "^(.+[.$]Test.*)$", + "^(.*Tests?)$", + "^(.*IT)$" +}) +@IncludeTags(PillarTestGroups.PILLAR_STRESS_TEST) +@ConfigurationParameter(key = "pillarType", value = "File") +@EnabledIfSystemProperty(named = "runStressTests", matches = "true") +public class BitrepositoryPerformanceTestSuite { +} diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPillarTestSuite.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryPillarTestSuite.java similarity index 61% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPillarTestSuite.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryPillarTestSuite.java index 4f0fef3a9..4a3e6dfb1 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/BitrepositoryPillarTestSuite.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/BitrepositoryPillarTestSuite.java @@ -1,5 +1,6 @@ -package org.bitrepository.pillar; +package org.bitrepository.pillar.integration; +import org.bitrepository.pillar.PillarTestGroups; import org.junit.platform.suite.api.*; /** @@ -9,7 +10,11 @@ @Suite @SuiteDisplayName("Full Pillar Acceptance Test") @SelectPackages({"org.bitrepository.pillar.integration.func"}) -@IncludeClassNamePatterns(value = "^(Test.*|.+[.$]Test.*|.*Tests?|.*IT)$") +@IncludeClassNamePatterns(value = {"^(Test.*)$", + "^(.+[.$]Test.*)$", + "^(.*Tests?)$", + "^(.*IT)$" +}) @IncludeTags({PillarTestGroups.FULL_PILLAR_TEST}) @ConfigurationParameter(key = "pillarType", value = "File") public class BitrepositoryPillarTestSuite { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java index 3ad61a7e1..f62cf9a73 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java @@ -29,6 +29,7 @@ import org.bitrepository.modify.ModifyComponentFactory; import org.bitrepository.modify.putfile.BlockingPutFileClient; import org.bitrepository.modify.putfile.PutFileClient; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.integration.perf.metrics.Metrics; import org.bitrepository.protocol.security.DummySecurityManager; import org.junit.jupiter.api.BeforeEach; @@ -75,7 +76,7 @@ private void singleTreadedPut() throws Exception { @Disabled("Temporarily disabled due to performance issues") @Test - @Tag("pillar-stress-test") + @Tag(PillarTestGroups.PILLAR_STRESS_TEST) void singleTreadedGetAuditTrails() throws Exception { final int NUMBER_OF_AUDITS = 100; final int PART_STATISTIC_INTERVAL = NUMBER_OF_AUDITS / 5; @@ -97,7 +98,7 @@ void singleTreadedGetAuditTrails() throws Exception { @Disabled("Temporarily disabled due to performance issues") @Test - @Tag("pillar-stress-test") + @Tag(PillarTestGroups.PILLAR_STRESS_TEST) void parallelGetAuditTrails() throws Exception { final int NUMBER_OF_AUDITS = 10; final int PART_STATISTIC_INTERVAL = NUMBER_OF_AUDITS / 5; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java index 0a0f534bd..629664fad 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java @@ -29,6 +29,7 @@ import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileResponse; import org.bitrepository.client.eventhandler.EventHandler; import org.bitrepository.common.utils.TestFileHelper; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.integration.perf.metrics.Metrics; import org.bitrepository.pillar.messagefactories.GetFileMessageFactory; import org.bitrepository.protocol.bus.MessageReceiver; @@ -36,6 +37,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledIf; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import java.io.IOException; import java.nio.file.DirectoryStream; @@ -46,6 +49,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; +@EnabledIfSystemProperty(named = "runStressTests", matches = "true") public class GetFileStressIT extends PillarPerformanceIT { public static final String FOLDER_NAME = "src/test/resources"; protected GetFileClient getFileClient; @@ -74,7 +78,7 @@ private static void removeFiles(String fileStartsWith, String folderName) throws } @Test - @Tag("pillar-stress-test") + @Tag(PillarTestGroups.PILLAR_STRESS_TEST) void singleGetFilePerformanceTest() throws Exception { final int NUMBER_OF_FILES = 1000; final int PART_STATISTIC_INTERVAL = 100; @@ -94,7 +98,7 @@ void singleGetFilePerformanceTest() throws Exception { } @Test - @Tag("pillar-stress-test") + @Tag(PillarTestGroups.PILLAR_STRESS_TEST) void parallelGetFilePerformanceTest() throws Exception { final int numberOfFiles = testConfiguration.getInt("pillarintegrationtest.GetFileStressIT.parallelGet.numberOfFiles"); @@ -120,7 +124,7 @@ void parallelGetFilePerformanceTest() throws Exception { } @Test - @Tag("pillar-stress-test") + @Tag(PillarTestGroups.PILLAR_STRESS_TEST) void noIdentfyGetFilePerformanceTest() throws Exception { final int numberOfFiles = testConfiguration.getInt("pillarintegrationtest.GetFileStressIT.parallelGet.numberOfFiles"); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java index 48887528e..5af42d8eb 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java @@ -35,6 +35,7 @@ import org.bitrepository.protocol.bus.MessageReceiver; import org.bitrepository.protocol.messagebus.MessageListener; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,6 +44,7 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +@EnabledIfSystemProperty(named = "runStressTests", matches = "true") public class PillarPerformanceIT extends PillarIntegrationIT { protected final Logger log = LoggerFactory.getLogger(getClass()); protected List metricAppenders = new LinkedList<>(); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PutFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PutFileStressIT.java index 00b87f91e..31c4408f0 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PutFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PutFileStressIT.java @@ -27,10 +27,12 @@ import org.bitrepository.modify.ModifyComponentFactory; import org.bitrepository.modify.putfile.BlockingPutFileClient; import org.bitrepository.modify.putfile.PutFileClient; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.integration.perf.metrics.Metrics; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -38,6 +40,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; +@EnabledIfSystemProperty(named = "runStressTests", matches = "true") class PutFileStressIT extends PillarPerformanceIT { protected PutFileClient putClient; @@ -49,7 +52,7 @@ settingsForTestClient, createSecurityManager(), settingsForTestClient.getCompone } @Test - @Tag("pillar-stress-test") + @Tag(PillarTestGroups.PILLAR_STRESS_TEST) @Tag("stress-test-pillar-population") void singleTreadedPut() throws Exception { final int NUMBER_OF_FILES = 10; @@ -73,7 +76,7 @@ void singleTreadedPut() throws Exception { } @Test - @Tag("pillar-stress-test") + @Tag(PillarTestGroups.PILLAR_STRESS_TEST) void parallelPut() throws Exception { final int numberOfFiles = testConfiguration.getInt("pillarintegrationtest.PutFileStressIT.parallelPut.numberOfFiles"); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java index 0c0e69c3e..10db1578b 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java @@ -35,7 +35,8 @@ import org.bitrepository.bitrepositorymessages.DeleteFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileResponse; -import org.bitrepository.pillar.MockedPillarTest; +import org.bitrepository.pillar.MockedPillarIT; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.DeleteFileMessageFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; @@ -57,10 +58,10 @@ * Tests the PutFile functionality on the ReferencePillar. */ @ExtendWith(SuiteInfoParameterResolver.class) -class DeleteFileTest extends MockedPillarTest { +class DeleteFileIT extends MockedPillarIT { private DeleteFileMessageFactory msgFactory; - @BeforeEach + @Override public void initializeCUT() { super.initializeCUT(); msgFactory = new DeleteFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingIT.java similarity index 97% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingIT.java index b0d62ab38..f561f8dee 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingIT.java @@ -28,14 +28,14 @@ import org.bitrepository.SuiteInfoParameterResolver; import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; -import org.bitrepository.pillar.MockedPillarTest; +import org.bitrepository.pillar.MockedPillarIT; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.common.MessageHandlerContext; import org.bitrepository.pillar.messagehandler.PillarMessageHandler; import org.bitrepository.pillar.store.StorageModel; import org.bitrepository.protocol.MessageContext; import org.bitrepository.service.exception.RequestHandlerException; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -45,12 +45,12 @@ import static org.junit.jupiter.api.Assertions.assertThrows; @ExtendWith(SuiteInfoParameterResolver.class) -class GeneralMessageHandlingTest extends MockedPillarTest { +class GeneralMessageHandlingIT extends MockedPillarIT { MockRequestHandler requestHandler; - @BeforeEach - void setup() { + @Override + protected void initializeCUT() { super.initializeCUT(); this.requestHandler = new MockRequestHandler(context, model); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsIT.java index b256f86a9..ed7149575 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsIT.java @@ -31,10 +31,10 @@ import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetAuditTrailsRequest; import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetAuditTrailsResponse; import org.bitrepository.common.utils.CalendarUtils; -import org.bitrepository.pillar.MockedPillarTest; +import org.bitrepository.pillar.MockedPillarIT; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.GetAuditTrailsMessageFactory; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -47,11 +47,11 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -class GetAuditTrailsTest extends MockedPillarTest { +class GetAuditTrailsIT extends MockedPillarIT { private GetAuditTrailsMessageFactory msgFactory; - @BeforeEach - public void initializeCUT() { + @Override + protected void initializeCUT() { super.initializeCUT(); msgFactory = new GetAuditTrailsMessageFactory(collectionID, settingsForTestClient); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsIT.java index 5a557b5bd..0a5aa1429 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsIT.java @@ -37,12 +37,12 @@ import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetChecksumsResponse; import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.common.utils.FileIDsUtils; -import org.bitrepository.pillar.MockedPillarTest; +import org.bitrepository.pillar.MockedPillarIT; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.GetChecksumsMessageFactory; import org.bitrepository.pillar.store.checksumdatabase.ChecksumEntry; import org.bitrepository.pillar.store.checksumdatabase.ExtractedChecksumResultSet; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -64,11 +64,11 @@ * Tests the PutFile functionality on the ReferencePillar. */ @ExtendWith(SuiteInfoParameterResolver.class) -class GetChecksumsTest extends MockedPillarTest { +class GetChecksumsIT extends MockedPillarIT { private GetChecksumsMessageFactory msgFactory; - @BeforeEach - public void initializeCUT() { + @Override + protected void initializeCUT() { super.initializeCUT(); msgFactory = new GetChecksumsMessageFactory(collectionID, settingsForTestClient, getPillarID(), pillarDestinationId); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsIT.java index ed52e8fa4..65c3ae418 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsIT.java @@ -37,11 +37,11 @@ import org.bitrepository.common.utils.AllureTestUtils; import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.common.utils.FileIDsUtils; -import org.bitrepository.pillar.MockedPillarTest; +import org.bitrepository.pillar.MockedPillarIT; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.GetFileIDsMessageFactory; import org.bitrepository.pillar.store.checksumdatabase.ExtractedFileIDsResultSet; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -59,11 +59,11 @@ * Tests the GetFileIDs functionality on the ReferencePillar. */ @ExtendWith(SuiteInfoParameterResolver.class) -class GetFileIDsTest extends MockedPillarTest { +class GetFileIDsIT extends MockedPillarIT { private GetFileIDsMessageFactory msgFactory; - @BeforeEach - public void initializeCUT() { + @Override + protected void initializeCUT() { super.initializeCUT(); msgFactory = new GetFileIDsMessageFactory(collectionID, settingsForTestClient, getPillarID(), pillarDestinationId); @@ -240,7 +240,8 @@ void badCaseOperationNoFile() { addStep("Setup for not having the file", "Should cause the FILE_NOT_FOUND_FAILURE later."); Mockito.when(model.hasFileID(eq(FILE_ID), anyString())).thenReturn(false); - Mockito.when(model.getPillarID()).thenReturn(settingsForCUT.getComponentID()); + String componentID = settingsForCUT.getComponentID(); + Mockito.when(model.getPillarID()).thenReturn(componentID); addStep("Create and send the actual GetFileIDs message to the pillar.", "Should be received and handled by the pillar."); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIT.java index bc405aeb3..b7414ef2f 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIT.java @@ -34,14 +34,14 @@ import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileResponse; import org.bitrepository.common.filestore.FileInfo; -import org.bitrepository.pillar.MockedPillarTest; +import org.bitrepository.pillar.MockedPillarIT; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.common.FileInfoStub; import org.bitrepository.pillar.messagefactories.GetFileMessageFactory; import org.bitrepository.service.exception.IdentifyContributorException; import org.bitrepository.service.exception.InvalidMessageException; import org.bitrepository.service.exception.RequestHandlerException; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -60,11 +60,11 @@ * Tests the PutFile functionality on the ReferencePillar. */ @ExtendWith(SuiteInfoParameterResolver.class) -class GetFileTest extends MockedPillarTest { +class GetFileIT extends MockedPillarIT { private GetFileMessageFactory msgFactory; - @BeforeEach - public void initializeCUT() { + @Override + protected void initializeCUT() { super.initializeCUT(); msgFactory = new GetFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), pillarDestinationId); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileIT.java index b6ed1b489..a7459b2e9 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileIT.java @@ -38,10 +38,10 @@ import org.bitrepository.bitrepositorymessages.PutFileRequest; import org.bitrepository.common.utils.Base16Utils; import org.bitrepository.common.utils.CalendarUtils; -import org.bitrepository.pillar.MockedPillarTest; +import org.bitrepository.pillar.MockedPillarIT; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.PutFileMessageFactory; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -57,12 +57,12 @@ * Tests the PutFile functionality on the ReferencePillar. */ @ExtendWith(SuiteInfoParameterResolver.class) -class PutFileTest extends MockedPillarTest { +class PutFileIT extends MockedPillarIT { PutFileMessageFactory msgFactory; Long FILE_SIZE = 1L; - @BeforeEach - public void initializeCUT() { + @Override + protected void initializeCUT() { super.initializeCUT(); msgFactory = new PutFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), pillarDestinationId); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileIT.java similarity index 99% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileIT.java index 3d38c9995..078298edf 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileIT.java @@ -39,10 +39,10 @@ import org.bitrepository.bitrepositorymessages.ReplaceFileRequest; import org.bitrepository.common.utils.Base16Utils; import org.bitrepository.common.utils.CalendarUtils; -import org.bitrepository.pillar.MockedPillarTest; +import org.bitrepository.pillar.MockedPillarIT; +import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.ReplaceFileMessageFactory; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -61,12 +61,12 @@ * Tests the ReplaceFile functionality on the ReferencePillar. */ @ExtendWith(SuiteInfoParameterResolver.class) -class ReplaceFileTest extends MockedPillarTest { +class ReplaceFileIT extends MockedPillarIT { ReplaceFileMessageFactory msgFactory; Long FILE_SIZE = 1L; - @BeforeEach - public void initializeCUT() { + @Override + protected void initializeCUT() { super.initializeCUT(); msgFactory = new ReplaceFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), pillarDestinationId); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java similarity index 97% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java index 8e1ec428d..76e77d7c5 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java @@ -22,7 +22,7 @@ */ import org.bitrepository.SuiteInfoParameterResolver; -import org.bitrepository.pillar.DefaultPillarTest; +import org.bitrepository.pillar.DefaultPillarIT; import org.bitrepository.service.workflow.SchedulableJob; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -38,7 +38,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -class RecalculateChecksumWorkflowTest extends DefaultPillarTest { +class RecalculateChecksumWorkflowIT extends DefaultPillarIT { DatatypeFactory factory; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java index 8805af8f1..726a8907e 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java @@ -25,7 +25,7 @@ import org.bitrepository.bitrepositoryelements.ChecksumSpecTYPE; import org.bitrepository.bitrepositoryelements.ChecksumType; import org.bitrepository.common.utils.ChecksumUtils; -import org.bitrepository.pillar.DefaultFixturePillarTest; +import org.bitrepository.pillar.DefaultFixturePillarIT; import org.bitrepository.pillar.store.checksumcache.MemoryCacheMock; import org.bitrepository.pillar.store.checksumdatabase.ChecksumStore; import org.bitrepository.service.AlarmDispatcher; @@ -43,7 +43,7 @@ @ExtendWith(SuiteInfoParameterResolver.class) -public class ChecksumPillarModelTest extends DefaultFixturePillarTest { +public class ChecksumPillarModelIT extends DefaultFixturePillarIT { ChecksumStorageModel pillarModel; ChecksumStore cache; protected AlarmDispatcher alarmDispatcher; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java index ac3a6868f..22ff1e665 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java @@ -27,7 +27,7 @@ import org.bitrepository.common.filestore.FileInfo; import org.bitrepository.common.filestore.FileStore; import org.bitrepository.common.utils.ChecksumUtils; -import org.bitrepository.pillar.DefaultFixturePillarTest; +import org.bitrepository.pillar.DefaultFixturePillarIT; import org.bitrepository.pillar.store.checksumcache.MemoryCacheMock; import org.bitrepository.pillar.store.checksumdatabase.ChecksumStore; import org.bitrepository.pillar.store.filearchive.CollectionArchiveManager; @@ -46,7 +46,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -public class FullPillarModelTest extends DefaultFixturePillarTest { +public class FullPillarModelIT extends DefaultFixturePillarIT { FileStorageModel pillarModel; ChecksumStore cache; FileStore archives; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveIT.java similarity index 98% rename from bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveTest.java rename to bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveIT.java index e6fe898aa..02977c0ed 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/archive/ReferenceArchiveIT.java @@ -28,7 +28,7 @@ import org.bitrepository.SuiteInfoParameterResolver; import org.bitrepository.common.utils.FileUtils; -import org.bitrepository.pillar.DefaultPillarTest; +import org.bitrepository.pillar.DefaultPillarIT; import org.bitrepository.pillar.common.MessageHandlerContext; import org.bitrepository.pillar.messagehandler.PillarMediator; import org.bitrepository.pillar.store.filearchive.ReferenceArchive; @@ -50,7 +50,7 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @ExtendWith(SuiteInfoParameterResolver.class) -class ReferenceArchiveTest extends DefaultPillarTest { +class ReferenceArchiveIT extends DefaultPillarIT { protected ReferenceArchive archive; protected PillarMediator mediator; protected MockAuditManager audits; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java index 0ceacac8f..7a56d7026 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java @@ -39,10 +39,14 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.testcontainers.containers.BindMode; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.postgresql.PostgreSQLContainer; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.Statement; import java.time.Instant; import java.util.List; @@ -50,7 +54,6 @@ import static org.bitrepository.common.utils.AllureTestUtils.addStep; @Testcontainers -@Disabled class ChecksumDatabaseTest { private String collectionID; protected Settings settings; @@ -60,22 +63,30 @@ class ChecksumDatabaseTest { private static final Instant DEFAULT_DATE = Instant.ofEpochMilli(System.currentTimeMillis()); @Container - static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine"); + static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine") + .withClasspathResourceMapping( + "sql/postgres/checksumDBCreation.sql", + "/docker-entrypoint-initdb.d/init.sql", + BindMode.READ_ONLY); @BeforeEach void setup() throws Exception { loadSettings(); collectionID = settings.getCollections().get(0).getID(); - var dbsettings = settings.getReferenceSettings().getPillarSettings().getChecksumDatabase(); dbsettings.setDatabaseURL(postgreSQLContainer.getJdbcUrl()); dbsettings.setUsername(postgreSQLContainer.getUsername()); dbsettings.setPassword(postgreSQLContainer.getPassword()); dbsettings.setDriverClass(postgreSQLContainer.getDriverClassName()); - ChecksumDatabaseCreator checksumDatabaseCreator = new ChecksumDatabaseCreator(); - checksumDatabaseCreator.createChecksumDatabase(settings, "sql/postgres/checksumDBCreation.sql"); + try (var connection = DriverManager.getConnection(dbsettings.getDatabaseURL(), + dbsettings.getUsername(), + dbsettings.getPassword()); + var statement = connection.createStatement()) { + //quickly empty the database between tests + statement.execute("TRUNCATE TABLE checksums;"); + } } @Test @@ -102,12 +113,13 @@ void testChecksumDatabaseExtraction() { addStep("Extract all entries", "Should only be the one default."); List entries = cache.getChecksumResults((Instant) null, (Instant) null, - null, collectionID).getEntries(); + null, collectionID).getEntries(); Assertions.assertEquals(1, entries.size()); Assertions.assertEquals(DEFAULT_FILE_ID, entries.get(0).getFileID()); Assertions.assertEquals(DEFAULT_CHECKSUM, Base16Utils.decodeBase16(entries.get(0).getChecksumValue())); Assertions.assertEquals(DEFAULT_DATE, - CalendarUtils.convertFromXMLGregorianCalendarToInstant(entries.get(0).getCalculationTimestamp())); + CalendarUtils.convertFromXMLGregorianCalendarToInstant(entries.get(0) + .getCalculationTimestamp())); } @Test @@ -120,10 +132,10 @@ void testDeletion() { addStep("Check whether the default entry exists.", "It does!"); Assertions.assertTrue(cache.hasFile(DEFAULT_FILE_ID, collectionID)); ExtractedFileIDsResultSet res = - cache.getFileIDs((Instant) null, (Instant) null, null, null, collectionID); + cache.getFileIDs((Instant) null, (Instant) null, null, null, collectionID); Assertions.assertEquals(1, res.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(DEFAULT_FILE_ID, - res.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + res.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Remove the default entry", "Should no longer exist"); cache.deleteEntry(DEFAULT_FILE_ID, collectionID); @@ -158,7 +170,7 @@ void testReplacingExistingEntry() { Assertions.assertEquals(newChecksum, newEntry.getChecksum()); Assertions.assertNotEquals(oldEntry.getChecksum(), newEntry.getChecksum()); Assertions.assertNotEquals(oldEntry.getCalculationInstant().toEpochMilli(), - newEntry.getCalculationInstant().toEpochMilli()); + newEntry.getCalculationInstant().toEpochMilli()); } @Test @@ -199,7 +211,7 @@ void testExtractionOfMissingData() { @Tag("pillartest") void testSpecifiedEntryExtraction() { addDescription("Test that specific entries can be extracted. Has two entries in the database: " - + "one for the current timestamp and one for the epoch."); + + "one for the current timestamp and one for the epoch."); addStep("Instantiate database with appropriate data.", ""); Instant beforeTest = Instant.now().minusSeconds(100); String oldFile = "VeryOldFile"; @@ -208,7 +220,7 @@ void testSpecifiedEntryExtraction() { addStep("Extract with out restrictions", "Both entries."); ExtractedChecksumResultSet extractedResults = - cache.getChecksumResults((Instant) null, (Instant) null, null, collectionID); + cache.getChecksumResults((Instant) null, (Instant) null, null, collectionID); Assertions.assertEquals(2, extractedResults.getEntries().size()); addStep("Extract with a maximum of 1 entry", "The oldest entry"); @@ -216,7 +228,8 @@ void testSpecifiedEntryExtraction() { Assertions.assertEquals(1, extractedResults.getEntries().size()); ChecksumDataForChecksumSpecTYPE dataEntry = extractedResults.getEntries().get(0); Assertions.assertEquals(0, - CalendarUtils.convertFromXMLGregorianCalendar(dataEntry.getCalculationTimestamp()).getTime()); + CalendarUtils.convertFromXMLGregorianCalendar(dataEntry.getCalculationTimestamp()) + .getTime()); Assertions.assertEquals(oldFile, dataEntry.getFileID()); addStep("Extract all dates older than this tests instantiation", "The oldest entry"); @@ -224,7 +237,8 @@ void testSpecifiedEntryExtraction() { Assertions.assertEquals(1, extractedResults.getEntries().size()); dataEntry = extractedResults.getEntries().get(0); Assertions.assertEquals(0, - CalendarUtils.convertFromXMLGregorianCalendar(dataEntry.getCalculationTimestamp()).getTime()); + CalendarUtils.convertFromXMLGregorianCalendar(dataEntry.getCalculationTimestamp()) + .getTime()); Assertions.assertEquals(oldFile, dataEntry.getFileID()); addStep("Extract all dates newer than this tests instantiation", "The default entry"); @@ -232,7 +246,7 @@ void testSpecifiedEntryExtraction() { Assertions.assertEquals(1, extractedResults.getEntries().size()); dataEntry = extractedResults.getEntries().get(0); Assertions.assertEquals(DEFAULT_DATE, - CalendarUtils.convertFromXMLGregorianCalendarToInstant(dataEntry.getCalculationTimestamp())); + CalendarUtils.convertFromXMLGregorianCalendarToInstant(dataEntry.getCalculationTimestamp())); Assertions.assertEquals(DEFAULT_FILE_ID, dataEntry.getFileID()); addStep("Extract all dates older than the newest instance", "Both entries"); @@ -262,7 +276,7 @@ void testGetFileIDsRestrictions() { addStep("Test with no time restrictions and 10000 max_results", "Delivers both files."); ExtractedFileIDsResultSet efirs = - cache.getFileIDs((Instant) null, (Instant) null, 100000L, null, collectionID); + cache.getFileIDs((Instant) null, (Instant) null, 100000L, null, collectionID); Assertions.assertEquals(2, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); addStep("Test with minimum-date earlier than first file", "Delivers both files."); @@ -285,18 +299,18 @@ void testGetFileIDsRestrictions() { efirs = cache.getFileIDs(MIDDLE_DATE, (Instant) null, 100000L, null, collectionID); Assertions.assertEquals(1, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(FILE_ID_2, - efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Test with maximum-date set to middle date.", "Delivers first file."); efirs = cache.getFileIDs((Instant) null, MIDDLE_DATE, 100000L, null, collectionID); Assertions.assertEquals(1, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(FILE_ID_1, - efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Test with both minimum-date and maximum-date set to middle date.", "Delivers no files."); efirs = cache.getFileIDs(MIDDLE_DATE, - MIDDLE_DATE, 100000L, null, collectionID); + MIDDLE_DATE, 100000L, null, collectionID); Assertions.assertEquals(0, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); addStep("Test the first file-id, with no other restrictions", @@ -304,19 +318,19 @@ void testGetFileIDsRestrictions() { efirs = cache.getFileIDs((Instant) null, (Instant) null, 100000L, FILE_ID_1, collectionID); Assertions.assertEquals(1, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(FILE_ID_1, - efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Test the second file-id, with no other restrictions", "Only delivers the requested file-id"); efirs = cache.getFileIDs((Instant) null, (Instant) null, 100000L, FILE_ID_2, collectionID); Assertions.assertEquals(1, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(FILE_ID_2, - efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Test the date for the first file-id, while requesting the second file-id", "Should not deliver anything"); efirs = cache.getFileIDs(Instant.EPOCH, MIDDLE_DATE, - 100000L, FILE_ID_2, collectionID); + 100000L, FILE_ID_2, collectionID); Assertions.assertEquals(0, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); } @@ -330,47 +344,47 @@ void testGetChecksumResult() { addStep("Test with no time restrictions", "Retrieves the file"); ExtractedChecksumResultSet extractedChecksums = cache.getChecksumResult((Instant) null, (Instant) null, - DEFAULT_FILE_ID, collectionID); + DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(1, extractedChecksums.getEntries().size()); Assertions.assertEquals(DEFAULT_FILE_ID, extractedChecksums.getEntries().get(0).getFileID()); addStep("Test with time restrictions from epoc to now", "Retrieves the file"); extractedChecksums = cache.getChecksumResult(Instant.EPOCH, Instant.now(), - DEFAULT_FILE_ID, collectionID); + DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(1, extractedChecksums.getEntries().size()); addStep("Test with very strict time restrictions around the default date", "Retrieves the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE.minusMillis(1), - DEFAULT_DATE.plusMillis(1), DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE.plusMillis(1), DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(1, extractedChecksums.getEntries().size()); addStep("Test with too new a lower limit", "Does not retrieve the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE.plusMillis(1), - Instant.now(), DEFAULT_FILE_ID, collectionID); + Instant.now(), DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(0, extractedChecksums.getEntries().size()); addStep("Test with exact date as both upper and lower limit", "Does not retrieve the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE, - DEFAULT_DATE, DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE, DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(0, extractedChecksums.getEntries().size()); addStep("Test with date limit from 1 millis before as lower and exact date a upper limit", "Does retrieve the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE.minusMillis(1), - DEFAULT_DATE, DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE, DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(1, extractedChecksums.getEntries().size()); addStep("Test with date limit from exact date as lower and 1 millis after date a upper limit", "Does not retrieve the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE, - DEFAULT_DATE.plusMillis(1), DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE.plusMillis(1), DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(0, extractedChecksums.getEntries().size()); addStep("Test with too old an upper limit", "Does not retrieve the file"); extractedChecksums = cache.getChecksumResult(Instant.EPOCH, - DEFAULT_DATE.minusMillis(1), DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE.minusMillis(1), DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(0, extractedChecksums.getEntries().size()); } diff --git a/pom.xml b/pom.xml index f36cc1df1..6de914734 100644 --- a/pom.xml +++ b/pom.xml @@ -342,14 +342,7 @@ org.apache.maven.plugins maven-failsafe-plugin - - - - integration-test - verify - - - + true maven-release-plugin @@ -496,7 +489,15 @@ maven-failsafe-plugin - 3.5.4 + 3.5.5 + + + + integration-test + verify + + + maven-war-plugin From 64a4365ca951c04e56600562b366daaf3ea1f766 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Wed, 10 Jun 2026 12:16:16 +0200 Subject: [PATCH 06/22] alarmDatabaseTest better --- .../org/bitrepository/alarm/store/AlarmDatabaseTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java index 145940ad5..e7e13a4b3 100644 --- a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java +++ b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java @@ -34,6 +34,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; +import org.testcontainers.containers.BindMode; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.postgresql.PostgreSQLContainer; @@ -64,7 +65,8 @@ class AlarmDatabaseTest { @Container PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine") - .withDatabaseName(DATABASE_NAME); + .withDatabaseName(DATABASE_NAME) + .withClasspathResourceMapping("sql/postgres/alarmServiceDBCreation.sql", "/docker-entrypoint-initdb.d/init.sql", BindMode.READ_ONLY); @BeforeEach void setup() { @@ -74,9 +76,6 @@ void setup() { dbsettings.setUsername(postgreSQLContainer.getUsername()); dbsettings.setPassword(postgreSQLContainer.getPassword()); dbsettings.setDriverClass(postgreSQLContainer.getDriverClassName()); - - AlarmDatabaseCreator integrityDatabaseCreator = new AlarmDatabaseCreator(); - integrityDatabaseCreator.createAlarmDatabase(settings, "sql/postgres/alarmServiceDBCreation.sql"); } @AfterEach From 7c2349a142e9a9456bf41bc88f03bbe1677d3328 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 18 Jun 2026 18:09:10 +0200 Subject: [PATCH 07/22] Integration tests fixed --- .../putfile/PutFileClientComponentIT.java | 5 +- .../protocol/IntegrationTest.java | 3 +- .../protocol/MessageReceiverManager.java | 9 +- .../protocol/bus/ActiveMQMessageBusIT.java | 12 +- .../protocol/bus/GeneralMessageBusIT.java | 6 +- .../protocol/bus/MessageReceiver.java | 133 +++++++++++++----- .../performancetest/MessageBusDelayTest.java | 3 +- .../integration/PillarIntegrationIT.java | 17 ++- .../func/DefaultPillarIdentificationIT.java | 4 +- .../func/DefaultPillarMessagingIT.java | 22 ++- .../func/DefaultPillarOperationIT.java | 5 +- .../func/deletefile/DeleteFileRequestIT.java | 18 +-- .../IdentifyPillarsForDeleteFileIT.java | 15 +- .../IdentifyPillarsForGetChecksumsIT.java | 15 +- .../func/getfile/GetFileRequestIT.java | 28 ++-- .../IdentifyPillarsForGetFileIDsIT.java | 6 +- .../putfile/IdentifyPillarsForPutFileIT.java | 24 ++-- .../func/putfile/PutFileRequestIT.java | 15 +- .../IdentifyPillarsForReplaceFileIT.java | 4 +- .../replacefile/ReplaceFileRequestIT.java | 11 +- 20 files changed, 223 insertions(+), 132 deletions(-) diff --git a/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java b/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java index ae654aa05..3e1861f7a 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java +++ b/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java @@ -303,7 +303,7 @@ public void putClientOperationTimeout() throws Exception { .createIdentifyPillarsForPutFileResponse( receivedIdentifyRequestMessage, PILLAR1_ID, pillar1DestinationId); messageBus.sendMessage(identifyResponse); - pillar1Receiver.waitForMessage(PutFileRequest.class, 10, TimeUnit.SECONDS); + pillar1Receiver.waitForMessage(PutFileRequest.class, 10, TimeUnit.SECONDS, identifyResponse.getCorrelationID()); addStep("Validate the steps of the PutClient by going through the events.", "Should be 'PillarIdentified', " + "'PillarSelected' and 'RequestSent'"); @@ -344,7 +344,8 @@ public void putClientPillarOperationFailed() throws Exception { IdentifyPillarsForPutFileResponse identifyResponse = messageFactory.createIdentifyPillarsForPutFileResponse( receivedIdentifyRequestMessage, PILLAR1_ID, pillar1DestinationId); messageBus.sendMessage(identifyResponse); - PutFileRequest receivedPutFileRequest = pillar1Receiver.waitForMessage(PutFileRequest.class, 10, TimeUnit.SECONDS); + PutFileRequest receivedPutFileRequest = pillar1Receiver.waitForMessage(PutFileRequest.class, 10, TimeUnit.SECONDS, + identifyResponse.getCorrelationID()); addStep("Validate the steps of the PutClient by going through the events.", "Should be 'PillarIdentified', 'PillarSelected' and 'RequestSent'"); diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java index d460a686e..2e51c6d31 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java @@ -163,7 +163,7 @@ protected void initializeCUT() { } @AfterEach - public final void afterMethod(TestInfo testInfo) { + public final void afterMethod(TestInfo testInfo) throws InterruptedException { if (receiverManager != null) { receiverManager.stopListeners(); @@ -181,6 +181,7 @@ public final void afterMethod(TestInfo testInfo) { } } } + receiverManager.close(); } private static ListAppender hookLogger() { diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageReceiverManager.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageReceiverManager.java index 99cda6a66..63f155bce 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageReceiverManager.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageReceiverManager.java @@ -30,7 +30,7 @@ /** * Takes care of the receiver bookkeeping in connect with test setup and testdown. */ -public class MessageReceiverManager { +public class MessageReceiverManager implements AutoCloseable{ private final List messageReceivers = new LinkedList<>(); private final MessageBus messageBus; @@ -68,4 +68,11 @@ public void clearMessagesInReceivers() { receiver.clearMessages(); } } + + @Override + public void close() throws InterruptedException { + for (MessageReceiver receiver : messageReceivers) { + receiver.close(); + } + } } \ No newline at end of file diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java index 7804850a4..701c15bf2 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java @@ -110,13 +110,13 @@ final void collectionFilterTest() throws Exception { identifyRequest.getCorrelationID()); rawMessagebus.sendMessage(collectionDestination, msg); - collectionReceiver.waitForMessage(identifyRequest.getClass()); + collectionReceiver.waitForMessage(identifyRequest.getClass(), identifyRequest.getCorrelationID()); addStep("Send an identify request with the 'Collection' header property set to my collection", "Verify that the request bus accepts this message."); msg.setStringProperty(ActiveMQMessageBus.COLLECTION_ID_KEY, myCollectionID); rawMessagebus.sendMessage(collectionDestination, msg); - collectionReceiver.waitForMessage(identifyRequest.getClass()); + collectionReceiver.waitForMessage(identifyRequest.getClass(), identifyRequest.getCorrelationID()); addStep("Send an invalid message with the 'Receiver' header property set to another specific component", "Verify that the message bus ignores this before parsing the message."); @@ -173,13 +173,13 @@ final void toFilterTest() throws Exception { null, identifyRequest.getCorrelationID()); rawMessagebus.sendMessage(collectionDestination, msg); - var msg1 = collectionReceiver.waitForMessage(identifyRequest.getClass()); + var msg1 = collectionReceiver.waitForMessage(identifyRequest.getClass(), identifyRequest.getCorrelationID()); addStep("Send an identify request with the 'To' header property set to this component", "Verify that the identify request bus accepts this identify request."); msg.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, settingsForTestClient.getComponentID()); rawMessagebus.sendMessage(collectionDestination, msg); - var msg2 = collectionReceiver.waitForMessage(identifyRequest.getClass()); + var msg2 = collectionReceiver.waitForMessage(identifyRequest.getClass(), identifyRequest.getCorrelationID()); addStep("Send an invalid identify request with the 'To' header property set to another specific component", "Verify that the identify request bus ignores this before parsing the identify request."); @@ -199,7 +199,7 @@ final void toFilterTest() throws Exception { identifyRequest.getCorrelationID()); response.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); rawMessagebus.sendMessage(collectionDestination, response); - var msg3 = collectionReceiver.waitForMessage(identifyResponse.getClass()); + var msg3 = collectionReceiver.waitForMessage(identifyResponse.getClass(), identifyRequest.getCorrelationID()); addStep("Send an non-identify request with the 'To' header property set to another component", "Verify that the message bus accepts this message."); @@ -213,7 +213,7 @@ final void toFilterTest() throws Exception { identifyRequest.getCorrelationID()); response.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); rawMessagebus.sendMessage(collectionDestination, deleteFileRequestMessage); - var msg4 = collectionReceiver.waitForMessage(deleteFileRequest.getClass()); + var msg4 = collectionReceiver.waitForMessage(deleteFileRequest.getClass(), identifyRequest.getCorrelationID()); } } } \ No newline at end of file diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java index 76cac3396..90cb3eeca 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java @@ -90,7 +90,7 @@ final void busActivityTest() throws Exception { addStep("Make sure both listeners received the message", "Both listeners received the message, and it is identical"); - alarmReceiver.waitForMessage(message.getClass()); + alarmReceiver.waitForMessage(message.getClass(), message.getCorrelationID()); } @Test @@ -114,8 +114,8 @@ final void twoListenersForTopicTest() throws Exception { addStep("Make sure both listeners received the message", "Both listeners received the message, and it is identical"); - receiver1.waitForMessage(AlarmMessage.class); - receiver2.waitForMessage(AlarmMessage.class); + receiver1.waitForMessage(AlarmMessage.class, message.getCorrelationID()); + receiver2.waitForMessage(AlarmMessage.class, message.getCorrelationID()); } @Test diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java index d11bcbf53..e592d958d 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java @@ -16,8 +16,8 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public + * + * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * . * #L% @@ -35,10 +35,17 @@ import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; /** * May be added as listener to the message queue where it will store all received messages for later reading. @@ -59,12 +66,19 @@ * } * */ -public class MessageReceiver { +public class MessageReceiver implements AutoCloseable { private final Logger log = LoggerFactory.getLogger(this.getClass()); private final MessageModel messageModel = new MessageModel(); private final String destination; private final MessageListener messageListener; + private final ExecutorService executorService = Executors.newCachedThreadPool(); + + @Override + public void close() throws InterruptedException { + var actives = executorService.shutdownNow(); + var allClosed = executorService.awaitTermination(10, TimeUnit.SECONDS); + } /** * @param destination The destination to use for the receiver. Primarily used for logging purposes. @@ -87,45 +101,88 @@ public void setFromFilter(Collection filter) { public MessageListener getMessageListener() { return messageListener; } - + /** - * Corresponds to the {@link #waitForMessage(Class, long, TimeUnit)} method with a default timeout of 10 second. + * Corresponds to the {@link #waitForMessage(Class, long, TimeUnit, String)} method with a default timeout of 10 second. */ - public T waitForMessage(Class messageType) { - return waitForMessage(messageType, 10, TimeUnit.SECONDS); + public T waitForMessage(Class messageType) { + return waitForMessage(messageType, 10, TimeUnit.SECONDS, null); } /** - * Waits for a message of the specified type to be received on the test message queue, when the message is + * Corresponds to the {@link #waitForMessage(Class, long, TimeUnit, String)} method with a default timeout of 10 second. + */ + public T waitForMessage(Class messageType, String correlationId) { + return waitForMessage(messageType, 10, TimeUnit.SECONDS, correlationId); + } + + public T waitForMessage(Class messageType, + long timeout, + TimeUnit unit) { + return waitForMessage(messageType, timeout, unit, null); + } + + /** + * Waits for a message of the specified type to be received on the test message queue, when the message is * received (or if one is already present) the message is returned. - * - * @param messageType The type of message to wait for. - * @param timeout The amount of time to wait for a message of this type. - * @param unit The unit of time for the timeout value + * + * @param messageType The type of message to wait for. + * @param timeout The amount of time to wait for a message of this type. + * @param unit The unit of time for the timeout value + * @param correlationID if not null, will wait for messages with this exact correlation ID, ignoring other messages * @return The received message or null if no message was received. */ - public T waitForMessage(Class messageType, long timeout, TimeUnit unit) { - long startWait = System.currentTimeMillis(); - T message; + public T waitForMessage(Class messageType, + long timeout, + TimeUnit unit, + final String correlationID) { + try { - message = messageModel.getMessageQueue(messageType).poll(timeout, unit); - } catch (InterruptedException e) { - throw new RuntimeException(e); // Should never happen + Callable objectCallable = () -> waitForMessageLoop(messageType, correlationID); + return executorService.invokeAny(List.of(objectCallable), + timeout, + unit); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } catch (TimeoutException e) { + return Assertions.fail("Wait for " + + messageType.getSimpleName() + + " message timed out"); } - long waitTime = System.currentTimeMillis() - startWait; - if (message != null) { - log.debug("Read message after ({} ms): {}", waitTime, message); - } else { - log.info("Wait for {} message timed out ({} ms).", messageType.getSimpleName(), waitTime); - Assertions.fail("Wait for " + messageType.getSimpleName() + " message timed out (" + waitTime + " ms)."); + } + + + private T waitForMessageLoop(Class messageType, + final String correlationID) { + + while (true) { + T message; + try { + BlockingQueue messageQueue = messageModel.getMessageQueue(messageType); + message = messageQueue.poll(); + + if (message == null) { + Thread.sleep(1000); + continue; + } + if (correlationID == null || Objects.equals(message.getCorrelationID(), + correlationID)) { + return message; + } else { + messageQueue.put(message); + } + } catch (InterruptedException e) { + return null; + } } - return message; } - /** - * Verifies no message of the given type is received. - * @param messageType The type of message to wait for. - */ + + /** + * Verifies no message of the given type is received. + * + * @param messageType The type of message to wait for. + */ public void checkNoMessageIsReceived(Class messageType) { T message; try { @@ -143,13 +200,13 @@ public void checkNoMessageIsReceived(Class messageType) { */ public void checkNoMessagesRemain() { StringBuilder outstandingMessages = new StringBuilder(); - for (BlockingQueue messageQueue:messageModel.getMessageQueues()) { + for (BlockingQueue messageQueue : messageModel.getMessageQueues()) { if (!messageQueue.isEmpty()) { while (!messageQueue.isEmpty()) { - outstandingMessages.append("\n" + messageQueue.poll()); + outstandingMessages.append("\n").append(messageQueue.poll()); } } - if (outstandingMessages.length() > 0 ) { + if (!outstandingMessages.isEmpty()) { String info = "The following messages haven't been handled by the testcase: " + outstandingMessages; log.warn(info); } @@ -160,21 +217,23 @@ public void checkNoMessagesRemain() { * Clears the message in the queue. */ public void clearMessages() { - for (BlockingQueue messageQueue:messageModel.getMessageQueues()) { + for (BlockingQueue messageQueue : messageModel.getMessageQueues()) { if (!messageQueue.isEmpty()) { messageQueue.clear(); } } } - private class MessageModel { + private static class MessageModel { private final Map, BlockingQueue> messageMap = new HashMap<>(); private Collection pillarFilter; private void addMessage(T message) { - if (pillarFilter != null && !pillarFilter.contains(((Message)message).getFrom())) return; + if (pillarFilter != null && !pillarFilter.contains(((Message) message).getFrom())) { + return; + } @SuppressWarnings("unchecked") - BlockingQueue queue = (BlockingQueue)getMessageQueue(message.getClass()); + BlockingQueue queue = (BlockingQueue) getMessageQueue(message.getClass()); queue.add(message); } @@ -184,7 +243,7 @@ private synchronized BlockingQueue getMessageQueue(Class messageType) } @SuppressWarnings("unchecked") - BlockingQueue queue = (BlockingQueue)messageMap.get(messageType); + BlockingQueue queue = (BlockingQueue) messageMap.get(messageType); return queue; } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusDelayTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusDelayTest.java index 42167e56b..7f9073909 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusDelayTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusDelayTest.java @@ -92,7 +92,8 @@ public void performStatisticalAnalysisOfMessageDelay() throws Exception { for (int i = 0; i < PERFORMANCE_COUNT; i++) { Instant before = Instant.now(); messageBus.sendMessage(message); - AlarmMessage received = destinationReceiver.waitForMessage(AlarmMessage.class, 100, TimeUnit.SECONDS); + AlarmMessage received = destinationReceiver.waitForMessage(AlarmMessage.class, 100, TimeUnit.SECONDS, + message.getCorrelationID()); Instant after = Instant.now(); if (received == null) { System.err.println("No message received within 100 seconds"); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java index 0e2c64429..036026e45 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java @@ -23,6 +23,7 @@ import io.qameta.allure.Allure; import jakarta.jms.JMSException; +import org.apache.commons.io.FileUtils; import org.bitrepository.SuiteInfo; import org.bitrepository.SuiteInfoParameterResolver; import org.bitrepository.client.conversation.mediator.CollectionBasedConversationMediator; @@ -68,6 +69,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; +import java.nio.file.Path; import static org.bitrepository.common.utils.AllureTestUtils.isTestRunning; @@ -344,8 +346,21 @@ protected void afterMethodVerification() { protected void putDefaultFile() { try { + + Path path = new File(settingsForCUT.getReferenceSettings().getFileExchangeSettings().getPath()).toPath(); + + try { + FileUtils.forceMkdir(path.toFile()); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + File srcFile = new File(Thread.currentThread() + .getContextClassLoader() + .getResource("default-test-file.txt") + .getFile()); + FileExchange fe = ProtocolComponentFactory.getInstance().getFileExchange(settingsForCUT); - try (InputStream fis = getClass().getClassLoader().getResourceAsStream("default-test-file.txt")) { + try (InputStream fis = FileUtils.openInputStream(srcFile)) { fe.putFile(fis, defaultFileUrl); } catch (IOException e) { throw new UncheckedIOException("Failed to upload default test file", e); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java index 5d58bae5f..e756180e6 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java @@ -49,8 +49,8 @@ public void irrelevantCollectionTest() { assertNoResponseIsReceived(); } - protected void assertPositivResponseIsReceived() { - MessageResponse receivedResponse = receiveResponse(); + protected void assertPositivResponseIsReceived(MessageRequest request) { + MessageResponse receivedResponse = receiveResponse(request); Assertions.assertEquals(ResponseCode.IDENTIFICATION_POSITIVE, receivedResponse.getResponseInfo().getResponseCode()); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java index b719aeeae..eff944e2f 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java @@ -26,6 +26,7 @@ import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.pillar.PillarTestGroups; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -40,6 +41,11 @@ */ public abstract class DefaultPillarMessagingIT extends PillarFunctionIT { + @AfterEach + void clearReceiver(){ + clientReceiver.clearMessages(); + } + @Test @Tag(PillarTestGroups.FULL_PILLAR_TEST) @Tag(PillarTestGroups.CHECKSUM_PILLAR_TEST) @@ -50,8 +56,7 @@ public void missingCollectionIDTest() { MessageRequest request = createRequest(); request.setCollectionID(null); messageBus.sendMessage(request); - - MessageResponse receivedResponse = receiveResponse(); + MessageResponse receivedResponse = receiveResponse(request); Assertions.assertEquals(ResponseCode.REQUEST_NOT_UNDERSTOOD_FAILURE, receivedResponse.getResponseInfo().getResponseCode()); } @@ -66,14 +71,19 @@ public void otherCollectionTest() { MessageRequest request = createRequest(); request.setCollectionID(nonDefaultCollectionId); messageBus.sendMessage(request); - assertPositivResponseIsReceived(); + MessageResponse receivedResponse = receiveResponse(request); + + if (this.getClass().getSimpleName().startsWith("Identify")){ + // I challenge the next guy to figure out when the code is IDENTIFICATION_POSITIVE and when it is OPERATION_COMPLETED + Assertions.assertEquals(ResponseCode.IDENTIFICATION_POSITIVE, receivedResponse.getResponseInfo().getResponseCode()); + } else { + Assertions.assertEquals(ResponseCode.OPERATION_COMPLETED, receivedResponse.getResponseInfo().getResponseCode()); + } } protected abstract MessageRequest createRequest(); - protected abstract MessageResponse receiveResponse(); - - protected abstract void assertPositivResponseIsReceived(); + protected abstract MessageResponse receiveResponse(MessageRequest request); protected abstract void assertNoResponseIsReceived(); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationIT.java index e1d32fda9..d9e477a5c 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarOperationIT.java @@ -23,13 +23,14 @@ package org.bitrepository.pillar.integration.func; import org.bitrepository.bitrepositoryelements.ResponseCode; +import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; import org.junit.jupiter.api.Assertions; public abstract class DefaultPillarOperationIT extends DefaultPillarMessagingIT { - protected void assertPositivResponseIsReceived() { - MessageResponse receivedResponse = receiveResponse(); + protected void assertPositivResponseIsReceived(MessageRequest request) { + MessageResponse receivedResponse = receiveResponse(request); Assertions.assertEquals(ResponseCode.OPERATION_COMPLETED, receivedResponse.getResponseInfo().getResponseCode()); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java index 5c99f52bf..d3b96c100 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java @@ -71,19 +71,20 @@ void normalDeleteFileTest() { addStep("Send a DeleteFile request to " + testConfiguration.getPillarUnderTestID(), "The pillar should generate a OPERATION_ACCEPTED_PROGRESS progress response followed by a " + "OPERATION_COMPLETED final response"); - DeleteFileRequest deleteRequest = (DeleteFileRequest) createRequest(); + DeleteFileRequest deleteRequest = createRequest(); deleteRequest.setFileID(testSpecificFileID); messageBus.sendMessage(deleteRequest); DeleteFileProgressResponse progressResponse = - clientReceiver.waitForMessage(DeleteFileProgressResponse.class, getOperationTimeout(), TimeUnit.SECONDS); + clientReceiver.waitForMessage(DeleteFileProgressResponse.class, getOperationTimeout(), TimeUnit.SECONDS, + deleteRequest.getCorrelationID()); Assertions.assertNotNull(progressResponse); Assertions.assertEquals(deleteRequest.getCorrelationID(), progressResponse.getCorrelationID()); Assertions.assertEquals(getPillarID(), progressResponse.getFrom()); Assertions.assertEquals(getPillarID(), progressResponse.getPillarID()); Assertions.assertEquals(ResponseCode.OPERATION_ACCEPTED_PROGRESS, progressResponse.getResponseInfo().getResponseCode()); - DeleteFileFinalResponse finalResponse = (DeleteFileFinalResponse) receiveResponse(); + DeleteFileFinalResponse finalResponse = receiveResponse(deleteRequest); Assertions.assertNotNull(finalResponse); Assertions.assertEquals(ResponseCode.OPERATION_COMPLETED, finalResponse.getResponseInfo().getResponseCode()); Assertions.assertEquals(deleteRequest.getCorrelationID(), finalResponse.getCorrelationID()); @@ -112,14 +113,15 @@ void requestNewChecksumDeleteFileTest() { messageBus.sendMessage(deleteRequest); DeleteFileProgressResponse progressResponse = clientReceiver.waitForMessage(DeleteFileProgressResponse.class, - getOperationTimeout(), TimeUnit.SECONDS); + getOperationTimeout(), TimeUnit.SECONDS, + deleteRequest.getCorrelationID()); Assertions.assertNotNull(progressResponse); Assertions.assertEquals(deleteRequest.getCorrelationID(), progressResponse.getCorrelationID()); Assertions.assertEquals(getPillarID(), progressResponse.getFrom()); Assertions.assertEquals(getPillarID(), progressResponse.getPillarID()); Assertions.assertEquals(ResponseCode.OPERATION_ACCEPTED_PROGRESS, progressResponse.getResponseInfo().getResponseCode()); - DeleteFileFinalResponse finalResponse = (DeleteFileFinalResponse) receiveResponse(); + DeleteFileFinalResponse finalResponse = receiveResponse(deleteRequest); Assertions.assertNotNull(finalResponse); Assertions.assertEquals(ResponseCode.OPERATION_COMPLETED, finalResponse.getResponseInfo().getResponseCode()); Assertions.assertEquals(deleteRequest.getCorrelationID(), finalResponse.getCorrelationID()); @@ -136,14 +138,14 @@ void requestNewChecksumDeleteFileTest() { } @Override - protected MessageRequest createRequest() { + protected DeleteFileRequest createRequest() { return msgFactory.createDeleteFileRequest(TestFileHelper.getDefaultFileChecksum(), null, defaultFileId); } @Override - protected MessageResponse receiveResponse() { + protected DeleteFileFinalResponse receiveResponse(MessageRequest request) { return clientReceiver.waitForMessage(DeleteFileFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS); + TimeUnit.SECONDS, request.getCorrelationID()); } protected void assertNoResponseIsReceived() { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java index 7d97022a9..3ae1105a2 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java @@ -56,8 +56,7 @@ void normalIdentificationTest() { IdentifyPillarsForDeleteFileRequest identifyRequest = (IdentifyPillarsForDeleteFileRequest) createRequest(); messageBus.sendMessage(identifyRequest); - IdentifyPillarsForDeleteFileResponse receivedIdentifyResponse = clientReceiver.waitForMessage( - IdentifyPillarsForDeleteFileResponse.class); + IdentifyPillarsForDeleteFileResponse receivedIdentifyResponse = receiveResponse(identifyRequest); Assertions.assertEquals(identifyRequest.getCollectionID(), receivedIdentifyResponse.getCollectionID()); Assertions.assertEquals(identifyRequest.getCorrelationID(), receivedIdentifyResponse.getCorrelationID()); Assertions.assertEquals(getPillarID(), receivedIdentifyResponse.getFrom()); @@ -78,8 +77,7 @@ void identificationTestForChecksumPillar() { IdentifyPillarsForDeleteFileRequest identifyRequest = (IdentifyPillarsForDeleteFileRequest) createRequest(); messageBus.sendMessage(identifyRequest); - IdentifyPillarsForDeleteFileResponse receivedIdentifyResponse = clientReceiver.waitForMessage( - IdentifyPillarsForDeleteFileResponse.class); + IdentifyPillarsForDeleteFileResponse receivedIdentifyResponse = receiveResponse(identifyRequest); Assertions.assertEquals(identifyRequest.getCollectionID(), receivedIdentifyResponse.getCollectionID()); Assertions.assertEquals(identifyRequest.getCorrelationID(), receivedIdentifyResponse.getCorrelationID()); Assertions.assertEquals(getPillarID(), receivedIdentifyResponse.getFrom()); @@ -100,20 +98,19 @@ void fileDoesNotExistsTest() { nonDefaultFileId); messageBus.sendMessage(identifyRequest); - IdentifyPillarsForDeleteFileResponse receivedIdentifyResponse = clientReceiver.waitForMessage( - IdentifyPillarsForDeleteFileResponse.class); + IdentifyPillarsForDeleteFileResponse receivedIdentifyResponse = receiveResponse(identifyRequest); Assertions.assertEquals(ResponseCode.FILE_NOT_FOUND_FAILURE, receivedIdentifyResponse.getResponseInfo().getResponseCode()); } @Override - protected MessageRequest createRequest() { + protected IdentifyPillarsForDeleteFileRequest createRequest() { return msgFactory.createIdentifyPillarsForDeleteFileRequest(defaultFileId); } @Override - protected MessageResponse receiveResponse() { - return clientReceiver.waitForMessage(IdentifyPillarsForDeleteFileResponse.class); + protected IdentifyPillarsForDeleteFileResponse receiveResponse(MessageRequest request) { + return clientReceiver.waitForMessage(IdentifyPillarsForDeleteFileResponse.class, request.getCorrelationID()); } @Override diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java index b661bfbac..98b7b57a2 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java @@ -71,8 +71,7 @@ void normalIdentificationTest() { addStep("Retrieve and validate the response getPillarID() the pillar.", "The pillar should make a response."); - IdentifyPillarsForGetChecksumsResponse receivedIdentifyResponse = clientReceiver.waitForMessage( - IdentifyPillarsForGetChecksumsResponse.class); + IdentifyPillarsForGetChecksumsResponse receivedIdentifyResponse = receiveResponse(identifyRequest); Assertions.assertNotNull(receivedIdentifyResponse); Assertions.assertEquals(identifyRequest.getCollectionID(), receivedIdentifyResponse.getCollectionID(), "Received unexpected 'CollectionID' in response."); @@ -107,8 +106,7 @@ void nonExistingFileTest() { addStep("Retrieve and validate the response getPillarID() the pillar.", "The pillar should make a response."); - IdentifyPillarsForGetChecksumsResponse receivedIdentifyResponse = clientReceiver.waitForMessage( - IdentifyPillarsForGetChecksumsResponse.class); + IdentifyPillarsForGetChecksumsResponse receivedIdentifyResponse = receiveResponse(identifyRequest); Assertions.assertNotNull(receivedIdentifyResponse.getFileIDs().getFileID()); Assertions.assertEquals(ResponseCode.FILE_NOT_FOUND_FAILURE, receivedIdentifyResponse.getResponseInfo().getResponseCode(), @@ -132,22 +130,21 @@ void allFilesTest() { addStep("Retrieve and validate the response getPillarID() the pillar.", "The pillar should make a response."); - IdentifyPillarsForGetChecksumsResponse receivedIdentifyResponse = clientReceiver.waitForMessage( - IdentifyPillarsForGetChecksumsResponse.class); + IdentifyPillarsForGetChecksumsResponse receivedIdentifyResponse = receiveResponse(identifyRequest); Assertions.assertEquals(ResponseCode.IDENTIFICATION_POSITIVE, receivedIdentifyResponse.getResponseInfo().getResponseCode(), "Received unexpected 'ResponseCode' in response."); } @Override - protected MessageRequest createRequest() { + protected IdentifyPillarsForGetChecksumsRequest createRequest() { return msgFactory.createIdentifyPillarsForGetChecksumsRequest(ChecksumUtils.getDefault(settingsForCUT), FileIDsUtils.getAllFileIDs()); } @Override - protected MessageResponse receiveResponse() { - return clientReceiver.waitForMessage(IdentifyPillarsForGetChecksumsResponse.class); + protected IdentifyPillarsForGetChecksumsResponse receiveResponse(MessageRequest request) { + return clientReceiver.waitForMessage(IdentifyPillarsForGetChecksumsResponse.class, request == null ? null : request.getCorrelationID()); } @Override diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java index 93cfa7798..82a752bfc 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java @@ -77,10 +77,10 @@ void normalGetFileTest() throws IOException { "

  • 'ResponseInfo.ResponseCode' element should be OPERATION_COMPLETED
  • " + ""); - GetFileRequest getRequest = (GetFileRequest) createRequest(); + GetFileRequest getRequest = createRequest(); messageBus.sendMessage(getRequest); - GetFileFinalResponse finalResponse = (GetFileFinalResponse) receiveResponse(); + GetFileFinalResponse finalResponse = receiveResponse(getRequest); Assertions.assertNotNull(finalResponse); Assertions.assertEquals(getRequest.getCorrelationID(), finalResponse.getCorrelationID(), "Received unexpected " + @@ -123,7 +123,7 @@ void getFileWithFilePartTest() throws IOException { addStep("Send a getFile request to " + testConfiguration.getPillarUnderTestID() + " with a specified " + "FilePart", "The pillar should send a final response with the FilePart element for the supplied file"); - GetFileRequest getRequest = (GetFileRequest) createRequest(); + GetFileRequest getRequest = createRequest(); final int offsetAndLength = 5; FilePart filePart = new FilePart(); @@ -132,7 +132,7 @@ void getFileWithFilePartTest() throws IOException { getRequest.setFilePart(filePart); messageBus.sendMessage(getRequest); - GetFileFinalResponse finalResponse = (GetFileFinalResponse) receiveResponse(); + GetFileFinalResponse finalResponse = receiveResponse(getRequest); Assertions.assertEquals(getRequest.getFilePart(), finalResponse.getFilePart(), "Received unexpected 'FilePart' element."); @@ -154,11 +154,11 @@ void getMissingFileTest() { addStep("Send a getFile request to " + testConfiguration.getPillarUnderTestID() + " with a " + "non-existing fileID", "The pillar should send a failure response"); - GetFileRequest getRequest = (GetFileRequest) createRequest(); + GetFileRequest getRequest = createRequest(); getRequest.setFileID("NonExistingFile"); messageBus.sendMessage(getRequest); - GetFileFinalResponse finalResponse = (GetFileFinalResponse) receiveResponse(); + GetFileFinalResponse finalResponse = receiveResponse(getRequest); Assertions.assertEquals(ResponseCode.FILE_NOT_FOUND_FAILURE, finalResponse.getResponseInfo().getResponseCode(), "Received unexpected 'ResponseCode' element."); } @@ -169,11 +169,11 @@ void missingCollectionIDTest() { addDescription("Verifies the a missing collectionID in the request is rejected"); addStep("Sending a request without a collectionID.", "The pillar should send a REQUEST_NOT_UNDERSTOOD_FAILURE Response."); - MessageRequest request = createRequest(); + GetFileRequest request = createRequest(); request.setCollectionID(null); messageBus.sendMessage(request); - MessageResponse receivedResponse = receiveResponse(); + MessageResponse receivedResponse = receiveResponse(request); Assertions.assertEquals(ResponseCode.REQUEST_NOT_UNDERSTOOD_FAILURE, receivedResponse.getResponseInfo().getResponseCode()); } @@ -188,16 +188,16 @@ void otherCollectionTest() { MessageRequest request = createRequest(); request.setCollectionID(nonDefaultCollectionId); messageBus.sendMessage(request); - assertPositivResponseIsReceived(); + assertPositivResponseIsReceived(request); } - protected MessageRequest createRequest() { + protected GetFileRequest createRequest() { return msgFactory.createGetFileRequest(testFileURL.toExternalForm(), defaultFileId); } - protected MessageResponse receiveResponse() { + protected GetFileFinalResponse receiveResponse(final MessageRequest request) { return clientReceiver.waitForMessage(GetFileFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS); + TimeUnit.SECONDS, request.getCorrelationID()); } protected void assertNoResponseIsReceived() { @@ -213,8 +213,8 @@ public String lookupGetFileDestination() { return clientReceiver.waitForMessage(IdentifyPillarsForGetFileResponse.class).getReplyTo(); } - protected void assertPositivResponseIsReceived() { - MessageResponse receivedResponse = receiveResponse(); + protected void assertPositivResponseIsReceived(final MessageRequest request) { + MessageResponse receivedResponse = receiveResponse(request); Assertions.assertEquals(ResponseCode.OPERATION_COMPLETED, receivedResponse.getResponseInfo().getResponseCode()); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/IdentifyPillarsForGetFileIDsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/IdentifyPillarsForGetFileIDsIT.java index 7f3c36cf7..a987d8018 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/IdentifyPillarsForGetFileIDsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/IdentifyPillarsForGetFileIDsIT.java @@ -137,13 +137,13 @@ void allFilesTest() { } @Override - protected MessageRequest createRequest() { + protected IdentifyPillarsForGetFileIDsRequest createRequest() { return msgFactory.createIdentifyPillarsForGetFileIDsRequest(null); } @Override - protected MessageResponse receiveResponse() { - return clientReceiver.waitForMessage(IdentifyPillarsForGetFileIDsResponse.class); + protected IdentifyPillarsForGetFileIDsResponse receiveResponse(MessageRequest request) { + return clientReceiver.waitForMessage(IdentifyPillarsForGetFileIDsResponse.class, request.getCorrelationID()); } @Override diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java index 9dfdc07d2..1545d6a0f 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java @@ -62,11 +62,11 @@ void normalIdentificationTest() { "
  • 'ResponseInfo.ResponseCode' element should be IDENTIFICATION_POSITIVE
  • " + ""); IdentifyPillarsForPutFileRequest identifyRequest = msgFactory.createIdentifyPillarsForPutFileRequest( - nonDefaultFileId, 0L); + nonDefaultFileId, 0L); messageBus.sendMessage(identifyRequest); - IdentifyPillarsForPutFileResponse receivedIdentifyResponse = clientReceiver.waitForMessage( - IdentifyPillarsForPutFileResponse.class); + IdentifyPillarsForPutFileResponse receivedIdentifyResponse = receiveResponse(identifyRequest); + Assertions.assertEquals(identifyRequest.getCollectionID(), receivedIdentifyResponse.getCollectionID(), "Received unexpected CollectionID"); Assertions.assertEquals(identifyRequest.getCorrelationID(), receivedIdentifyResponse.getCorrelationID(), @@ -100,8 +100,7 @@ void identificationTestForChecksumPillar() { nonDefaultFileId, 0L); messageBus.sendMessage(identifyRequest); - IdentifyPillarsForPutFileResponse receivedIdentifyResponse = clientReceiver.waitForMessage( - IdentifyPillarsForPutFileResponse.class); + IdentifyPillarsForPutFileResponse receivedIdentifyResponse = receiveResponse(identifyRequest); Assertions.assertEquals(identifyRequest.getCollectionID(), receivedIdentifyResponse.getCollectionID()); Assertions.assertEquals(identifyRequest.getCorrelationID(), receivedIdentifyResponse.getCorrelationID()); Assertions.assertEquals(getPillarID(), receivedIdentifyResponse.getFrom()); @@ -127,20 +126,19 @@ void fileExistsTest() { defaultFileId, 0L); messageBus.sendMessage(identifyRequest); - IdentifyPillarsForPutFileResponse receivedIdentifyResponse = clientReceiver.waitForMessage( - IdentifyPillarsForPutFileResponse.class); - Assertions.assertEquals(ResponseCode.DUPLICATE_FILE_FAILURE, receivedIdentifyResponse.getResponseInfo().getResponseCode()); + IdentifyPillarsForPutFileResponse receivedIdentifyResponse = receiveResponse(identifyRequest); + Assertions.assertEquals(ResponseCode.DUPLICATE_FILE_FAILURE, + receivedIdentifyResponse.getResponseInfo().getResponseCode()); } @Override - protected MessageRequest createRequest() { - return msgFactory.createIdentifyPillarsForPutFileRequest( - nonDefaultFileId, 0L); + protected IdentifyPillarsForPutFileRequest createRequest() { + return msgFactory.createIdentifyPillarsForPutFileRequest(nonDefaultFileId, 0L); } @Override - protected MessageResponse receiveResponse() { - return clientReceiver.waitForMessage(IdentifyPillarsForPutFileResponse.class); + protected IdentifyPillarsForPutFileResponse receiveResponse(MessageRequest request) { + return clientReceiver.waitForMessage(IdentifyPillarsForPutFileResponse.class, request.getCorrelationID()); } @Override diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java index f3a32fecb..11e7405aa 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java @@ -78,7 +78,7 @@ void normalPutFileTest() { DEFAULT_FILE_SIZE); messageBus.sendMessage(putRequest); - PutFileFinalResponse finalResponse = (PutFileFinalResponse) receiveResponse(); + PutFileFinalResponse finalResponse = receiveResponse(putRequest); Assertions.assertNotNull(finalResponse); Assertions.assertEquals(putRequest.getCorrelationID(), finalResponse.getCorrelationID(), "Received unexpected 'CorrelationID' element."); @@ -117,7 +117,7 @@ void putFileWithMD5ReturnChecksumTest() { putRequest.setChecksumRequestForNewFile(ChecksumUtils.getDefault(settingsForTestClient)); messageBus.sendMessage(putRequest); - PutFileFinalResponse finalResponse = (PutFileFinalResponse) receiveResponse(); + PutFileFinalResponse finalResponse = receiveResponse(putRequest); Assertions.assertArrayEquals(TestFileHelper.getDefaultFileChecksum().getChecksumValue(), finalResponse.getChecksumDataForNewFile().getChecksumValue(), "Return MD5 checksum was not equals to checksum for default file."); @@ -142,11 +142,12 @@ void putFileOperationAcceptedProgressTest() { "
  • 'FileAddress' element corresponding to the supplied FileAddress
  • " + "
  • 'ResponseInfo.ResponseCode' element should be OPERATION_ACCEPTED_PROGRESS
  • " + ""); - PutFileRequest putRequest = (PutFileRequest) createRequest(); + PutFileRequest putRequest = createRequest(); messageBus.sendMessage(putRequest); PutFileProgressResponse progressResponse = clientReceiver.waitForMessage(PutFileProgressResponse.class, - getOperationTimeout(), TimeUnit.SECONDS); + getOperationTimeout(), TimeUnit.SECONDS, + putRequest.getCorrelationID()); Assertions.assertNotNull(progressResponse); Assertions.assertEquals(putRequest.getCorrelationID(), progressResponse.getCorrelationID(), "Received unexpected 'CorrelationID' element."); @@ -170,15 +171,15 @@ void putFileOperationAcceptedProgressTest() { } @Override - protected MessageRequest createRequest() { + protected PutFileRequest createRequest() { return msgFactory.createPutFileRequest(TestFileHelper.getDefaultFileChecksum(), null, defaultDownloadFileAddress, nonDefaultFileId, DEFAULT_FILE_SIZE); } @Override - protected MessageResponse receiveResponse() { + protected PutFileFinalResponse receiveResponse(MessageRequest request) { return clientReceiver.waitForMessage(PutFileFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS); + TimeUnit.SECONDS, request.getCorrelationID()); } protected void assertNoResponseIsReceived() { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/IdentifyPillarsForReplaceFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/IdentifyPillarsForReplaceFileIT.java index 656d87ac1..105a2caee 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/IdentifyPillarsForReplaceFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/IdentifyPillarsForReplaceFileIT.java @@ -114,8 +114,8 @@ protected MessageRequest createRequest() { } @Override - protected MessageResponse receiveResponse() { - return clientReceiver.waitForMessage(IdentifyPillarsForReplaceFileResponse.class); + protected MessageResponse receiveResponse(MessageRequest request) { + return clientReceiver.waitForMessage(IdentifyPillarsForReplaceFileResponse.class, request.getCorrelationID()); } @Override diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java index b0437d513..0b3502944 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java @@ -73,14 +73,15 @@ void normalReplaceFileTest() { messageBus.sendMessage(replaceRequest); ReplaceFileProgressResponse progressResponse = clientReceiver.waitForMessage(ReplaceFileProgressResponse.class, - getOperationTimeout(), TimeUnit.SECONDS); + getOperationTimeout(), TimeUnit.SECONDS, + replaceRequest.getCorrelationID()); Assertions.assertNotNull(progressResponse); Assertions.assertEquals(replaceRequest.getCorrelationID(), progressResponse.getCorrelationID()); Assertions.assertEquals(getPillarID(), progressResponse.getFrom()); Assertions.assertEquals(getPillarID(), progressResponse.getPillarID()); Assertions.assertEquals(ResponseCode.OPERATION_ACCEPTED_PROGRESS, progressResponse.getResponseInfo().getResponseCode()); - ReplaceFileFinalResponse finalResponse = (ReplaceFileFinalResponse) receiveResponse(); + ReplaceFileFinalResponse finalResponse = receiveResponse(replaceRequest); Assertions.assertNotNull(finalResponse); Assertions.assertEquals(ResponseCode.OPERATION_COMPLETED, finalResponse.getResponseInfo().getResponseCode()); Assertions.assertEquals(replaceRequest.getCorrelationID(), finalResponse.getCorrelationID()); @@ -98,9 +99,9 @@ protected MessageRequest createRequest() { } @Override - protected MessageResponse receiveResponse() { + protected ReplaceFileFinalResponse receiveResponse(MessageRequest request) { return clientReceiver.waitForMessage(ReplaceFileFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS); + TimeUnit.SECONDS, request.getCorrelationID()); } protected void assertNoResponseIsReceived() { @@ -113,6 +114,6 @@ public String lookupReplaceFileDestination() { IdentifyPillarsForReplaceFileRequest identifyRequest = replaceLookupMessageFactory.createIdentifyPillarsForReplaceFileRequest( TestFileHelper.DEFAULT_FILE_ID, 0L); messageBus.sendMessage(identifyRequest); - return clientReceiver.waitForMessage(IdentifyPillarsForReplaceFileResponse.class).getReplyTo(); + return clientReceiver.waitForMessage(IdentifyPillarsForReplaceFileResponse.class, identifyRequest.getCorrelationID()).getReplyTo(); } } From 1c7a20fc9b9e91aaa747c555be2794a7ce949429 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 18 Jun 2026 18:09:28 +0200 Subject: [PATCH 08/22] Stopped the spam of test files in src/test/resources --- .../func/getfileids/GetFileIDsIT.java | 25 +++++++++++-------- .../test/resources/conf/ReferenceSettings.xml | 2 +- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java index 95da203b8..509f59912 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java @@ -27,9 +27,9 @@ import org.bitrepository.bitrepositorymessages.GetFileIDsFinalResponse; import org.bitrepository.bitrepositorymessages.GetFileIDsProgressResponse; import org.bitrepository.bitrepositorymessages.GetFileIDsRequest; +import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileIDsRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileIDsResponse; import org.bitrepository.bitrepositorymessages.MessageRequest; -import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.common.utils.FileIDsUtils; import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.integration.func.DefaultPillarOperationIT; @@ -76,7 +76,8 @@ void pillarGetFileIDsTestSuccessCase() throws Exception { addStep("Retrieve the ProgressResponse for the GetFileIDs request", "A GetFileIDs progress response should be sent to the client with correct attributes."); GetFileIDsProgressResponse progressResponse = clientReceiver.waitForMessage(GetFileIDsProgressResponse.class, - getOperationTimeout(), TimeUnit.SECONDS); + getOperationTimeout(), TimeUnit.SECONDS, + getFileIDsRequest.getCorrelationID()); Assertions.assertNotNull(progressResponse); Assertions.assertEquals(getFileIDsRequest.getCorrelationID(), progressResponse.getCorrelationID()); Assertions.assertEquals(getFileIDsRequest.getFileIDs(), progressResponse.getFileIDs()); @@ -88,7 +89,7 @@ void pillarGetFileIDsTestSuccessCase() throws Exception { addStep("Retrieve the FinalResponse for the GetFileIDs request", "The GetFileIDs response should be sent by the pillar."); - GetFileIDsFinalResponse finalResponse = (GetFileIDsFinalResponse) receiveResponse(); + GetFileIDsFinalResponse finalResponse = receiveResponse(getFileIDsRequest); Assertions.assertNotNull(finalResponse); Assertions.assertEquals(ResponseCode.OPERATION_COMPLETED, finalResponse.getResponseInfo().getResponseCode()); Assertions.assertEquals(getFileIDsRequest.getCorrelationID(), finalResponse.getCorrelationID()); @@ -117,7 +118,7 @@ void pillarGetFileIDsTestFailedNoSuchFileInOperation() throws Exception { "A FILE_NOT_FOUND_FAILURE response should be generated."); GetFileIDsRequest getFileIDsRequest = msgFactory.createGetFileIDsRequest(fileids, null); messageBus.sendMessage(getFileIDsRequest); - GetFileIDsFinalResponse finalResponse = (GetFileIDsFinalResponse) receiveResponse(); + GetFileIDsFinalResponse finalResponse = receiveResponse(getFileIDsRequest); Assertions.assertEquals(ResponseCode.FILE_NOT_FOUND_FAILURE, finalResponse.getResponseInfo().getResponseCode()); } @@ -137,7 +138,7 @@ void pillarGetFileIDsSpecificFileIDRequest() throws Exception { addStep("Retrieve the FinalResponse for the GetFileIDs request.", "A OPERATION_COMPLETE final response only containing the requested file-id."); - GetFileIDsFinalResponse finalResponse = (GetFileIDsFinalResponse) receiveResponse(); + GetFileIDsFinalResponse finalResponse = receiveResponse(getFileIDsRequest); Assertions.assertEquals(1, finalResponse.getResultingFileIDs().getFileIDsData().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(defaultFileId, @@ -158,7 +159,7 @@ void pillarGetFileIDsTestBadDeliveryURL() throws Exception { addStep("Retrieve the FinalResponse for the GetFileIDs request.", "A FILE_TRANSFER_FAILURE final response is expected."); - GetFileIDsFinalResponse finalResponse = (GetFileIDsFinalResponse) receiveResponse(); + GetFileIDsFinalResponse finalResponse = receiveResponse(getFileIDsRequest); Assertions.assertEquals(ResponseCode.FILE_TRANSFER_FAILURE, finalResponse.getResponseInfo().getResponseCode()); } @@ -174,7 +175,7 @@ void pillarGetFileIDsTestDeliveryThroughUpload() throws Exception { addStep("Retrieve the FinalResponse for the GetFileIDs request.", "A OPERATION_COMPLETE final response is expected containing the result provided address."); - GetFileIDsFinalResponse finalResponse = (GetFileIDsFinalResponse) receiveResponse(); + GetFileIDsFinalResponse finalResponse = receiveResponse(getFileIDsRequest); Assertions.assertEquals(ResponseCode.OPERATION_COMPLETED, finalResponse.getResponseInfo().getResponseCode()); Assertions.assertEquals(defaultUploadFileAddress, finalResponse.getResultingFileIDs().getResultAddress()); } @@ -185,9 +186,9 @@ protected MessageRequest createRequest() { } @Override - protected MessageResponse receiveResponse() { + protected GetFileIDsFinalResponse receiveResponse(MessageRequest request) { return clientReceiver.waitForMessage(GetFileIDsFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS); + TimeUnit.SECONDS, request.getCorrelationID()); } protected void assertNoResponseIsReceived() { @@ -195,7 +196,9 @@ protected void assertNoResponseIsReceived() { } public String lookupPillarDestination() { - messageBus.sendMessage(msgFactory.createIdentifyPillarsForGetFileIDsRequest(null)); - return clientReceiver.waitForMessage(IdentifyPillarsForGetFileIDsResponse.class).getReplyTo(); + IdentifyPillarsForGetFileIDsRequest identifyPillarsForGetFileIDsRequest = msgFactory.createIdentifyPillarsForGetFileIDsRequest( + null); + messageBus.sendMessage(identifyPillarsForGetFileIDsRequest); + return clientReceiver.waitForMessage(IdentifyPillarsForGetFileIDsResponse.class, identifyPillarsForGetFileIDsRequest.getCorrelationID()).getReplyTo(); } } diff --git a/bitrepository-reference-pillar/src/test/resources/conf/ReferenceSettings.xml b/bitrepository-reference-pillar/src/test/resources/conf/ReferenceSettings.xml index 0dfa2a708..a76c85112 100644 --- a/bitrepository-reference-pillar/src/test/resources/conf/ReferenceSettings.xml +++ b/bitrepository-reference-pillar/src/test/resources/conf/ReferenceSettings.xml @@ -62,6 +62,6 @@ FILE - src/test/resources + target/fileexchange From 00751f12698a09677cd95ed68800015da16a82f4 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 18 Jun 2026 18:34:02 +0200 Subject: [PATCH 09/22] Fixed timeouts in client tests --- .../access/getfile/GetFileClientComponentIT.java | 8 ++++---- .../access/getstatus/GetStatusClientComponentIT.java | 4 ++-- .../java/org/bitrepository/client/DefaultClientIT.java | 8 +++++--- .../modify/putfile/PutFileClientComponentIT.java | 8 ++++---- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentIT.java b/bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentIT.java index 96ffc4fe5..724ff4462 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentIT.java +++ b/bitrepository-client/src/test/java/org/bitrepository/access/getfile/GetFileClientComponentIT.java @@ -297,9 +297,9 @@ void chooseFastestPillarGetFileClient() throws Exception { @Tag("regressiontest") void getFileClientWithIdentifyTimeout() throws Exception { addDescription("Verify that the GetFile works correct without receiving responses from all pillars."); - addFixture("Set the identification timeout to 500ms"); + addFixture("Set the identification timeout to 2000ms"); settingsForCUT.getRepositorySettings().getClientSettings() - .setIdentificationTimeoutDuration(DatatypeFactory.newInstance().newDuration(500)); + .setIdentificationTimeoutDuration(DatatypeFactory.newInstance().newDuration(2000)); addStep("Call getFile form fastest pillar.", @@ -386,11 +386,11 @@ void noIdentifyResponse() throws Exception { @Tag("regressiontest") void conversationTimeout() throws Exception { addDescription("Tests the the GetFileClient handles lack of IdentifyPillarResponses gracefully "); - addStep("Set the number of pillars to 100ms and a 300 ms timeout for the conversation.", ""); + addStep("Set the number of pillars to 1 and a 1000 ms timeout for the conversation.", ""); settingsForCUT.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID().clear(); settingsForCUT.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID().add(PILLAR1_ID); - settingsForCUT.getReferenceSettings().getClientSettings().setConversationTimeout(DatatypeFactory.newInstance().newDuration(100)); + settingsForCUT.getReferenceSettings().getClientSettings().setConversationTimeout(DatatypeFactory.newInstance().newDuration(1000)); GetFileClient client = createGetFileClient(); addStep("Request the delivery of a file from a specific pillar. A callback listener should be supplied.", diff --git a/bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentIT.java b/bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentIT.java index dabc53e7b..2e9a9a51e 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentIT.java +++ b/bitrepository-client/src/test/java/org/bitrepository/access/getstatus/GetStatusClientComponentIT.java @@ -81,12 +81,12 @@ public void verifyGetStatusClientFromFactory() { public void incompleteSetOfIdendifyResponses() throws Exception { addDescription("Verify that the GetStatus client works correct without receiving responses from all " + "contributors."); - addStep("Configure 1 second timeout for identifying contributors. " + + addStep("Configure 2 second timeout for identifying contributors. " + "The default 2 contributors collection is used", ""); DatatypeFactory datatypeFactory = DatatypeFactory.newInstance(); settingsForCUT.getRepositorySettings().getClientSettings() - .setIdentificationTimeoutDuration(datatypeFactory.newDuration(1000)); + .setIdentificationTimeoutDuration(datatypeFactory.newDuration(2000)); TestEventHandler testEventHandler = new TestEventHandler(); GetStatusClient client = createGetStatusClient(); diff --git a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientIT.java b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientIT.java index 086df5af1..a2de53f26 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientIT.java +++ b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultClientIT.java @@ -154,9 +154,9 @@ public void identificationFailureTest() throws Exception { public void oneContributorNotRespondingTest() throws Exception { addDescription("Verify that the client works correct without receiving identification responses from all " + "contributors."); - addFixture("Set the a identification timeout to 1000 ms."); + addFixture("Set the a identification timeout to 2000 ms."); settingsForCUT.getRepositorySettings().getClientSettings() - .setIdentificationTimeoutDuration(datatypeFactory.newDuration(1000)); + .setIdentificationTimeoutDuration(datatypeFactory.newDuration(2000)); addStep("Start the operation.", "A IDENTIFY_REQUEST_SENT should be generate and a identification request should be sent."); @@ -170,11 +170,13 @@ public void oneContributorNotRespondingTest() throws Exception { MessageResponse identifyResponse1 = createIdentifyResponse(identifyRequest, PILLAR1_ID, pillar1DestinationId); identifyResponse1.getResponseInfo().setResponseCode(ResponseCode.IDENTIFICATION_POSITIVE); messageBus.sendMessage(identifyResponse1); + OperationEvent operationEvent = testEventHandler.waitForEvent(); Assertions.assertEquals(OperationEvent.OperationEventType.COMPONENT_IDENTIFIED, - testEventHandler.waitForEvent().getEventType()); + operationEvent.getEventType()); addStep("Wait 1 second.", "A IDENTIFY_TIMEOUT event should be generated, followed by a IDENTIFICATION_COMPLETE."); + Thread.sleep(2000); Assertions.assertEquals(OperationEvent.OperationEventType.IDENTIFY_TIMEOUT, testEventHandler.waitForEvent().getEventType()); Assertions.assertEquals(OperationEvent.OperationEventType.COMPONENT_FAILED, diff --git a/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java b/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java index 3e1861f7a..da73ddae0 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java +++ b/bitrepository-client/src/test/java/org/bitrepository/modify/putfile/PutFileClientComponentIT.java @@ -190,9 +190,9 @@ public void noPillarsResponding() throws Exception { @Severity(SeverityLevel.CRITICAL) public void onePillarRespondingWithPartialPutAllowed() throws Exception { - Allure.step("Fixture: Set identification timeout to 100 ms and allow partial puts.", () -> { + Allure.step("Fixture: Set identification timeout to 2000 ms and allow partial puts.", () -> { settingsForCUT.getRepositorySettings().getClientSettings() - .setIdentificationTimeoutDuration(datatypeFactory.newDuration(100)); + .setIdentificationTimeoutDuration(datatypeFactory.newDuration(2000)); settingsForCUT.getReferenceSettings().getPutFileSettings().setPartialPutsAllow(true); }); @@ -244,10 +244,10 @@ public void onePillarRespondingWithPartialPutAllowed() throws Exception { public void onePillarRespondingWithPartialPutDisallowed() throws Exception { addDescription("Tests the handling of missing identification responses from one pillar, " + "when partial put are allowed"); - addFixture("Sets the identification timeout to 100 ms and disallow partial puts."); + addFixture("Sets the identification timeout to 2000 ms and disallow partial puts."); settingsForCUT.getRepositorySettings().getClientSettings() - .setIdentificationTimeoutDuration(datatypeFactory.newDuration(100)); + .setIdentificationTimeoutDuration(datatypeFactory.newDuration(2000)); settingsForCUT.getReferenceSettings().getPutFileSettings().setPartialPutsAllow(false); TestEventHandler testEventHandler = new TestEventHandler(); PutFileClient putClient = createPutFileClient(); From 31cf3e9fde5d0f1e9f780b7bcc4c0aa9b33627d8 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 18 Jun 2026 19:27:18 +0200 Subject: [PATCH 10/22] MessageReceivers correctly closed --- .../protocol/bus/GeneralMessageBusIT.java | 6 ++---- .../pillar/DefaultFixturePillarIT.java | 3 +-- .../integration/func/PillarFunctionIT.java | 3 +-- .../multicollection/MultipleCollectionIT.java | 3 +-- .../integration/perf/GetFileStressIT.java | 18 ++++++++++-------- .../bitrepository/service/ContributorIT.java | 6 ++---- 6 files changed, 17 insertions(+), 22 deletions(-) diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java index 90cb3eeca..580b6eff7 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java @@ -100,11 +100,9 @@ final void twoListenersForTopicTest() throws Exception { addStep("Make a connection to the message bus and add two listeners", "No exceptions should be thrown"); - MessageReceiver receiver1 = new MessageReceiver(alarmDestinationID); - addReceiver(receiver1); + MessageReceiver receiver1 = addReceiver(new MessageReceiver(alarmDestinationID)); messageBus.addListener(receiver1.getDestination(), receiver1.getMessageListener()); - MessageReceiver receiver2 = new MessageReceiver(alarmDestinationID); - addReceiver(receiver2); + MessageReceiver receiver2 = addReceiver(new MessageReceiver(alarmDestinationID)); messageBus.addListener(receiver2.getDestination(), receiver2.getMessageListener()); addStep("Send a message to the topic", "No exceptions should be thrown"); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java index edea07cd0..ec99596b6 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java @@ -63,8 +63,7 @@ protected void registerMessageReceivers() { super.registerMessageReceivers(); clientDestinationId = settingsForTestClient.getReceiverDestinationID(); - clientReceiver = new MessageReceiver(clientDestinationId); - addReceiver(clientReceiver); + clientReceiver = addReceiver(new MessageReceiver(clientDestinationId)); pillarDestinationId = settingsForCUT.getContributorDestinationID(); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java index 5945d4f80..603891f1c 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java @@ -50,8 +50,7 @@ public void generalMethodSetup(TestInfo testInfo) throws Exception { protected void registerMessageReceivers() { super.registerMessageReceivers(); - clientReceiver = new MessageReceiver(settingsForTestClient.getReceiverDestinationID()); - addReceiver(clientReceiver); + clientReceiver = addReceiver(new MessageReceiver(settingsForTestClient.getReceiverDestinationID())); Collection pillarFilter = Collections.singletonList(testConfiguration.getPillarUnderTestID()); clientReceiver.setFromFilter(pillarFilter); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/multicollection/MultipleCollectionIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/multicollection/MultipleCollectionIT.java index 27715a5c5..d3dba9576 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/multicollection/MultipleCollectionIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/multicollection/MultipleCollectionIT.java @@ -78,8 +78,7 @@ public void fileInOtherCollectionTest() throws Exception { protected void registerMessageReceivers() { super.registerMessageReceivers(); - clientReceiver = new MessageReceiver(settingsForTestClient.getReceiverDestinationID()); - addReceiver(clientReceiver); + clientReceiver = addReceiver(new MessageReceiver(settingsForTestClient.getReceiverDestinationID())); Collection pillarFilter = Collections.singletonList(testConfiguration.getPillarUnderTestID()); clientReceiver.setFromFilter(pillarFilter); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java index 629664fad..25da05460 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java @@ -157,16 +157,18 @@ defaultFileId, null, getPillarID(), getPillarID(), awaitAsynchronousCompletion(metrics, numberOfFiles); } - public String lookupGetFileDestination() { - MessageReceiver clientReceiver = new MessageReceiver(settingsForTestClient.getReceiverDestinationID()); - messageBus.addListener(clientReceiver.getDestination(), clientReceiver.getMessageListener()); - GetFileMessageFactory pillarLookupmMsgFactory = + public String lookupGetFileDestination() throws InterruptedException { + String pillarDestination; + try (MessageReceiver clientReceiver = new MessageReceiver(settingsForTestClient.getReceiverDestinationID())) { + messageBus.addListener(clientReceiver.getDestination(), clientReceiver.getMessageListener()); + GetFileMessageFactory pillarLookupmMsgFactory = new GetFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), null); - IdentifyPillarsForGetFileRequest identifyRequest = + IdentifyPillarsForGetFileRequest identifyRequest = pillarLookupmMsgFactory.createIdentifyPillarsForGetFileRequest(defaultFileId); - messageBus.sendMessage(identifyRequest); - String pillarDestination = clientReceiver.waitForMessage(IdentifyPillarsForGetFileResponse.class).getReplyTo(); - messageBus.removeListener(clientReceiver.getDestination(), clientReceiver.getMessageListener()); + messageBus.sendMessage(identifyRequest); + pillarDestination = clientReceiver.waitForMessage(IdentifyPillarsForGetFileResponse.class).getReplyTo(); + messageBus.removeListener(clientReceiver.getDestination(), clientReceiver.getMessageListener()); + } return pillarDestination; } } \ No newline at end of file diff --git a/bitrepository-service/src/test/java/org/bitrepository/service/ContributorIT.java b/bitrepository-service/src/test/java/org/bitrepository/service/ContributorIT.java index 4bee9b130..f8b8ad29d 100644 --- a/bitrepository-service/src/test/java/org/bitrepository/service/ContributorIT.java +++ b/bitrepository-service/src/test/java/org/bitrepository/service/ContributorIT.java @@ -42,13 +42,11 @@ protected void registerMessageReceivers() { super.registerMessageReceivers(); clientDestinationId = settingsForTestClient.getReceiverDestinationID(); - clientReceiver = new MessageReceiver(clientDestinationId); - addReceiver(clientReceiver); + clientReceiver = addReceiver(new MessageReceiver(clientDestinationId)); contributorDestinationId = settingsForCUT.getCollectionDestination() + "-" + getContributorID() + "-" + getTopicPostfix(); - contributorReceiver = new MessageReceiver(contributorDestinationId + " topic receiver"); - addReceiver(contributorReceiver); + contributorReceiver = addReceiver(new MessageReceiver(contributorDestinationId + " topic receiver")); } protected abstract String getContributorID(); From 2fbb4aff0bed2fdbc6e55032f60a8a018a7e6f76 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 18 Jun 2026 19:27:56 +0200 Subject: [PATCH 11/22] Maven Integration tests correctly setup --- bitrepository-reference-pillar/pom.xml | 69 ++++++++++++++++++++------ 1 file changed, 54 insertions(+), 15 deletions(-) diff --git a/bitrepository-reference-pillar/pom.xml b/bitrepository-reference-pillar/pom.xml index 66e07fca6..33eb0a9e8 100644 --- a/bitrepository-reference-pillar/pom.xml +++ b/bitrepository-reference-pillar/pom.xml @@ -150,6 +150,16 @@ + + maven-failsafe-plugin + + + org.bitrepository.pillar.integration.** + + org.bitrepository.pillar.BitrepositoryPillarCommonIntegrationTestSuite + true + +
    @@ -183,36 +193,65 @@
    - integration-test maven-failsafe-plugin - - org.bitrepository.pillar.integration.BitrepositoryPillarTestSuite - org.bitrepository.pillar.integration.BitrepositoryChecksumPillarTestSuite - org.bitrepository.pillar.BitrepositoryPillarCommonIntegrationTestSuite - true - + + + BitrepositoryPillarTestSuite + integration-test + + integration-test + verify + + + org.bitrepository.pillar.integration.BitrepositoryPillarTestSuite + true + + + + BitrepositoryChecksumPillarTestSuite + integration-test + + integration-test + verify + + + org.bitrepository.pillar.integration.BitrepositoryChecksumPillarTestSuite + + true + + + - Stress-test maven-failsafe-plugin - - org.bitrepository.pillar.integration.BitrepositoryPerformanceTestSuite - true - - true - - + + + stressTest + integration-test + + integration-test + verify + + + org.bitrepository.pillar.integration.BitrepositoryPerformanceTestSuite + true + + true + + + + From 9bd3ccd51ac8bf4657bbff4ebbacc887e05131df Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 18 Jun 2026 19:28:14 +0200 Subject: [PATCH 12/22] Stress test messages actually useful --- .../performancetest/MessageBusDelayTest.java | 42 ++++++++++--------- .../integration/perf/PillarPerformanceIT.java | 11 ++--- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusDelayTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusDelayTest.java index 7f9073909..bea96d68b 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusDelayTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/performancetest/MessageBusDelayTest.java @@ -79,28 +79,30 @@ public void performStatisticalAnalysisOfMessageDelay() throws Exception { + "on the delay between the sending and the retrieval of the message."); addStep("Setup the variables and connections for the test.", "Should connect to the messagebus."); MessageBus messageBus = MessageBusManager.getMessageBus(settings, securityManager); - MessageReceiver destinationReceiver; String destination = "DelayPerformanceTestDestination-" + Instant.now().toEpochMilli(); - destinationReceiver = new MessageReceiver("Performance test topic receiver"); - messageBus.addListener(destination, destinationReceiver.getMessageListener()); - - List delayList = new ArrayList<>(PERFORMANCE_COUNT); - AlarmMessage message = ExampleMessageFactory.createMessage(AlarmMessage.class); - message.setDestination(destination); - - addStep("Sending the message and calculating the time.", "Should be done '" + PERFORMANCE_COUNT + "' times."); - for (int i = 0; i < PERFORMANCE_COUNT; i++) { - Instant before = Instant.now(); - messageBus.sendMessage(message); - AlarmMessage received = destinationReceiver.waitForMessage(AlarmMessage.class, 100, TimeUnit.SECONDS, - message.getCorrelationID()); - Instant after = Instant.now(); - if (received == null) { - System.err.println("No message received within 100 seconds"); - } + List delayList; + try (MessageReceiver destinationReceiver = new MessageReceiver("Performance test topic receiver")) { + messageBus.addListener(destination, destinationReceiver.getMessageListener()); + + delayList = new ArrayList<>(PERFORMANCE_COUNT); + AlarmMessage message = ExampleMessageFactory.createMessage(AlarmMessage.class); + message.setDestination(destination); + + addStep("Sending the message and calculating the time.", + "Should be done '" + PERFORMANCE_COUNT + "' times."); + for (int i = 0; i < PERFORMANCE_COUNT; i++) { + Instant before = Instant.now(); + messageBus.sendMessage(message); + AlarmMessage received = destinationReceiver.waitForMessage(AlarmMessage.class, 100, TimeUnit.SECONDS, + message.getCorrelationID()); + Instant after = Instant.now(); + if (received == null) { + System.err.println("No message received within 100 seconds"); + } - long delay = MILLIS.between(before, after); - delayList.add(delay); + long delay = MILLIS.between(before, after); + delayList.add(delay); + } } addStep("Perform the statistical analysis on the delay results.", "TODO !!!!"); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java index 5af42d8eb..96aaaf4e7 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java @@ -67,18 +67,19 @@ protected MessageReceiver addReceiver(MessageReceiver receiver) { */ protected void awaitAsynchronousCompletion(Metrics metrics, int numberOfOperations) { while(metrics.getCount() < numberOfOperations) { + System.out.println("...waiting for the last " + (numberOfOperations - metrics.getCount()) + + " operations to finish " + + "(" + TimeUtils.millisecondsToHuman(System.currentTimeMillis()-metrics.getStartTime()) + ")"); try { Thread.sleep(6000); } catch (InterruptedException e) { Assertions.fail(e); } - System.out.println("...waiting for the last " + (numberOfOperations - metrics.getCount()) + - " operations to finish " + - "(" + TimeUtils.millisecondsToHuman(metrics.getStartTime()) + ")"); } + System.out.println("All operations finished in " + TimeUtils.millisecondsToHuman(System.currentTimeMillis()-metrics.getStartTime())); } - protected class EventHandlerForMetrics implements EventHandler { + protected static class EventHandlerForMetrics implements EventHandler { private final Metrics metrics; public EventHandlerForMetrics(Metrics metrics) { this.metrics = metrics; @@ -96,7 +97,7 @@ public void handleEvent(OperationEvent event) { } } - protected class ParallelOperationLimiter { + protected static class ParallelOperationLimiter { private final BlockingQueue activeOperationss; ParallelOperationLimiter(int limit) { From 10ca9cf3692b938c3e44796bc83f5c620be71c15 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 18 Jun 2026 19:40:31 +0200 Subject: [PATCH 13/22] Artemis, Jakarta and dependencyManagement --- bitrepository-alarm-service/pom.xml | 55 +- .../alarm/alarmservice/AlarmServiceInput.java | 3 +- .../AlarmServiceRestApplication.java | 4 +- .../alarm/alarmservice/RestAlarmService.java | 14 +- .../alarm/alarmservice/WebAlarm.java | 4 +- .../alarm/store/AlarmDatabaseExtractor.java | 12 +- .../src/main/webapp/WEB-INF/web.xml | 2 +- .../alarm/store/AlarmDatabaseTest.java | 2 +- bitrepository-audit-trail-service/pom.xml | 36 +- .../AuditTrailServiceRestApplication.java | 4 +- .../audittrails/webservice/CollectorInfo.java | 2 +- .../webservice/PreservationInfo.java | 2 +- .../webservice/RestAuditTrailService.java | 24 +- .../src/main/webapp/WEB-INF/web.xml | 6 +- .../audittrails/store/AuditDatabaseTest.java | 2 +- bitrepository-client/pom.xml | 9 +- .../conversation/GettingChecksums.java | 8 +- .../conversation/GettingFileIDs.java | 8 +- .../commandline/ReplaceFileCmd.java | 2 +- .../client/DefaultFixtureClientIT.java | 19 +- bitrepository-core/pom.xml | 216 ++- .../org/bitrepository/common/JaxbHelper.java | 6 +- .../webobjects/StatisticsCollectionSize.java | 3 +- .../common/webobjects/StatisticsDataSize.java | 3 +- .../webobjects/StatisticsPillarSize.java | 3 +- .../protocol/activemq/ActiveMQMessageBus.java | 42 +- .../ArtemisConnectionFactoryProvider.java | 2 +- .../ExtendedTestInfoParameterResolver.java | 48 +- .../ActiveMQFixedPortContainer.java | 21 - .../ArtemisFixedPortContainer.java | 21 + .../protocol/IntegrationTest.java | 329 ++-- .../protocol/MessageCreationTest.java | 3 +- .../protocol/bus/ActiveMQMessageBusIT.java | 20 +- .../protocol/bus/GeneralMessageBusIT.java | 23 +- .../protocol/bus/MessageReceiver.java | 8 +- .../protocol/bus/RawMessagebus.java | 15 +- .../RepositorySettings.xml | 2 + bitrepository-integration/pom.xml | 5 - bitrepository-integrity-service/pom.xml | 92 +- .../web/IntegrityServiceRestApplication.java | 9 +- .../web/RestIntegrityService.java | 130 +- .../web/RestStatisticsService.java | 12 +- .../integrityservice/web/StreamingTools.java | 4 +- .../step/CreateStatisticsEntryStep.java | 2 +- .../workflow/step/HandleMissingFilesStep.java | 4 +- .../step/HandleObsoleteChecksumsStep.java | 2 +- .../workflow/step/UpdateChecksumsStep.java | 2 +- .../src/main/webapp/WEB-INF/web.xml | 2 +- .../IntegrityDatabaseTestCase.java | 2 +- .../integrationtest/MissingChecksumTests.java | 14 +- .../stresstest/DatabaseStressTests.java | 2 +- .../step/UpdateChecksumsStepTest.java | 443 ++--- bitrepository-monitoring-service/pom.xml | 28 +- .../MonitoringServiceRestApplication.java | 4 +- .../webservice/RestMonitoringService.java | 6 +- .../webservice/WebConfOption.java | 4 +- .../webservice/WebStatus.java | 4 +- .../src/main/webapp/WEB-INF/web.xml | 2 +- bitrepository-reference-pillar/pom.xml | 8 +- .../GetChecksumsRequestHandler.java | 6 +- .../GetFileIDsRequestHandler.java | 3 +- .../pillar/DefaultFixturePillarIT.java | 19 +- .../org/bitrepository/pillar/MediatorIT.java | 2 +- .../pillar/integration/ClientProvider.java | 54 +- .../integration/PillarIntegrationIT.java | 11 +- .../func/getchecksums/GetChecksumQueryIT.java | 53 +- .../func/getfileids/GetFileIDsIT.java | 2 +- .../func/getfileids/GetFileIDsQueryIT.java | 38 +- .../pillar/messagehandling/DeleteFileIT.java | 36 +- .../RecalculateChecksumWorkflowIT.java | 16 +- .../checksumcache/ChecksumDatabaseTest.java | 2 +- .../resources/conf/RepositorySettings.xml | 2 + bitrepository-reference-settings/pom.xml | 192 ++- .../xsd/bindings-reference-settings.xjb | 4 +- bitrepository-service/pom.xml | 11 +- .../AbstractBitrepositoryContextListener.java | 4 +- .../handler/GetAuditTrailsRequestHandler.java | 3 +- .../service/workflow/WorkflowState.java | 3 +- .../AuditTrailContributorDatabaseTest.java | 2 +- bitrepository-webclient/pom.xml | 26 +- .../bitrepository/webservice/Reposervice.java | 10 +- .../ReposerviceRestApplication.java | 4 +- .../bitrepository/webservice/ServiceUrl.java | 8 +- .../webservice/WebCollection.java | 4 +- .../webservice/WebclientContextListener.java | 33 +- .../WebserviceIllegalArgumentException.java | 6 +- .../src/main/webapp/WEB-INF/web.xml | 2 +- pom.xml | 1437 +++++++++-------- 88 files changed, 1924 insertions(+), 1833 deletions(-) delete mode 100644 bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ActiveMQFixedPortContainer.java create mode 100644 bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ArtemisFixedPortContainer.java diff --git a/bitrepository-alarm-service/pom.xml b/bitrepository-alarm-service/pom.xml index 76eb750ae..0f1c3a662 100644 --- a/bitrepository-alarm-service/pom.xml +++ b/bitrepository-alarm-service/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 @@ -14,41 +15,29 @@ - javax - javaee-web-api - ${javaee.web.version} - provided - - - javax.servlet - javax.servlet-api - ${javax.servlet.version} + jakarta.servlet + jakarta.servlet-api provided org.apache.cxf cxf-rt-transports-http - ${cxf.version} org.apache.cxf cxf-rt-rs-client - ${cxf.version} com.fasterxml.jackson.core jackson-databind - ${jackson.version} - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - ${jackson.version} + com.fasterxml.jackson.jakarta.rs + jackson-jakarta-rs-json-provider jakarta.ws.rs jakarta.ws.rs-api - ${jakarta.ws.rs.version} org.bitrepository.reference @@ -58,7 +47,6 @@ javax.mail javax.mail-api - 1.6.2 org.bitrepository.reference @@ -83,24 +71,18 @@ org.apache.activemq artemis-server - ${artemis.version} test - - org.junit.jupiter - junit-jupiter - test - - - org.testcontainers - testcontainers-junit-jupiter - test - - - org.testcontainers - testcontainers-postgresql - test - + + org.testcontainers + testcontainers-junit-jupiter + test + + + org.testcontainers + testcontainers-postgresql + test + Client for accessing alarms from the Bitrepository system @@ -109,11 +91,6 @@ io.qameta.allure allure-maven - 2.12.0 - - ${project.build.directory}/allure-results - ${project.build.directory}/allure-report - maven-assembly-plugin diff --git a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceInput.java b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceInput.java index a2fca633f..56d17bad5 100644 --- a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceInput.java +++ b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceInput.java @@ -21,7 +21,8 @@ */ package org.bitrepository.alarm.alarmservice; -import javax.xml.bind.annotation.XmlRootElement; + +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class AlarmServiceInput { diff --git a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceRestApplication.java b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceRestApplication.java index cda3574e6..388e34b81 100644 --- a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceRestApplication.java +++ b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceRestApplication.java @@ -1,8 +1,8 @@ package org.bitrepository.alarm.alarmservice; -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; -import javax.ws.rs.core.Application; +import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; +import jakarta.ws.rs.core.Application; import java.util.Arrays; import java.util.HashSet; import java.util.Set; diff --git a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/RestAlarmService.java b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/RestAlarmService.java index 9a7b3fc49..550678516 100644 --- a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/RestAlarmService.java +++ b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/RestAlarmService.java @@ -30,13 +30,13 @@ import org.bitrepository.bitrepositoryelements.AlarmCode; import org.bitrepository.common.utils.CalendarUtils; -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.FormParam; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.FormParam; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; import java.time.Instant; import java.time.ZoneId; import java.util.ArrayList; diff --git a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/WebAlarm.java b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/WebAlarm.java index 6ace8714f..dd2fc7e51 100644 --- a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/WebAlarm.java +++ b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/WebAlarm.java @@ -26,8 +26,8 @@ import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.common.utils.TimeUtils; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; /** * Class to format alarms for web display diff --git a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/store/AlarmDatabaseExtractor.java b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/store/AlarmDatabaseExtractor.java index 888749c48..57e1a0bd7 100644 --- a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/store/AlarmDatabaseExtractor.java +++ b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/store/AlarmDatabaseExtractor.java @@ -206,12 +206,12 @@ private String createRestriction() { res.append(ALARM_CODE + " = ?"); } - if (model.getStartDate() != null) { + if (model.getStart() != null) { nextArgument(res); res.append(ALARM_DATE + " >= ?"); } - if (model.getEndDate() != null) { + if (model.getEnd() != null) { nextArgument(res); res.append(ALARM_DATE + " <= ?"); } @@ -258,12 +258,12 @@ private Object[] extractArgumentsFromModel() { res.add(model.getAlarmCode().toString()); } - if (model.getStartDate() != null) { - res.add(model.getStartDate().getTime()); + if (model.getStart() != null) { + res.add(model.getStart().toEpochMilli()); } - if (model.getEndDate() != null) { - res.add(model.getEndDate().getTime()); + if (model.getEnd() != null) { + res.add(model.getEnd().toEpochMilli()); } if (model.getFileID() != null) { diff --git a/bitrepository-alarm-service/src/main/webapp/WEB-INF/web.xml b/bitrepository-alarm-service/src/main/webapp/WEB-INF/web.xml index cb34a6e48..d07fc1232 100644 --- a/bitrepository-alarm-service/src/main/webapp/WEB-INF/web.xml +++ b/bitrepository-alarm-service/src/main/webapp/WEB-INF/web.xml @@ -32,7 +32,7 @@ Bitrepository-alarmservice org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet - javax.ws.rs.Application + jakarta.ws.rs.Application org.bitrepository.alarm.alarmservice.AlarmServiceRestApplication 1 diff --git a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java index e7e13a4b3..636ebeda5 100644 --- a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java +++ b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java @@ -64,7 +64,7 @@ class AlarmDatabaseTest { String DATABASE_NAME = "alarmservicedb"; @Container - PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine") + PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:18-alpine") .withDatabaseName(DATABASE_NAME) .withClasspathResourceMapping("sql/postgres/alarmServiceDBCreation.sql", "/docker-entrypoint-initdb.d/init.sql", BindMode.READ_ONLY); diff --git a/bitrepository-audit-trail-service/pom.xml b/bitrepository-audit-trail-service/pom.xml index e4d428f97..0dc8e3e87 100644 --- a/bitrepository-audit-trail-service/pom.xml +++ b/bitrepository-audit-trail-service/pom.xml @@ -25,38 +25,26 @@ org.apache.cxf cxf-rt-transports-http - ${cxf.version} org.apache.cxf cxf-rt-rs-client - ${cxf.version} com.fasterxml.jackson.core jackson-databind - ${jackson.version} - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - ${jackson.version} + com.fasterxml.jackson.jakarta.rs + jackson-jakarta-rs-json-provider jakarta.ws.rs jakarta.ws.rs-api - ${jakarta.ws.rs.version} - javax - javaee-web-api - ${javaee.web.version} - provided - - - javax.servlet - javax.servlet-api - ${javax.servlet.version} + jakarta.servlet + jakarta.servlet-api provided @@ -82,14 +70,8 @@ org.apache.activemq artemis-server - ${artemis.version} test - - org.junit.jupiter - junit-jupiter - test - org.testcontainers testcontainers-junit-jupiter @@ -100,11 +82,6 @@ testcontainers-postgresql test - - com.fasterxml.jackson.core - jackson-databind - 2.21.2 - @@ -112,11 +89,6 @@ io.qameta.allure allure-maven - 2.12.0 - - ${project.basedir}/allure-results - ${project.basedir}/allure-report - maven-assembly-plugin diff --git a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/AuditTrailServiceRestApplication.java b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/AuditTrailServiceRestApplication.java index eef6580ad..25fd1b86e 100644 --- a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/AuditTrailServiceRestApplication.java +++ b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/AuditTrailServiceRestApplication.java @@ -1,8 +1,8 @@ package org.bitrepository.audittrails.webservice; -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; -import javax.ws.rs.core.Application; +import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; +import jakarta.ws.rs.core.Application; import java.util.Arrays; import java.util.HashSet; import java.util.Set; diff --git a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/CollectorInfo.java b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/CollectorInfo.java index 63c50fb29..05f5e54f7 100644 --- a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/CollectorInfo.java +++ b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/CollectorInfo.java @@ -21,7 +21,7 @@ */ package org.bitrepository.audittrails.webservice; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class CollectorInfo { diff --git a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/PreservationInfo.java b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/PreservationInfo.java index cda437c92..000635f1c 100644 --- a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/PreservationInfo.java +++ b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/PreservationInfo.java @@ -1,6 +1,6 @@ package org.bitrepository.audittrails.webservice; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class PreservationInfo { diff --git a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java index 0282c967c..d64f42f1e 100644 --- a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java +++ b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java @@ -37,18 +37,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.FormParam; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.FormParam; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import java.io.IOException; import java.sql.SQLException; import java.time.Instant; diff --git a/bitrepository-audit-trail-service/src/main/webapp/WEB-INF/web.xml b/bitrepository-audit-trail-service/src/main/webapp/WEB-INF/web.xml index 23ddd4bfa..a77580dbd 100644 --- a/bitrepository-audit-trail-service/src/main/webapp/WEB-INF/web.xml +++ b/bitrepository-audit-trail-service/src/main/webapp/WEB-INF/web.xml @@ -25,8 +25,8 @@ --> - + Bit Repository Audit Trail Service @@ -34,7 +34,7 @@ Audit-Trails org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet - javax.ws.rs.Application + jakarta.ws.rs.Application org.bitrepository.audittrails.webservice.AuditTrailServiceRestApplication 1 diff --git a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java index ce71c562f..9f7afb0e0 100644 --- a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java +++ b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java @@ -65,7 +65,7 @@ class AuditDatabaseTest { static final String operationID2 = "4321"; @Container - PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine") + PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:18-alpine") .withLogConsumer(log -> System.out.println(log.getUtf8StringWithoutLineEnding())) .withClasspathResourceMapping( "sql/postgres/auditTrailServiceDBCreation.sql", diff --git a/bitrepository-client/pom.xml b/bitrepository-client/pom.xml index 48e94a17b..9242eebc7 100644 --- a/bitrepository-client/pom.xml +++ b/bitrepository-client/pom.xml @@ -19,7 +19,6 @@ commons-cli commons-cli - 1.4 @@ -30,9 +29,8 @@ test - org.apache.activemq + org.apache.artemis artemis-server - ${artemis.version} test @@ -52,11 +50,6 @@ io.qameta.allure allure-maven - 2.12.0 - - ${project.basedir}/allure-results - ${project.basedir}/allure-report - maven-assembly-plugin diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/GettingChecksums.java b/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/GettingChecksums.java index 1bbb52c33..e15a8b413 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/GettingChecksums.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/GettingChecksums.java @@ -89,11 +89,11 @@ protected void sendRequest() { msg.setPillarID(query.getComponentID()); msg.setDestination(activeContributors.get(query.getComponentID())); - if (query.getMinTimestamp() != null) { - msg.setMinTimestamp(CalendarUtils.getXmlGregorianCalendar(query.getMinTimestamp())); + if (query.getMinTimestampInstant() != null) { + msg.setMinTimestamp(CalendarUtils.getXmlGregorianCalendar(query.getMinTimestampInstant())); } - if (query.getMaxTimestamp() != null) { - msg.setMaxTimestamp(CalendarUtils.getXmlGregorianCalendar(query.getMaxTimestamp())); + if (query.getMaxTimestampInstant() != null) { + msg.setMaxTimestamp(CalendarUtils.getXmlGregorianCalendar(query.getMaxTimestampInstant())); } if (query.getMaxNumberOfResults() != null) { msg.setMaxNumberOfResults(BigInteger.valueOf(query.getMaxNumberOfResults())); diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/GettingFileIDs.java b/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/GettingFileIDs.java index a21a339bc..2f9c6ad3e 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/GettingFileIDs.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/GettingFileIDs.java @@ -71,11 +71,11 @@ protected void sendRequest() { msg.setPillarID(query.getComponentID()); msg.setDestination(activeContributors.get(query.getComponentID())); - if (query.getMinTimestamp() != null) { - msg.setMinTimestamp(CalendarUtils.getXmlGregorianCalendar(query.getMinTimestamp())); + if (query.getMinTimestampInstant() != null) { + msg.setMinTimestamp(CalendarUtils.getXmlGregorianCalendar(query.getMinTimestampInstant())); } - if (query.getMaxTimestamp() != null) { - msg.setMaxTimestamp(CalendarUtils.getXmlGregorianCalendar(query.getMaxTimestamp())); + if (query.getMaxTimestampInstant() != null) { + msg.setMaxTimestamp(CalendarUtils.getXmlGregorianCalendar(query.getMaxTimestampInstant())); } if (query.getMaxNumberOfResults() != null) { msg.setMaxNumberOfResults(BigInteger.valueOf(query.getMaxNumberOfResults())); diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java index eb6208941..af6da3d8d 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java @@ -72,7 +72,7 @@ public static void main(String[] args) { */ protected ReplaceFileCmd(String... args) { super(args); - client = ModifyComponentFactory.getInstance().retrieveReplaceFileClient(settings, securityManager, getComponentID()); + client = ModifyComponentFactory.getInstance().retrieveReplaceFileClient(settings, securityManager, this.getComponentID()); } @Override diff --git a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java index e81666aaa..47fd6bb8d 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java +++ b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java @@ -26,7 +26,7 @@ import org.bitrepository.client.conversation.mediator.CollectionBasedConversationMediator; import org.bitrepository.client.conversation.mediator.ConversationMediator; -import org.bitrepository.pillar.integration.ActiveMQFixedPortContainer; +import org.bitrepository.pillar.integration.ArtemisFixedPortContainer; import org.bitrepository.protocol.IntegrationTest; import org.bitrepository.protocol.activemq.ActiveMQMessageBus; import org.bitrepository.protocol.bus.MessageReceiver; @@ -35,11 +35,12 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.TestInstance; import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.activemq.ArtemisContainer; import org.testcontainers.containers.InternetProtocol; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import javax.jms.JMSException; +import jakarta.jms.JMSException; /** * Contains the generic parts for tests integrating to the message bus. @@ -61,7 +62,7 @@ public abstract class DefaultFixtureClientIT extends IntegrationTest { protected ConversationMediator conversationMediator; @Container - static ActiveMQContainer activemqContainer = new ActiveMQFixedPortContainer("apache/activemq:5.17.7") + static ArtemisContainer activemqContainer = new ArtemisFixedPortContainer("apache/artemis:2.55.0") .withFixedExposedPort(9999, 61616, InternetProtocol.TCP); @Override @@ -118,6 +119,9 @@ protected void setupMessageBus() { throw new RuntimeException(e); } } + settingsForTestClient.getMessageBusConfiguration().setURL(activemqContainer.getBrokerUrl()); + settingsForTestClient.getMessageBusConfiguration().setUsername(activemqContainer.getUser()); + settingsForTestClient.getMessageBusConfiguration().setPassword(activemqContainer.getPassword()); messageBus = new ActiveMQMessageBus(settingsForTestClient, securityManager); MessageBusManager.clear(); MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); @@ -138,14 +142,5 @@ protected void teardownMessageBus() { } activemqContainer.stop(); } - - if (broker != null) { - try { - broker.stop(); - broker = null; - } catch (Exception e) { - // No reason to pollute the test output with this - } - } } } diff --git a/bitrepository-core/pom.xml b/bitrepository-core/pom.xml index 15a3a2ff0..debeea8c8 100644 --- a/bitrepository-core/pom.xml +++ b/bitrepository-core/pom.xml @@ -1,122 +1,106 @@ - 4.0.0 - - org.bitrepository.reference - bitrepository-parent - 1.12-SNAPSHOT - - bitrepository-core - Bitrepository Core - General functionality for working with the Bitrepository code. - - - org.bitrepository.reference - bitrepository-reference-settings - ${project.version} - - - org.bitrepository.repository-settings - repository-settings-xsd - ${repository.settings.version} - - - org.bitrepository.repository-settings - repository-settings-java - ${repository.settings.version} - - - org.bitrepository - bitrepository-message-xml-xsd - ${message.xml.version} - - - org.bitrepository - bitrepository-message-xml-java - ${message.xml.version} - - - commons-io - commons-io - 2.21.0 - - - org.apache.httpcomponents - httpclient - 4.5.14 - + 4.0.0 + + org.bitrepository.reference + bitrepository-parent + 1.12-SNAPSHOT + + bitrepository-core + Bitrepository Core + General functionality for working with the Bitrepository code. + + + org.bitrepository.reference + bitrepository-reference-settings + ${project.version} + + + org.bitrepository.repository-settings + repository-settings-xsd + + + org.bitrepository.repository-settings + repository-settings-java + + + org.bitrepository.message-xml + message-xml-xsd + + + org.bitrepository.message-xml + message-xml-java + + + commons-io + commons-io + + + org.apache.httpcomponents + httpclient + + + com.fasterxml.jackson.core + jackson-databind + + + org.jetbrains + annotations + compile + + + org.bouncycastle + bcprov-jdk18on + + + org.bouncycastle + bcmail-jdk18on + + + org.apache.artemis + artemis-jakarta-client + + + commons-codec + commons-codec + - - org.bouncycastle - bcprov-jdk18on - 1.84 - - - org.bouncycastle - bcmail-jdk18on - 1.84 - - - org.apache.activemq - activemq-client - ${activemq.version} - - - commons-codec - commons-codec - 1.21.0 - - - org.apache.activemq - activemq-broker - ${activemq.version} - test - - - org.eclipse.jetty - jetty-server - 12.1.8 - test - - - org.junit.jupiter - junit-jupiter - 5.14.0 - test - - - org.hamcrest - hamcrest-core - 3.0 - test - - - org.testcontainers - testcontainers-activemq - test - - - org.testcontainers - testcontainers-postgresql - test - - - org.testcontainers - testcontainers-junit-jupiter - test - + + org.eclipse.jetty + jetty-server + test + + + org.hamcrest + hamcrest-core + test + + + org.testcontainers + testcontainers-activemq + test + + + org.testcontainers + testcontainers-postgresql + test + + + org.testcontainers + testcontainers-junit-jupiter + test + + + org.apache.artemis + artemis-server + test + + + org.apache.activemq + activemq-broker + test + - - com.fasterxml.jackson.core - jackson-databind - 2.21.1 - - - org.jetbrains - annotations - 23.0.0 - compile - - + diff --git a/bitrepository-core/src/main/java/org/bitrepository/common/JaxbHelper.java b/bitrepository-core/src/main/java/org/bitrepository/common/JaxbHelper.java index bd3992cbd..a7d554523 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/common/JaxbHelper.java +++ b/bitrepository-core/src/main/java/org/bitrepository/common/JaxbHelper.java @@ -24,6 +24,9 @@ */ package org.bitrepository.common; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.ls.LSInput; @@ -32,9 +35,6 @@ import org.xml.sax.SAXException; import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; import javax.xml.transform.sax.SAXSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; diff --git a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsCollectionSize.java b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsCollectionSize.java index 37421e8a9..064f49cc9 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsCollectionSize.java +++ b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsCollectionSize.java @@ -21,7 +21,8 @@ */ package org.bitrepository.common.webobjects; -import javax.xml.bind.annotation.XmlRootElement; + +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class StatisticsCollectionSize { diff --git a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsDataSize.java b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsDataSize.java index 1eb204528..58dfc4bbb 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsDataSize.java +++ b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsDataSize.java @@ -21,7 +21,8 @@ */ package org.bitrepository.common.webobjects; -import javax.xml.bind.annotation.XmlRootElement; + +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class StatisticsDataSize { diff --git a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsPillarSize.java b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsPillarSize.java index 8f283eb43..cf7289332 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsPillarSize.java +++ b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsPillarSize.java @@ -21,7 +21,8 @@ */ package org.bitrepository.common.webobjects; -import javax.xml.bind.annotation.XmlRootElement; + +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class StatisticsPillarSize { diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java index 3e98c36ca..95ba2fdc8 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java @@ -34,9 +34,10 @@ import jakarta.jms.Session; import jakarta.jms.TextMessage; import jakarta.jms.Topic; -import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import java.io.ByteArrayInputStream; + +import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.bitrepository.bitrepositorymessages.Message; import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.common.DefaultThreadFactory; @@ -157,6 +158,7 @@ public class ActiveMQMessageBus implements MessageBus { private static final ThreadFactory threadFactory = new DefaultThreadFactory(ActiveMQMessageListener.class.getSimpleName() + "-", Thread.NORM_PRIORITY, false); + private final ActiveMQConnectionFactory connectionFactory; /** @@ -174,7 +176,7 @@ public ActiveMQMessageBus(Settings settings, SecurityManager securityManager) { clientID = settings.getComponentID(); String schemaLocation = "BitRepositoryMessages.xsd"; jaxbHelper = new JaxbHelper("xsd/", schemaLocation); - ActiveMQConnectionFactory connectionFactory = ArtemisConnectionFactoryProvider.create(configuration); + connectionFactory = ArtemisConnectionFactoryProvider.create(configuration); registerCustomMessageLoggers(); try { connection = connectionFactory.createConnection(); @@ -242,8 +244,8 @@ public synchronized void removeListener(String destinationID, MessageListener li consumer = getMessageConsumer(destinationID, listener, false); } catch (CoordinationLayerException e) { var cause = e.getCause(); - if (cause instanceof IllegalStateException - && Objects.equals(cause.getMessage(), "The Session is closed")) { + if (cause instanceof jakarta.jms.IllegalStateException + && Objects.equals(cause.getMessage(), "AMQ219019: Session is closed")) { return; } throw e; @@ -252,7 +254,7 @@ public synchronized void removeListener(String destinationID, MessageListener li // We need to set the listener to null to have the removeListener take effect at once. // If this isn't done the listener will continue to receive messages. Do we have a memory leak here? - consumer.setMessageListener(null); +// consumer.setMessageListener(null); consumer.close(); } catch (IllegalStateException e) { @@ -298,6 +300,11 @@ public void close() throws JMSException { } catch (JMSException e) { log.warn("Exception while closing ActiveMQMessageBus Connection", e); } + try { + connectionFactory.close(); + } catch (Exception e) { + log.warn("Exception while closing ActiveMQMessageBus connectionFactory", e); + } } @@ -424,23 +431,14 @@ private Destination getDestination(String destinationID, Session session) { if (parts.length == 1) { destination = session.createTopic(destinationID); } else if (parts.length == 2) { - switch (parts[0]) { - case "topic": - destination = session.createTopic(parts[1]); - break; - case "queue": - destination = session.createQueue(parts[1]); - break; - case "temporary-queue": - destination = session.createTemporaryQueue(); - break; - case "temporary-topic": - destination = session.createTemporaryTopic(); - break; - default: - throw new CoordinationLayerException("Unable to create destination '" + - destination + "'. Unknown type."); - } + destination = switch (parts[0]) { + case "topic" -> session.createTopic(parts[1]); + case "queue" -> session.createQueue(parts[1]); + case "temporary-queue" -> session.createTemporaryQueue(); + case "temporary-topic" -> session.createTemporaryTopic(); + default -> throw new CoordinationLayerException("Unable to create destination '" + + destination + "'. Unknown type."); + }; } } catch (JMSException e) { throw new CoordinationLayerException("Could not create destination '" + destinationID + "'", e); diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ArtemisConnectionFactoryProvider.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ArtemisConnectionFactoryProvider.java index f878e0041..5da3b5a9c 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ArtemisConnectionFactoryProvider.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ArtemisConnectionFactoryProvider.java @@ -52,7 +52,7 @@ private ArtemisConnectionFactoryProvider() {} public static ActiveMQConnectionFactory create(MessageBusConfiguration config) { String url = resolveUrl(config); log.info("Creating Artemis connection factory with URL: {}", url); - return new ActiveMQConnectionFactory(url); + return new ActiveMQConnectionFactory(url, config.getUsername(), config.getPassword()); } /** diff --git a/bitrepository-core/src/test/java/org/bitrepository/ExtendedTestInfoParameterResolver.java b/bitrepository-core/src/test/java/org/bitrepository/ExtendedTestInfoParameterResolver.java index 09993512b..1f67b9971 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/ExtendedTestInfoParameterResolver.java +++ b/bitrepository-core/src/test/java/org/bitrepository/ExtendedTestInfoParameterResolver.java @@ -10,26 +10,36 @@ import java.util.Optional; import java.util.Set; -public class ExtendedTestInfoParameterResolver implements ParameterResolver { +/** + * A JUnit Jupiter parameter resolver that injects {@link SuiteInfo} instances into test methods. + * This resolver supports parameters explicitly declared as {@code SuiteInfo} and provides an implementation + * that exposes standard test metadata along with a custom {@code pillarType} configuration value retrieved + * from the extension context. It serves as an extended variant of the base suite info resolver by including + * additional configuration data in the resolved object. + */ +public class ExtendedTestInfoParameterResolver implements ParameterResolver { + @Override - public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws + ParameterResolutionException { return (parameterContext.getParameter().getType() == SuiteInfo.class); } - + @Override - public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws + ParameterResolutionException { return new ExtendedTestInfo(extensionContext); } - + private static class ExtendedTestInfo implements SuiteInfo { - + private final String displayName; private final Set tags; private final Class testClass; private final Method testMethod; private final String pillarType; - + ExtendedTestInfo(ExtensionContext extensionContext) { this.displayName = extensionContext.getDisplayName(); this.tags = extensionContext.getTags(); @@ -37,41 +47,41 @@ private static class ExtendedTestInfo implements SuiteInfo { this.testMethod = extensionContext.getTestMethod().orElse(null); this.pillarType = extensionContext.getConfigurationParameter("pillarType").orElse(null); } - + @Override public String getDisplayName() { return this.displayName; } - + @Override public Set getTags() { return this.tags; } - + @Override public Optional> getTestClass() { return Optional.ofNullable(this.testClass); } - + @Override public Optional getTestMethod() { return Optional.ofNullable(this.testMethod); } - + @Override public Optional getPillarType() { return Optional.ofNullable(pillarType); } - + @Override public String toString() { return new ToStringBuilder(this) - .append("displayName", this.displayName) - .append("tags", this.tags) - .append("testClass", this.testClass) - .append("testMethod", this.testMethod) - .toString(); + .append("displayName", this.displayName) + .append("tags", this.tags) + .append("testClass", this.testClass) + .append("testMethod", this.testMethod) + .toString(); } } - + } \ No newline at end of file diff --git a/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ActiveMQFixedPortContainer.java b/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ActiveMQFixedPortContainer.java deleted file mode 100644 index 3803c1102..000000000 --- a/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ActiveMQFixedPortContainer.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.bitrepository.pillar.integration; - -import org.testcontainers.activemq.ActiveMQContainer; -import org.testcontainers.containers.InternetProtocol; -import org.testcontainers.utility.DockerImageName; - -public class ActiveMQFixedPortContainer extends ActiveMQContainer { - - public ActiveMQFixedPortContainer(final String image) { - super(image); - } - - public ActiveMQFixedPortContainer(final DockerImageName dockerImageName) { - super(dockerImageName); - } - - public ActiveMQFixedPortContainer withFixedExposedPort(int hostPort, int containerPort, InternetProtocol protocol) { - super.addFixedExposedPort(hostPort, containerPort, protocol); - return this; - } -} diff --git a/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ArtemisFixedPortContainer.java b/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ArtemisFixedPortContainer.java new file mode 100644 index 000000000..17832087d --- /dev/null +++ b/bitrepository-core/src/test/java/org/bitrepository/pillar/integration/ArtemisFixedPortContainer.java @@ -0,0 +1,21 @@ +package org.bitrepository.pillar.integration; + +import org.testcontainers.activemq.ArtemisContainer; +import org.testcontainers.containers.InternetProtocol; +import org.testcontainers.utility.DockerImageName; + +public class ArtemisFixedPortContainer extends ArtemisContainer { + + public ArtemisFixedPortContainer(final String image) { + super(image); + } + + public ArtemisFixedPortContainer(final DockerImageName dockerImageName) { + super(dockerImageName); + } + + public ArtemisFixedPortContainer withFixedExposedPort(int hostPort, int containerPort, InternetProtocol protocol) { + super.addFixedExposedPort(hostPort, containerPort, protocol); + return this; + } +} diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java index 2e51c6d31..1d49499b5 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java @@ -30,13 +30,13 @@ import ch.qos.logback.core.read.ListAppender; import ch.qos.logback.core.util.StatusPrinter; import jakarta.jms.JMSException; +import org.apache.commons.lang3.exception.UncheckedException; import org.bitrepository.SuiteInfo; import org.bitrepository.SuiteInfoParameterResolver; import org.bitrepository.common.settings.Settings; import org.bitrepository.common.settings.TestSettingsProvider; import org.bitrepository.common.utils.SettingsUtils; import org.bitrepository.common.utils.TestFileHelper; -import org.bitrepository.protocol.bus.LocalActiveMQBroker; import org.bitrepository.protocol.bus.MessageReceiver; import org.bitrepository.protocol.fileexchange.HttpServerConfiguration; import org.bitrepository.protocol.http.EmbeddedHttpServer; @@ -46,6 +46,7 @@ import org.bitrepository.protocol.security.DummySecurityManager; import org.bitrepository.protocol.security.SecurityManager; import org.bitrepository.protocol.utils.TestWatcherExtension; +import org.bitrepository.settings.repositorysettings.ProtocolSettings; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; @@ -63,42 +64,44 @@ import java.util.Iterator; import java.util.List; +/** + * Abstract base class for integration tests that manages shared infrastructure and test lifecycle hooks. + * This class initializes and tears down common resources such as message brokers, HTTP servers, and security managers + * at the suite level, while providing method-level setup and verification steps for individual tests. + * Subclasses can extend this class to define component-under-test initialization, custom receiver registration, + * and post-execution verification logic. The test environment is configurable via system properties to control + * the use of embedded message buses and HTTP servers. Logging is intercepted during method execution to capture + * events for failure diagnostics. + */ @TestInstance(TestInstance.Lifecycle.PER_CLASS) @ExtendWith(SuiteInfoParameterResolver.class) public abstract class IntegrationTest { - public static LocalActiveMQBroker broker; - public static EmbeddedHttpServer server; - public static HttpServerConfiguration httpServerConfiguration; - public static MessageBus messageBus; - - protected MessageReceiverManager receiverManager; + public EmbeddedHttpServer server; + public HttpServerConfiguration httpServerConfiguration; + public MessageBus messageBus; + protected static String alarmDestinationID; protected static MessageReceiver alarmReceiver; protected static SecurityManager securityManager; protected static Settings settingsForCUT; protected static Settings settingsForTestClient; protected static String collectionID; - protected String nonDefaultFileId; protected static String defaultFileId; protected static URL defaultFileUrl; protected static String defaultDownloadFileAddress; protected static String defaultUploadFileAddress; + private static List> appenders; + + protected MessageReceiverManager receiverManager; + protected String nonDefaultFileId; protected String defaultAuditInformation; - - @RegisterExtension protected TestWatcherExtension testWatcher = new TestWatcherExtension(); + + @RegisterExtension + protected TestWatcherExtension testWatcher = new TestWatcherExtension(); protected String testMethodName; + private ListAppender appender; - private static List> appenders; - - @BeforeEach - public void print(TestInfo testInfo) throws Exception { - Class aClass = testInfo.getTestClass().get(); - var file = aClass.getProtectionDomain().getCodeSource().getLocation(); - String displayName = testInfo.getDisplayName(); - System.out.println("Running Integration Test " + aClass + "#" + displayName); - - } - + @BeforeAll public void initializeSuite(SuiteInfo testInfo) { settingsForCUT = loadSettings(getComponentID()); @@ -108,38 +111,82 @@ public void initializeSuite(SuiteInfo testInfo) { httpServerConfiguration = new HttpServerConfiguration(settingsForTestClient.getReferenceSettings().getFileExchangeSettings()); collectionID = settingsForTestClient.getCollections().get(0).getID(); - securityManager = createSecurityManager(); defaultFileId = "DefaultFile"; + constructDefaultFileUrls(); + setupMessageBus(); + } + + protected Settings loadSettings(String componentID) { + return TestSettingsProvider.reloadSettings(componentID); + } + + protected String getComponentID() { + return getClass().getSimpleName(); + } + + private void makeUserSpecificSettings(Settings settings) { + ProtocolSettings protocolSettings = settings.getRepositorySettings().getProtocolSettings(); + protocolSettings.setCollectionDestination(settings.getCollectionDestination() + getTopicPostfix()); + protocolSettings.setAlarmDestination(settings.getAlarmDestination() + getTopicPostfix()); + } + + protected SecurityManager createSecurityManager() { + return new DummySecurityManager(); + } + + private void constructDefaultFileUrls() { try { defaultFileUrl = httpServerConfiguration.getURL(TestFileHelper.DEFAULT_FILE_ID); defaultDownloadFileAddress = defaultFileUrl.toExternalForm(); defaultUploadFileAddress = defaultFileUrl.toExternalForm() + "-" + defaultFileId; } catch (MalformedURLException e) { - throw new RuntimeException("Failed to construct default file URLs for test setup", e); + throw new UncheckedException(e); } - setupMessageBus(); } - + /** - * May be extended by subclasses needing to have their receivers managed. Remember to still call - * super.registerReceivers() when overriding + * Hooks up the message bus. */ - protected void registerMessageReceivers() { - alarmReceiver = addReceiver(new MessageReceiver(settingsForCUT.getAlarmDestination())); + protected void setupMessageBus() { + if (useEmbeddedMessageBus()) { + if (messageBus == null) { + messageBus = new SimpleMessageBus(); + } + MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); + if (settingsForTestClient != null) { + MessageBusManager.injectCustomMessageBus(settingsForTestClient.getComponentID(), messageBus); + } + if (settingsForCUT != null) { + MessageBusManager.injectCustomMessageBus(settingsForCUT.getComponentID(), messageBus); + } + } } - - protected MessageReceiver addReceiver(MessageReceiver receiver) { - receiverManager.addReceiver(receiver); - return receiver; + + /** + * Returns the postfix string to use when accessing user specific topics, which is the mechanism we use in the + * bit repository tests. + * + * @return The string to postfix all topix names with. + */ + protected String getTopicPostfix() { + return "-" + System.getProperty("user.name"); } - - @AfterAll - public void shutdownSuite() { - teardownMessageBus(); - teardownHttpServer(); + + /** + * Indicated whether an embedded active MQ should be started and used + */ + public boolean useEmbeddedMessageBus() { + return System.getProperty("useEmbeddedMessageBus", "true").equals("true"); } - + + @BeforeEach + public void logTestStart(TestInfo testInfo) { + Class aClass = testInfo.getTestClass().orElse(null); + String displayName = testInfo.getDisplayName(); + System.out.println("Running Integration Test " + aClass + "#" + displayName); + } + /** * Defines the standard BitRepositoryCollection configuration */ @@ -157,45 +204,44 @@ public void beforeMethod(TestInfo testInfo) { receiverManager.startListeners(); appender = hookLogger(); } - - - protected void initializeCUT() { + + /** + * Initializes the settings. Will postfix the alarm and collection topics with '-${user.name} + */ + protected void setupSettings() { + settingsForCUT = loadSettings(getComponentID()); + makeUserSpecificSettings(settingsForCUT); + SettingsUtils.initialize(settingsForCUT); + + alarmDestinationID = settingsForCUT.getRepositorySettings().getProtocolSettings().getAlarmDestination(); + + settingsForTestClient = loadSettings(testMethodName); + makeUserSpecificSettings(settingsForTestClient); } - - @AfterEach - public final void afterMethod(TestInfo testInfo) throws InterruptedException { - - if (receiverManager != null) { - receiverManager.stopListeners(); - } - if (testWatcher.isTestSuccessful()) { - afterMethodVerification(); - } - shutdownCUT(); - - //Log the stuff if the test is not successfull - if (!testWatcher.isTestSuccessful()){ - for (ILoggingEvent iLoggingEvent : appender.list) { - for (Appender iLoggingEventAppender : appenders) { - iLoggingEventAppender.doAppend(iLoggingEvent); - } - } - } - receiverManager.close(); + + /** + * May be extended by subclasses needing to have their receivers managed. Remember to still call + * super.registerReceivers() when overriding + */ + protected void registerMessageReceivers() { + alarmReceiver = addReceiver(new MessageReceiver(settingsForCUT.getAlarmDestination())); } - + + protected void initializeCUT() { + } + private static ListAppender hookLogger() { // get Logback Logger var fooLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); - + // create and start a ListAppender ListAppender listAppender = new ListAppender<>(); listAppender.start(); - - + + //Save the appenders and detach them appenders = new ArrayList<>(); - Iterator> iterator= fooLogger.iteratorForAppenders(); + Iterator> iterator = fooLogger.iteratorForAppenders(); while (iterator.hasNext()) { Appender next = iterator.next(); fooLogger.detachAppender(next); @@ -205,53 +251,12 @@ private static ListAppender hookLogger() { fooLogger.addAppender(listAppender); return listAppender; } - - /** - * May be used by specific tests for general verification when the test method has finished. Will only be run - * if the test has passed (so far). - */ - protected void afterMethodVerification() { - receiverManager.checkNoMessagesRemainInReceivers(); - } - - /** - * Purges all messages from the receivers. - */ - protected void clearReceivers() { - receiverManager.clearMessagesInReceivers(); - } - - /** - * May be overridden by specific tests wishing to do stuff. Remember to call super if this is overridden. - */ - protected void shutdownCUT() { - } - - /** - * Initializes the settings. Will postfix the alarm and collection topics with '-${user.name} - */ - protected void setupSettings() { - settingsForCUT = loadSettings(getComponentID()); - makeUserSpecificSettings(settingsForCUT); - SettingsUtils.initialize(settingsForCUT); - - alarmDestinationID = settingsForCUT.getRepositorySettings().getProtocolSettings().getAlarmDestination(); - - settingsForTestClient = loadSettings(testMethodName); - makeUserSpecificSettings(settingsForTestClient); - } - - protected Settings loadSettings(String componentID) { - return TestSettingsProvider.reloadSettings(componentID); - } - - private void makeUserSpecificSettings(Settings settings) { - settings.getRepositorySettings().getProtocolSettings() - .setCollectionDestination(settings.getCollectionDestination() + getTopicPostfix()); - settings.getRepositorySettings().getProtocolSettings() - .setAlarmDestination(settings.getAlarmDestination() + getTopicPostfix()); + + protected MessageReceiver addReceiver(MessageReceiver receiver) { + receiverManager.addReceiver(receiver); + return receiver; } - + @BeforeEach public void writeLogStatus() { if (System.getProperty("enableLogStatus", "false").equals("true")) { @@ -259,39 +264,49 @@ public void writeLogStatus() { StatusPrinter.print(lc); } } - - /** - * Indicated whether an embedded active MQ should be started and used - */ - public boolean useEmbeddedMessageBus() { - return System.getProperty("useEmbeddedMessageBus", "true").equals("true"); + + @AfterEach + public final void afterMethod() { + if (receiverManager != null) { + receiverManager.stopListeners(); + } + if (testWatcher.isTestSuccessful()) { + afterMethodVerification(); + } + shutdownCUT(); + if (!testWatcher.isTestSuccessful()) { + replayLoggedEvents(); + } } - + /** - * Indicated whether an embedded http server should be started and used + * May be used by specific tests for general verification when the test method has finished. Will only be run + * if the test has passed (so far). */ - public boolean useEmbeddedHttpServer() { - return System.getProperty("useEmbeddedHttpServer", "false").equals("true"); + protected void afterMethodVerification() { + receiverManager.checkNoMessagesRemainInReceivers(); } - + /** - * Hooks up the message bus. + * May be overridden by specific tests wishing to do stuff. Remember to call super if this is overridden. */ - protected void setupMessageBus() { - if (useEmbeddedMessageBus()) { - if (messageBus == null) { - messageBus = new SimpleMessageBus(); - } - MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); - if (settingsForTestClient != null) { - MessageBusManager.injectCustomMessageBus(settingsForTestClient.getComponentID(), messageBus); - } - if (settingsForCUT != null) { - MessageBusManager.injectCustomMessageBus(settingsForCUT.getComponentID(), messageBus); + protected void shutdownCUT() { + } + + private void replayLoggedEvents() { + for (ILoggingEvent loggingEvent : appender.list) { + for (Appender appender : appenders) { + appender.doAppend(loggingEvent); } } } - + + @AfterAll + public void shutdownSuite() { + teardownMessageBus(); + teardownHttpServer(); + } + /** * Shutdown the message bus. */ @@ -306,18 +321,10 @@ protected void teardownMessageBus() { throw new RuntimeException(e); } } - - if (broker != null) { - try { - broker.stop(); - broker = null; - } catch (Exception e) { - // No reason to pollute the test output with this - } - } + } } - + /** * Shutdown the embedded http server if any. */ @@ -326,26 +333,22 @@ protected void teardownHttpServer() { server.stop(); } } - + /** - * Returns the postfix string to use when accessing user specific topics, which is the mechanism we use in the - * bit repository tests. - * - * @return The string to postfix all topix names with. + * Indicated whether an embedded http server should be started and used */ - protected String getTopicPostfix() { - return "-" + System.getProperty("user.name"); + public boolean useEmbeddedHttpServer() { + return System.getProperty("useEmbeddedHttpServer", "false").equals("true"); } - - protected String getComponentID() { - return getClass().getSimpleName(); + + /** + * Purges all messages from the receivers. + */ + protected void clearReceivers() { + receiverManager.clearMessagesInReceivers(); } - + protected String createDate() { return Long.toString(System.currentTimeMillis()); } - - protected SecurityManager createSecurityManager() { - return new DummySecurityManager(); - } } \ No newline at end of file diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageCreationTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageCreationTest.java index 8df1bd1a8..51198039d 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageCreationTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageCreationTest.java @@ -25,6 +25,8 @@ package org.bitrepository.protocol; import java.io.ByteArrayInputStream; + +import jakarta.xml.bind.JAXBException; import org.apache.commons.io.IOUtils; import org.bitrepository.bitrepositorymessages.AlarmMessage; import org.bitrepository.bitrepositorymessages.GetChecksumsFinalResponse; @@ -36,7 +38,6 @@ import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import javax.xml.bind.JAXBException; import javax.xml.namespace.NamespaceContext; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java index 701c15bf2..dc8261f97 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java @@ -33,11 +33,11 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.activemq.ArtemisContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; -import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingDeque; @@ -49,14 +49,14 @@ /** * Runs the GeneralMessageBusTest using a LocalActiveMQBroker and a suitable - * MessageBus based on TestContainers. Regression tests utilized that uses Allure to generate reports. + * MessageBus based on TestContainers. Regression tests use Allure to generate reports. */ @Testcontainers class ActiveMQMessageBusIT extends GeneralMessageBusIT { @Container - static ActiveMQContainer activemqContainer = new ActiveMQContainer("apache/activemq:5.17.7"); - + static ArtemisContainer activemqContainer = new ArtemisContainer("apache/artemis:2.55.0"); + private MessageBusConfiguration messageBusConfig; @Override @@ -73,6 +73,8 @@ protected void setupMessageBus() { messageBusConfig = new MessageBusConfiguration(); messageBusConfig.setURL(activemqContainer.getBrokerUrl()); messageBusConfig.setName(activemqContainer.getContainerName()); + messageBusConfig.setUsername(activemqContainer.getUser()); + messageBusConfig.setPassword(activemqContainer.getPassword()); settingsForTestClient.getRepositorySettings() .getProtocolSettings() .setMessageBusConfiguration(messageBusConfig); @@ -99,7 +101,7 @@ final void collectionFilterTest() throws Exception { messageBus.setCollectionFilter(List.of(myCollectionID)); String collectionDestination = settingsForTestClient.getCollectionDestination(); - try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig, securityManager)) { + try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig)) { var identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); identifyRequest.setCollectionID(myCollectionID); jakarta.jms.Message msg = rawMessagebus.createMessage(identifyRequest); @@ -135,7 +137,7 @@ final void sendMessageToSpecificComponentTest() throws Exception { "The MESSAGE_TO_KEY "); String receiverID = "specificReceiver"; final BlockingQueue messageList = new LinkedBlockingDeque<>(); - try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig, securityManager)) { + try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig)) { rawMessagebus.addListener(settingsForTestClient.getCollectionDestination(), new MessageListener() { @Override public void onMessage(Message message) { @@ -159,10 +161,10 @@ final void toFilterTest() throws Exception { addStep("Send an identify request with a undefined 'To' header property, " + "eg. this identify requests should be handled by all components.", "Verify that the identify request bus accepts this identify request."); - messageBus.setComponentFilter(Arrays.asList(settingsForTestClient.getComponentID())); + messageBus.setComponentFilter(Collections.singletonList(settingsForTestClient.getComponentID())); String collectionDestination = settingsForTestClient.getCollectionDestination(); - try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig, securityManager)) { + try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig)) { var identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); identifyRequest.setDestination(collectionDestination); diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java index 580b6eff7..15fcf4439 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java @@ -40,7 +40,7 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; -import javax.jms.JMSException; +import jakarta.jms.JMSException; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; @@ -90,7 +90,7 @@ final void busActivityTest() throws Exception { addStep("Make sure both listeners received the message", "Both listeners received the message, and it is identical"); - alarmReceiver.waitForMessage(message.getClass(), message.getCorrelationID()); + alarmReceiver.waitForMessage(message.getClass()); } @Test @@ -100,9 +100,11 @@ final void twoListenersForTopicTest() throws Exception { addStep("Make a connection to the message bus and add two listeners", "No exceptions should be thrown"); - MessageReceiver receiver1 = addReceiver(new MessageReceiver(alarmDestinationID)); + MessageReceiver receiver1 = new MessageReceiver(alarmDestinationID); + addReceiver(receiver1); messageBus.addListener(receiver1.getDestination(), receiver1.getMessageListener()); - MessageReceiver receiver2 = addReceiver(new MessageReceiver(alarmDestinationID)); + MessageReceiver receiver2 = new MessageReceiver(alarmDestinationID); + addReceiver(receiver2); messageBus.addListener(receiver2.getDestination(), receiver2.getMessageListener()); addStep("Send a message to the topic", "No exceptions should be thrown"); @@ -112,8 +114,8 @@ final void twoListenersForTopicTest() throws Exception { addStep("Make sure both listeners received the message", "Both listeners received the message, and it is identical"); - receiver1.waitForMessage(AlarmMessage.class, message.getCorrelationID()); - receiver2.waitForMessage(AlarmMessage.class, message.getCorrelationID()); + receiver1.waitForMessage(AlarmMessage.class); + receiver2.waitForMessage(AlarmMessage.class); } @Test @@ -165,15 +167,6 @@ protected void teardownMessageBus() { } } - - if (broker != null) { - try { - broker.stop(); - broker = null; - } catch (Exception e) { - // No reason to pollute the test output with this - } - } } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java index e592d958d..a69ec679f 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java @@ -75,9 +75,13 @@ public class MessageReceiver implements AutoCloseable { private final ExecutorService executorService = Executors.newCachedThreadPool(); @Override - public void close() throws InterruptedException { + public void close() { var actives = executorService.shutdownNow(); - var allClosed = executorService.awaitTermination(10, TimeUnit.SECONDS); + try { + var allClosed = executorService.awaitTermination(10, TimeUnit.SECONDS); + } catch (InterruptedException e) { + //Not important, we are closing anyhow + } } /** diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java index ab038d40f..b39fc7509 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/RawMessagebus.java @@ -30,17 +30,15 @@ import jakarta.jms.MessageConsumer; import jakarta.jms.MessageProducer; import jakarta.jms.Session; -import org.bitrepository.protocol.activemq.ArtemisConnectionFactoryProvider; +import jakarta.xml.bind.JAXBException; import org.bitrepository.common.JaxbHelper; import org.bitrepository.protocol.CoordinationLayerException; import org.bitrepository.protocol.activemq.ActiveMQMessageBus; -import org.bitrepository.protocol.messagebus.MessageBus; -import org.bitrepository.protocol.security.SecurityManager; +import org.bitrepository.protocol.activemq.ArtemisConnectionFactoryProvider; import org.bitrepository.settings.repositorysettings.MessageBusConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.xml.bind.JAXBException; import java.util.HashMap; import java.util.Map; @@ -52,10 +50,8 @@ public class RawMessagebus implements AutoCloseable { private final Session consumerSession; private final Connection connection; public static final boolean TRANSACTED = false; - private final SecurityManager securityManager; - public RawMessagebus(MessageBusConfiguration messageBusConfiguration, SecurityManager securityManager) { - this.securityManager = securityManager; + public RawMessagebus(MessageBusConfiguration messageBusConfiguration) { var connectionFactory = ArtemisConnectionFactoryProvider.create(messageBusConfiguration); try { @@ -70,8 +66,9 @@ public RawMessagebus(MessageBusConfiguration messageBusConfiguration, SecurityMa throw new CoordinationLayerException("Unable to initialise connection to message bus", e); } } - @Override - public void close() throws Exception { + + @Override + public void close() throws JMSException { connection.setExceptionListener(null); connection.close(); } diff --git a/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/RepositorySettings.xml b/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/RepositorySettings.xml index b44eae424..a28b2cfca 100644 --- a/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/RepositorySettings.xml +++ b/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/RepositorySettings.xml @@ -53,6 +53,8 @@ MyMessageBus tcp://localhost:9999 + artemis + artemis diff --git a/bitrepository-integration/pom.xml b/bitrepository-integration/pom.xml index 867a33e39..ee0f0e5ee 100644 --- a/bitrepository-integration/pom.xml +++ b/bitrepository-integration/pom.xml @@ -87,11 +87,6 @@ io.qameta.allure allure-maven - 2.12.0 - - ${project.basedir}/allure-results - ${project.basedir}/allure-report - maven-assembly-plugin diff --git a/bitrepository-integrity-service/pom.xml b/bitrepository-integrity-service/pom.xml index c368ed75c..199c5370f 100644 --- a/bitrepository-integrity-service/pom.xml +++ b/bitrepository-integrity-service/pom.xml @@ -1,4 +1,5 @@ - + org.bitrepository.reference bitrepository-parent @@ -39,13 +40,12 @@ jackson-databind - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider + com.fasterxml.jackson.jakarta.rs + jackson-jakarta-rs-json-provider jakarta.ws.rs jakarta.ws.rs-api - ${jakarta.ws.rs.version} org.bitrepository.reference @@ -54,15 +54,8 @@ - javax - javaee-web-api - ${javaee.web.version} - provided - - - javax.servlet - javax.servlet-api - ${javax.servlet.version} + jakarta.servlet + jakarta.servlet-api provided @@ -81,26 +74,20 @@ test - org.apache.activemq + org.apache.artemis artemis-server - ${artemis.version} test - - org.junit.jupiter - junit-jupiter - test - - - org.testcontainers - testcontainers-junit-jupiter - test - - - org.testcontainers - testcontainers-postgresql - test - + + org.testcontainers + testcontainers-junit-jupiter + test + + + org.testcontainers + testcontainers-postgresql + test + @@ -113,11 +100,6 @@ io.qameta.allure allure-maven - 2.12.0 - - ${project.basedir}/allure-results - ${project.basedir}/allure-report - maven-assembly-plugin @@ -172,26 +154,26 @@ - + diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/IntegrityServiceRestApplication.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/IntegrityServiceRestApplication.java index 7f5ac1d28..205b4b155 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/IntegrityServiceRestApplication.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/IntegrityServiceRestApplication.java @@ -1,8 +1,9 @@ package org.bitrepository.integrityservice.web; -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; -import javax.ws.rs.core.Application; +import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; +import jakarta.ws.rs.core.Application; + import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -10,6 +11,8 @@ public class IntegrityServiceRestApplication extends Application { @Override public Set> getClasses() { - return new HashSet<>(Arrays.asList(JacksonJsonProvider.class, RestIntegrityService.class, RestStatisticsService.class)); + return new HashSet<>(Arrays.asList(JacksonJsonProvider.class, + RestIntegrityService.class, + RestStatisticsService.class)); } } diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestIntegrityService.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestIntegrityService.java index 951416002..4f2fab51d 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestIntegrityService.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestIntegrityService.java @@ -47,18 +47,19 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.FormParam; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.FormParam; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -80,9 +81,6 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import static javax.ws.rs.core.Response.ResponseBuilder; -import static javax.ws.rs.core.Response.Status; -import static javax.ws.rs.core.Response.status; @Path("/IntegrityService") public class RestIntegrityService { @@ -117,15 +115,21 @@ public HashMap> getTotalFileIDs(@QueryParam("collectionID") if (it == null) { throw new WebApplicationException( - status(Status.NO_CONTENT).entity("Failed to get missing files from database").type( - MediaType.TEXT_PLAIN).build()); + Response.status(Response.Status.NO_CONTENT) + .entity("Failed to get missing files from database") + .type(MediaType.TEXT_PLAIN) + .build()); } List iteratorAsList = StreamingTools.iteratorToList(it); if (iteratorAsList.isEmpty()) { - throw new WebApplicationException(status(Status.NOT_FOUND).entity( - String.format(Locale.ROOT, "No fileIDs found for collection: '%s' and pillar: '%s'", collectionID, - pillarID)).type(MediaType.TEXT_PLAIN).build()); + throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND) + .entity( + String.format(Locale.ROOT, + "No fileIDs found for collection: '%s' and pillar: '%s'", + collectionID, + pillarID)).type(MediaType.TEXT_PLAIN) + .build()); } return new HashMap<>(Map.of(pillarID, iteratorAsList)); @@ -150,15 +154,20 @@ public HashMap> getMissingFileIDs(@QueryParam("collectionID List missingOnOtherPillar; List otherPillars = SettingsUtils.getPillarIDsForCollection(collectionID).stream().filter( - pillar -> !pillar.equals(pillarID)).collect(Collectors.toList()); + pillar -> !pillar.equals(pillarID)).collect(Collectors.toList()); try { missingOnPillar = getReportPart(part, collectionID, pillarID, page, pageSize); output.put(pillarID, missingOnPillar); } catch (FileNotFoundException e) { - throw new WebApplicationException(status(Status.NOT_FOUND).entity(String.format(Locale.ROOT, - "No integrity '%s' report part for collection: '%s' and pillar: '%s' found!", part.getHumanString(), - collectionID, pillarID)).type(MediaType.TEXT_PLAIN).build()); + throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND) + .entity(String.format(Locale.ROOT, + "No integrity '%s' report part for collection: '%s' and pillar: '%s' found!", + part.getHumanString(), + collectionID, + pillarID)) + .type(MediaType.TEXT_PLAIN) + .build()); } for (String otherPillar : otherPillars) { @@ -182,9 +191,10 @@ public HashMap> getMissingFileIDs(@QueryParam("collectionID public HashMap> getMissingChecksums(@QueryParam("collectionID") String collectionID, @QueryParam("pillarID") String pillarID, @QueryParam("page") int page, - @DefaultValue("100") @QueryParam("pageSize") int pageSize) { + @DefaultValue("100") @QueryParam("pageSize") + int pageSize) { List streamingOutput = getReportPartForPillar(ReportPart.MISSING_CHECKSUM, collectionID, pillarID, page, - pageSize); + pageSize); return new HashMap<>(Map.of(pillarID, streamingOutput)); } @@ -201,9 +211,10 @@ public HashMap> getMissingChecksums(@QueryParam("collection public HashMap> geObsoleteChecksums(@QueryParam("collectionID") String collectionID, @QueryParam("pillarID") String pillarID, @QueryParam("page") int page, - @DefaultValue("100") @QueryParam("pageSize") int pageSize) { + @DefaultValue("100") @QueryParam("pageSize") + int pageSize) { List streamingOutput = getReportPartForPillar(ReportPart.OBSOLETE_CHECKSUM, collectionID, pillarID, - page, pageSize); + page, pageSize); return new HashMap<>(Map.of(pillarID, streamingOutput)); } @@ -222,7 +233,7 @@ public HashMap> getChecksumErrors(@QueryParam("collectionID @QueryParam("page") int page, @DefaultValue("100") @QueryParam("pageSize") int pageSize) { List streamingOutput = getReportPartForPillar(ReportPart.CHECKSUM_ERROR, collectionID, pillarID, page, - pageSize); + pageSize); return new HashMap<>(Map.of(pillarID, streamingOutput)); } @@ -248,8 +259,20 @@ public String getIntegrityStatus(@QueryParam("collectionID") String collectionID String pillarName = Objects.requireNonNullElse(SettingsUtils.getPillarName(pillar), "N/A"); PillarType pillarTypeObject = SettingsUtils.getPillarType(pillar); String pillarType = pillarTypeObject != null ? pillarTypeObject.value() : null; - PillarCollectionStat emptyStat = new PillarCollectionStat(pillar, collectionID, pillarName, pillarType, - 0L, 0L, 0L, 0L, 0L, 0L, "", null, Instant.EPOCH, Instant.EPOCH); + PillarCollectionStat emptyStat = new PillarCollectionStat(pillar, + collectionID, + pillarName, + pillarType, + 0L, + 0L, + 0L, + 0L, + 0L, + 0L, + "", + null, + Instant.EPOCH, + Instant.EPOCH); stats.put(pillar, emptyStat); } } @@ -270,8 +293,10 @@ public List getPillarDetails() { List pillarDetails = SettingsUtils.getPillarIntegrityDetails(); List result = new ArrayList<>(pillarDetails.size()); for (PillarIntegrityDetails.PillarDetails details : pillarDetails) { - PillarDetailsDto detailsDTO = new PillarDetailsDto(details.getPillarID(), details.getPillarName(), - details.getPillarType().value(), details.getPillarDeleteFileApprover()); + PillarDetailsDto detailsDTO = new PillarDetailsDto(details.getPillarID(), + details.getPillarName(), + details.getPillarType().value(), + details.getPillarDeleteFileApprover()); result.add(detailsDTO); } return result; @@ -360,9 +385,9 @@ public StreamingOutput getLatestIntegrityReport(@QueryParam("collectionID") Stri try { fullReport = integrityReportProvider.getLatestIntegrityReportReader(collectionID).getFullReport(); } catch (FileNotFoundException e) { - throw new WebApplicationException(status(Status.NOT_FOUND).entity( - String.format(Locale.ROOT, "No integrity report for collection: '%s' found!", collectionID)).type( - MediaType.TEXT_PLAIN).build()); + throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity( + String.format(Locale.ROOT, "No integrity report for collection: '%s' found!", collectionID)).type( + MediaType.TEXT_PLAIN).build()); } return output -> streamFile(fullReport, output); } @@ -395,15 +420,15 @@ public Response getIntegrityReportsAsZIP(@QueryParam("collectionID") String coll zipOut.flush(); } catch (IOException e) { throw new WebApplicationException( - status(Status.INTERNAL_SERVER_ERROR) - .entity("Internal error when trying to zip the report file " + key + ": " + e) - .type(MediaType.TEXT_PLAIN) - .build()); + Response.status(Response.Status.INTERNAL_SERVER_ERROR) + .entity("Internal error when trying to zip the report file " + key + ": " + e) + .type(MediaType.TEXT_PLAIN) + .build()); } }); } }; - ResponseBuilder response = Response.ok(); + Response.ResponseBuilder response = Response.ok(); response.type("application/zip"); response.header("Content-Disposition", "attachment; filename=" + fileName); response.entity(streamingOutput); @@ -425,11 +450,13 @@ public File getLatestIntegrityReportPartFile(String collectionID, String reportP reportPartFile = integrityReportProvider.getIntegrityReportPart(collectionID, pillarID, reportPart); } catch (FileNotFoundException e) { String errorMessage = String.format(Locale.ROOT, - "No '%s' report part for collection: '%s' and pillar: '%s' found!", reportPart, collectionID, - pillarID); + "No '%s' report part for collection: '%s' and pillar: '%s' found!", + reportPart, + collectionID, + pillarID); log.error(errorMessage); throw new WebApplicationException( - status(Status.NOT_FOUND).entity(errorMessage).type(MediaType.TEXT_PLAIN).build()); + Response.status(Response.Status.NOT_FOUND).entity(errorMessage).type(MediaType.TEXT_PLAIN).build()); } return reportPartFile; } @@ -490,7 +517,7 @@ public String getCollectionInformation(@QueryParam("collectionID") String collec * @throws FileNotFoundException If there is no integrity report for the given {@link ReportPart}. */ private List getReportPart(ReportPart part, String collectionID, String pillarID, int page, int pageSize) - throws FileNotFoundException { + throws FileNotFoundException { List reportPartContent; int offset = getOffset(page, pageSize); @@ -513,9 +540,14 @@ private List getReportPartForPillar(ReportPart part, String collectionID try { reportPartContent = getReportPart(part, collectionID, pillarID, page, pageSize); } catch (FileNotFoundException e) { - throw new WebApplicationException(status(Status.NOT_FOUND).entity(String.format(Locale.ROOT, - "No integrity '%s' report part for collection: '%s' and pillar: '%s' found!", part.getHumanString(), - collectionID, pillarID)).type(MediaType.TEXT_PLAIN).build()); + throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND) + .entity(String.format(Locale.ROOT, + "No integrity '%s' report part for collection: '%s' and pillar: '%s' found!", + part.getHumanString(), + collectionID, + pillarID)) + .type(MediaType.TEXT_PLAIN) + .build()); } return reportPartContent; } @@ -536,7 +568,7 @@ private List compareMissingFiles(List missingOnPillar, String co List agreedMissingFileIDs = new ArrayList<>(); try { List filesMissingOnPillar = getReportPart(ReportPart.MISSING_FILE, collectionID, pillar, 1, - Integer.MAX_VALUE); + Integer.MAX_VALUE); for (String missingFileID : missingOnPillar) { if (Collections.binarySearch(filesMissingOnPillar, missingFileID) >= 0) { agreedMissingFileIDs.add(missingFileID); diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestStatisticsService.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestStatisticsService.java index 84751dd3c..797acd1fa 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestStatisticsService.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestStatisticsService.java @@ -32,12 +32,12 @@ import org.bitrepository.integrityservice.cache.IntegrityModel; import org.bitrepository.integrityservice.cache.PillarCollectionStat; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; import java.time.Instant; import java.util.ArrayList; import java.util.HashMap; diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/StreamingTools.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/StreamingTools.java index e3cf4eeab..e6a04afcb 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/StreamingTools.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/StreamingTools.java @@ -28,8 +28,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.StreamingOutput; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.StreamingOutput; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/CreateStatisticsEntryStep.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/CreateStatisticsEntryStep.java index 26f35e617..18f62530c 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/CreateStatisticsEntryStep.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/CreateStatisticsEntryStep.java @@ -70,7 +70,7 @@ public synchronized void performStep() { } sc.getCollectionStat().setFileCount(store.getNumberOfFilesInCollection(collectionID)); sc.getCollectionStat().setDataSize(store.getCollectionFileSize(collectionID)); - sc.getCollectionStat().setLatestFileTime(store.getDateForNewestFileEntryForCollection(collectionID)); + sc.getCollectionStat().setLatestFileTime(store.getDateForNewestFileEntryForCollectionInstant(collectionID)); store.createStatistics(collectionID, sc); } diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleMissingFilesStep.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleMissingFilesStep.java index 0a27513d4..e121be7d5 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleMissingFilesStep.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleMissingFilesStep.java @@ -88,8 +88,8 @@ public synchronized void performStep() throws StepFailedException { String missingFile; while ((missingFile = issueIterator.getNextIntegrityIssue()) != null) { - Date earliestDate = store.getEarliestFileDate(reporter.getCollectionID(), missingFile); - if (earliestDate.before(missingAfterDate)) { + var earliestDate = store.getEarliestFileInstant(reporter.getCollectionID(), missingFile); + if (earliestDate.isBefore(missingAfterInstant)) { try { Set pillarsWithFile = getPillarsWithFile(missingFile, reporter.getCollectionID()); for (String pillar : pillars) { diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleObsoleteChecksumsStep.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleObsoleteChecksumsStep.java index bd9aae5ba..9ef29fafe 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleObsoleteChecksumsStep.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleObsoleteChecksumsStep.java @@ -85,7 +85,7 @@ public synchronized void performStep() throws StepFailedException { " (i.e., checksums don't expire).", pillar); continue; } else { - Date outdated = Date.from(Instant.now().minus(maxAge)); + var outdated = Instant.now().minus(maxAge); try (IntegrityIssueIterator obsoleteChecksumsIterator = store.findChecksumsOlderThan(outdated, pillar, reporter.getCollectionID())) { String file; diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStep.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStep.java index 9f3adee3d..d5af1f65c 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStep.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStep.java @@ -155,7 +155,7 @@ private void handleFailureEvent(OperationEvent event) throws WorkflowAbortedExce private ContributorQuery[] getQueries(Collection pillars) { List res = new ArrayList<>(); for (String pillar : pillars) { - Date latestChecksumEntry = store.getDateForNewestChecksumEntryForPillar(pillar, collectionID); + var latestChecksumEntry = store.getDateForNewestChecksumEntryForPillarInstant(pillar, collectionID); res.add(new ContributorQuery(pillar, latestChecksumEntry, null, maxNumberOfResultsPerConversation)); } diff --git a/bitrepository-integrity-service/src/main/webapp/WEB-INF/web.xml b/bitrepository-integrity-service/src/main/webapp/WEB-INF/web.xml index 4a1a630bf..1a8b7e0f3 100644 --- a/bitrepository-integrity-service/src/main/webapp/WEB-INF/web.xml +++ b/bitrepository-integrity-service/src/main/webapp/WEB-INF/web.xml @@ -30,7 +30,7 @@ Bitrepository-integrityservice org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet - javax.ws.rs.Application + jakarta.ws.rs.Application org.bitrepository.integrityservice.web.IntegrityServiceRestApplication 1 diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java index 3dbf681e4..55cd738bc 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java @@ -58,7 +58,7 @@ public abstract class IntegrityDatabaseTestCase { protected Settings settings; @Container - static PostgreSQLContainer integrityDB = new PostgresFixedPortContainer("postgres:12-alpine") + static PostgreSQLContainer integrityDB = new PostgresFixedPortContainer("postgres:18-alpine") .withFixedExposedPort(9876, 5432, InternetProtocol.TCP) .withDatabaseName("integrityDB") .withUsername("testcontainerUser") diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java index dfbcacda0..2fff6fbbe 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java @@ -103,7 +103,7 @@ class MissingChecksumTests { IntegrityReporter reporter; @Container - static PostgreSQLContainer postgreSQLContainer = new PostgresFixedPortContainer("postgres:12-alpine") + static PostgreSQLContainer postgreSQLContainer = new PostgresFixedPortContainer("postgres:18-alpine") .withFixedExposedPort(9876, 5432, InternetProtocol.TCP) .withDatabaseName("integrityDB") .withUsername("testcontainerUser") @@ -126,13 +126,13 @@ public void beforeEach() throws Exception { IntegrityDatabaseCreator integrityDatabaseCreator = new IntegrityDatabaseCreator(); integrityDatabaseCreator.createIntegrityDatabase(settings, "sql/postgres/integrityDBCreation.sql", "sql/postgres/integrityDB7to8migration.sql"); - settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID().clear(); - settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID().add(PILLAR_1); - settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID().add(PILLAR_2); + settings.getRepositorySettings().getCollections().getCollection().getFirst().getPillarIDs().getPillarID().clear(); + settings.getRepositorySettings().getCollections().getCollection().getFirst().getPillarIDs().getPillarID().add(PILLAR_1); + settings.getRepositorySettings().getCollections().getCollection().getFirst().getPillarIDs().getPillarID().add(PILLAR_2); Duration time = DatatypeFactory.newInstance().newDuration(0); settings.getReferenceSettings().getIntegrityServiceSettings().setTimeBeforeMissingFileCheck(time); - TEST_COLLECTION = settings.getRepositorySettings().getCollections().getCollection().get(0).getID(); + TEST_COLLECTION = settings.getRepositorySettings().getCollections().getCollection().getFirst().getID(); SettingsUtils.initialize(settings); collector = Mockito.mock(IntegrityInformationCollector.class); @@ -226,7 +226,7 @@ void testMissingChecksumForFirstGetChecksums() throws WorkflowAbortedException { List missingChecksumsPillar2 = getIssuesFromIterator(model.findFilesWithMissingChecksum(TEST_COLLECTION, PILLAR_2, testStart)); Assertions.assertEquals(1, missingChecksumsPillar2.size()); - Assertions.assertEquals(TEST_FILE_1, missingChecksumsPillar2.get(0)); + Assertions.assertEquals(TEST_FILE_1, missingChecksumsPillar2.getFirst()); } @Test @@ -326,7 +326,7 @@ protected void populateDatabase(IntegrityModel model, String... files) { items.getFileIDsDataItem().add(item); } data.setFileIDsDataItems(items); - String collectionID = settings.getRepositorySettings().getCollections().getCollection().get(0).getID(); + String collectionID = settings.getRepositorySettings().getCollections().getCollection().getFirst().getID(); model.addFileIDs(data, PILLAR_1, collectionID); model.addFileIDs(data, PILLAR_2, collectionID); } diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java index 0a79c49dc..efa01c82b 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java @@ -70,7 +70,7 @@ class DatabaseStressTests { protected Settings settings; @Container - static PostgreSQLContainer postgreSQLContainer = new PostgresFixedPortContainer("postgres:12-alpine") + static PostgreSQLContainer postgreSQLContainer = new PostgresFixedPortContainer("postgres:18-alpine") .withFixedExposedPort(9876, 5432, InternetProtocol.TCP) .withDatabaseName("integrityDB") .withUsername("testcontainerUser") diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java index 1383c5827..774734472 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java @@ -66,56 +66,64 @@ public class UpdateChecksumsStepTest extends WorkflowstepTest { public static final String TEST_PILLAR_1 = "test-pillar-1"; public static final String TEST_FILE_1 = "test-file-1"; public static final String DEFAULT_CHECKSUM = "0123456789"; - + @Test @Tag("regressiontest") void testPositiveReply() throws WorkflowAbortedException { addDescription("Test the step for updating the checksums can handle COMPLETE operation event."); - doAnswer(new Answer() { - public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; - eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); - return null; - } + doAnswer(invocation -> { + EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); + eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); + return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, + model, + alerter, + createChecksumSpecTYPE(), + settings, + TEST_COLLECTION, + integrityContributors); step.performStep(); verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), - any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); verifyNoMoreInteractions(alerter); } - + @Test @Tag("regressiontest") void testAbortWorkflowWhenNegativeReply() { addDescription("Test the step for updating the checksums will abort the workflow in case " - + "of FAILURE operation event and AbortOnFailedContributor = true ."); - doAnswer(new Answer() { - public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; - eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); - return null; - } + + "of FAILURE operation event and AbortOnFailedContributor = true ."); + doAnswer(invocation -> { + EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); + eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, + TEST_COLLECTION, + ResponseCode.FAILURE)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); + return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>()); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>()); when(integrityContributors.getFailedContributors()).thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))); - + settings.getReferenceSettings().getIntegrityServiceSettings().setAbortOnFailedContributor(true); - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, + model, + alerter, + createChecksumSpecTYPE(), + settings, + TEST_COLLECTION, + integrityContributors); try { step.performStep(); Assertions.fail("The step should have thrown an WorkflowAbortedException"); @@ -123,282 +131,353 @@ public Void answer(InvocationOnMock invocation) { // nothing to do here } verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); verify(integrityContributors).failContributor(eq(TEST_PILLAR_1)); verify(alerter).integrityFailed(anyString(), eq(TEST_COLLECTION)); } - + @Test @Tag("regressiontest") void testRetryCollectionWhenNegativeReply() throws WorkflowAbortedException { addDescription("Test the step for updating the file ids will retry on a FAILED event"); - + final ResultingChecksums resultingChecksums = createResultingChecksums(DEFAULT_CHECKSUM, TEST_FILE_1); doAnswer(new Answer() { boolean firstAnswer = true; - + public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; + EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); if (firstAnswer) { firstAnswer = false; - eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); + eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, + TEST_COLLECTION, + ResponseCode.FAILURE)); eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); } else { eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); - eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, TEST_COLLECTION, - resultingChecksums, createChecksumSpecTYPE(), false)); + eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, + TEST_COLLECTION, + resultingChecksums, + createChecksumSpecTYPE(), + false)); eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); } return null; } }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>()); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>()); when(integrityContributors.getFailedContributors()).thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, + model, + alerter, + createChecksumSpecTYPE(), + settings, + TEST_COLLECTION, + integrityContributors); step.performStep(); - verify(collector, times(2)).getChecksums(eq(TEST_COLLECTION), any(), - any(ChecksumSpecTYPE.class), any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + verify(collector, times(2)).getChecksums(eq(TEST_COLLECTION), + any(), + any(ChecksumSpecTYPE.class), + any(), + anyString(), + any(ContributorQuery[].class), + any(EventHandler.class)); verify(model).addChecksums(resultingChecksums.getChecksumDataItems(), TEST_PILLAR_1, TEST_COLLECTION); verifyNoMoreInteractions(alerter); verify(integrityContributors).failContributor(eq(TEST_PILLAR_1)); verify(integrityContributors).finishContributor(eq(TEST_PILLAR_1)); - + } - + @Test @Tag("regressiontest") void testContinueWorkflowNegativeReply() throws WorkflowAbortedException { addDescription("Test the step for updating the checksums will continue the workflow in case " - + "of FAILURE operation event and AbortOnFailedContributor = false ."); - doAnswer(new Answer() { - public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; - eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); - return null; - } + + "of FAILURE operation event and AbortOnFailedContributor = false ."); + doAnswer(invocation -> { + EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); + eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, + TEST_COLLECTION, + ResponseCode.FAILURE)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); + return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>()); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>()); when(integrityContributors.getFailedContributors()).thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))); - + settings.getReferenceSettings().getIntegrityServiceSettings().setAbortOnFailedContributor(false); - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, + model, + alerter, + createChecksumSpecTYPE(), + settings, + TEST_COLLECTION, + integrityContributors); step.performStep(); - + verify(integrityContributors).failContributor(eq(TEST_PILLAR_1)); verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); verify(alerter).integrityFailed(anyString(), eq(TEST_COLLECTION)); } - + @Test @Tag("regressiontest") void testIngestOfResults() throws WorkflowAbortedException { addDescription("Test the step for updating the checksums delivers the results to the integrity model."); final ResultingChecksums resultingChecksums = createResultingChecksums(DEFAULT_CHECKSUM, TEST_FILE_1); - doAnswer(new Answer() { - public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; - eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); - eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, TEST_COLLECTION, - resultingChecksums, createChecksumSpecTYPE(), false)); - eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); - return null; - } + doAnswer(invocation -> { + EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); + eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); + eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, + TEST_COLLECTION, + resultingChecksums, + createChecksumSpecTYPE(), + false)); + eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); + return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, + model, + alerter, + createChecksumSpecTYPE(), + settings, + TEST_COLLECTION, + integrityContributors); step.performStep(); - verify(collector).getChecksums(eq(TEST_COLLECTION), any(), - any(ChecksumSpecTYPE.class), any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + verify(collector).getChecksums(eq(TEST_COLLECTION), + any(), + any(ChecksumSpecTYPE.class), + any(), + anyString(), + any(ContributorQuery[].class), + any(EventHandler.class)); verify(model).addChecksums(resultingChecksums.getChecksumDataItems(), TEST_PILLAR_1, TEST_COLLECTION); verifyNoMoreInteractions(alerter); } - + @Test @Tag("regressiontest") void testCallForChangingChecksumStates() throws WorkflowAbortedException { addDescription("Test the step for updating the checksums delivers the results to the integrity model."); final ResultingChecksums resultingChecksums = createResultingChecksums(DEFAULT_CHECKSUM, TEST_FILE_1); - doAnswer(new Answer() { - public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; - eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); - eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, TEST_COLLECTION, - resultingChecksums, createChecksumSpecTYPE(), false)); - eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); - return null; - } + doAnswer(invocation -> { + EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); + eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); + eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, + TEST_COLLECTION, + resultingChecksums, + createChecksumSpecTYPE(), + false)); + eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); + return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + UpdateChecksumsStep step = new FullUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + settings, TEST_COLLECTION, integrityContributors); step.performStep(); - verify(collector).getChecksums(eq(TEST_COLLECTION), any(), - any(ChecksumSpecTYPE.class), any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + verify(collector).getChecksums(eq(TEST_COLLECTION), + any(), + any(ChecksumSpecTYPE.class), + any(), + anyString(), + any(ContributorQuery[].class), + any(EventHandler.class)); verify(model).resetChecksumCollectionProgress(TEST_COLLECTION); verify(model).addChecksums(resultingChecksums.getChecksumDataItems(), TEST_PILLAR_1, TEST_COLLECTION); verifyNoMoreInteractions(alerter); } - + @Test @Tag("regressiontest") void testPartialResults() throws WorkflowAbortedException { addDescription("Test that the number of partial is used for generating more than one request."); final ResultingChecksums resultingChecksums = createResultingChecksums(DEFAULT_CHECKSUM, TEST_FILE_1); - + addStep("Setup the collector mock to generate a isPartialResult=true event the first time and a " + - "isPartialResult=false the second time", + "isPartialResult=false the second time", "The collectors getFileIDs should be called 2 time. The same goes for the 'models' addFileIDs"); doAnswer(new Answer() { boolean firstPage = true; - + public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; + EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); - eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, TEST_COLLECTION, - resultingChecksums, createChecksumSpecTYPE(), firstPage)); + eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, + TEST_COLLECTION, + resultingChecksums, + createChecksumSpecTYPE(), + firstPage)); firstPage = false; eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); return null; } }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); - + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>()); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, + model, + alerter, + createChecksumSpecTYPE(), + settings, + TEST_COLLECTION, + integrityContributors); + step.performStep(); verify(model, times(2)).addChecksums(resultingChecksums.getChecksumDataItems(), - TEST_PILLAR_1, TEST_COLLECTION); - verify(collector, times(2)).getChecksums(eq(TEST_COLLECTION), any(), - any(ChecksumSpecTYPE.class), any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + TEST_PILLAR_1, TEST_COLLECTION); + verify(collector, times(2)).getChecksums(eq(TEST_COLLECTION), + any(), + any(ChecksumSpecTYPE.class), + any(), + anyString(), + any(ContributorQuery[].class), + any(EventHandler.class)); } - + @Test @Tag("regressiontest") void testFullChecksumCollection() throws WorkflowAbortedException { addDescription("Test that the full list of checksums is requested."); - - doAnswer(new Answer() { - public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; - eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); - return null; - } - }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + + doAnswer(invocation -> { + invocation.getArgument(6, EventHandler.class).handleEvent(new CompleteEvent(TEST_COLLECTION, null)); + return null; + }).when(collector) + .getChecksums( + eq(TEST_COLLECTION), + any(), + any(ChecksumSpecTYPE.class), + any(), + anyString(), + any(ContributorQuery[].class), + any(EventHandler.class)); + when(model.getDateForNewestChecksumEntryForPillarInstant(anyString(), anyString())).thenReturn(Instant.EPOCH); when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + UpdateChecksumsStep step = new FullUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + settings, TEST_COLLECTION, integrityContributors); step.performStep(); - - ContributorQuery[] expectedContributorQueries = - makeFullQueries(settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID()); - - verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), - any(), anyString(), eq(expectedContributorQueries), any(EventHandler.class)); + + List pillarID = settings.getRepositorySettings() + .getCollections() + .getCollection() + .getFirst() + .getPillarIDs() + .getPillarID(); + ContributorQuery[] expectedContributorQueries = makeFullQueries(pillarID); + + verify(collector).getChecksums( + eq(TEST_COLLECTION), + any(), + any(ChecksumSpecTYPE.class), + any(), + anyString(), + eq(expectedContributorQueries), + any(EventHandler.class)); verifyNoMoreInteractions(alerter); } - + @Test @Tag("regressiontest") void testIncrementalChecksumCollection() throws WorkflowAbortedException { addDescription("Test that only the list of new checksums is requested."); - - doAnswer(new Answer() { - public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; - eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); - return null; - } + + doAnswer(invocation -> { + EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); + eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); + return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, + model, + alerter, + createChecksumSpecTYPE(), + settings, + TEST_COLLECTION, + integrityContributors); step.performStep(); - + ContributorQuery[] expectedContributorQueries = - makeQueries(settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID(), model); - + makeQueries(settings.getRepositorySettings() + .getCollections() + .getCollection() + .getFirst() + .getPillarIDs() + .getPillarID(), model); + verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), - any(), anyString(), eq(expectedContributorQueries), any(EventHandler.class)); + any(), anyString(), eq(expectedContributorQueries), any(EventHandler.class)); verifyNoMoreInteractions(alerter); } - + private ContributorQuery[] makeFullQueries(List pillars) { List res = new ArrayList<>(); for (String pillar : pillars) { - Instant latestChecksumDate = null; + Instant latestChecksumDate = Instant.EPOCH; res.add(new ContributorQuery(pillar, latestChecksumDate, null, SettingsUtils.DEFAULT_MAX_CLIENT_PAGE_SIZE)); } - + return res.toArray(new ContributorQuery[pillars.size()]); } - + private ContributorQuery[] makeQueries(List pillars, IntegrityModel store) { List res = new ArrayList<>(); for (String pillar : pillars) { Instant latestChecksumDate = store.getDateForNewestChecksumEntryForPillarInstant(pillar, TEST_COLLECTION); res.add(new ContributorQuery(pillar, latestChecksumDate, null, SettingsUtils.DEFAULT_MAX_CLIENT_PAGE_SIZE)); } - + return res.toArray(new ContributorQuery[pillars.size()]); } - - - private ResultingChecksums createResultingChecksums(String checksum, String... fileids) { + + private ResultingChecksums createResultingChecksums(String checksum, String... fileIDs) { ResultingChecksums res = new ResultingChecksums(); - res.getChecksumDataItems().addAll(createChecksumData(checksum, fileids)); + res.getChecksumDataItems().addAll(createChecksumData(checksum, fileIDs)); return res; } - - private List createChecksumData(String checksum, String... fileids) { + + private List createChecksumData(String checksum, String... fileIDs) { List res = new ArrayList<>(); - for (String fileID : fileids) { + for (String fileID : fileIDs) { ChecksumDataForChecksumSpecTYPE csData = new ChecksumDataForChecksumSpecTYPE(); csData.setCalculationTimestamp(CalendarUtils.getXmlGregorianCalendar(Instant.now())); try { @@ -411,7 +490,7 @@ private List createChecksumData(String checksum } return res; } - + private ChecksumSpecTYPE createChecksumSpecTYPE() { ChecksumSpecTYPE res = new ChecksumSpecTYPE(); res.setChecksumType(ChecksumType.MD5); diff --git a/bitrepository-monitoring-service/pom.xml b/bitrepository-monitoring-service/pom.xml index 93309d7ba..6fbb1cafa 100644 --- a/bitrepository-monitoring-service/pom.xml +++ b/bitrepository-monitoring-service/pom.xml @@ -28,39 +28,27 @@ org.apache.cxf cxf-rt-transports-http - ${cxf.version} org.apache.cxf cxf-rt-rs-client - ${cxf.version} com.fasterxml.jackson.core jackson-databind - ${jackson.version} - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - ${jackson.version} + com.fasterxml.jackson.jakarta.rs + jackson-jakarta-rs-json-provider jakarta.ws.rs jakarta.ws.rs-api - ${jakarta.ws.rs.version} - javax - javaee-web-api - ${javaee.web.version} - provided - - - javax.servlet - javax.servlet-api - ${javax.servlet.version} + jakarta.servlet + jakarta.servlet-api provided @@ -79,9 +67,8 @@ test - org.apache.activemq + org.apache.artemis artemis-server - ${artemis.version} test @@ -91,11 +78,6 @@ io.qameta.allure allure-maven - 2.12.0 - - ${project.basedir}/allure-results - ${project.basedir}/allure-report - maven-assembly-plugin diff --git a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/MonitoringServiceRestApplication.java b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/MonitoringServiceRestApplication.java index c62829d9e..7f61574d9 100644 --- a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/MonitoringServiceRestApplication.java +++ b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/MonitoringServiceRestApplication.java @@ -1,8 +1,8 @@ package org.bitrepository.monitoringservice.webservice; -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; -import javax.ws.rs.core.Application; +import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; +import jakarta.ws.rs.core.Application; import java.util.Arrays; import java.util.HashSet; import java.util.Set; diff --git a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/RestMonitoringService.java b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/RestMonitoringService.java index 4d78f8c0a..39972f4ea 100644 --- a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/RestMonitoringService.java +++ b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/RestMonitoringService.java @@ -26,9 +26,9 @@ import org.bitrepository.monitoringservice.MonitoringServiceFactory; import org.bitrepository.monitoringservice.status.ComponentStatus; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebConfOption.java b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebConfOption.java index cd66bb711..ee6ab6484 100644 --- a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebConfOption.java +++ b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebConfOption.java @@ -21,8 +21,8 @@ */ package org.bitrepository.monitoringservice.webservice; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class WebConfOption { diff --git a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebStatus.java b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebStatus.java index 05ca16a0f..3b6bcf1bf 100644 --- a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebStatus.java +++ b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebStatus.java @@ -24,8 +24,8 @@ import org.bitrepository.common.utils.TimeUtils; import org.bitrepository.monitoringservice.status.ComponentStatus; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import java.time.Instant; @XmlRootElement diff --git a/bitrepository-monitoring-service/src/main/webapp/WEB-INF/web.xml b/bitrepository-monitoring-service/src/main/webapp/WEB-INF/web.xml index 7940ce3f8..e8a45309f 100644 --- a/bitrepository-monitoring-service/src/main/webapp/WEB-INF/web.xml +++ b/bitrepository-monitoring-service/src/main/webapp/WEB-INF/web.xml @@ -34,7 +34,7 @@ Monitoring-service org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet - javax.ws.rs.Application + jakarta.ws.rs.Application org.bitrepository.monitoringservice.webservice.MonitoringServiceRestApplication diff --git a/bitrepository-reference-pillar/pom.xml b/bitrepository-reference-pillar/pom.xml index 33eb0a9e8..3548c4330 100644 --- a/bitrepository-reference-pillar/pom.xml +++ b/bitrepository-reference-pillar/pom.xml @@ -51,9 +51,8 @@ test - org.apache.activemq + org.apache.artemis artemis-server - ${artemis.version} test @@ -107,11 +106,6 @@ io.qameta.allure allure-maven - 2.12.0 - - ${project.basedir}/allure-results - ${project.basedir}/allure-report - org.apache.maven.plugins diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java index 96f093474..289caa9b8 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java @@ -25,6 +25,8 @@ package org.bitrepository.pillar.messagehandler; import java.io.ByteArrayInputStream; + +import jakarta.xml.bind.JAXBException; import org.bitrepository.bitrepositorydata.GetChecksumsResults; import org.bitrepository.bitrepositoryelements.ChecksumDataForChecksumSpecTYPE; import org.bitrepository.bitrepositoryelements.ResponseCode; @@ -49,7 +51,6 @@ import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; -import javax.xml.bind.JAXBException; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; @@ -207,7 +208,8 @@ private ResultingChecksums compileResultsForMessage(ExtractedChecksumResultSet c * @throws SAXException If the results does not validate against the XSD. */ private File makeTemporaryChecksumFile(GetChecksumsRequest request, - ExtractedChecksumResultSet checksumResultSet) throws IOException, JAXBException, SAXException { + ExtractedChecksumResultSet checksumResultSet) throws IOException, + JAXBException, SAXException { // Create the temporary file. File checksumResultFile = File.createTempFile(request.getCorrelationID(), System.currentTimeMillis() + ".cs"); log.debug("Writing the list of checksums to the file '{}'", checksumResultFile); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java index d18d25ebf..0aa7acb5f 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java @@ -26,6 +26,8 @@ package org.bitrepository.pillar.messagehandler; import java.io.ByteArrayInputStream; + +import jakarta.xml.bind.JAXBException; import org.bitrepository.bitrepositorydata.GetFileIDsResults; import org.bitrepository.bitrepositoryelements.FileIDsData; import org.bitrepository.bitrepositoryelements.ResponseCode; @@ -50,7 +52,6 @@ import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; -import javax.xml.bind.JAXBException; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java index ec99596b6..836f8d228 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java @@ -25,17 +25,18 @@ package org.bitrepository.pillar; import org.bitrepository.common.settings.Settings; -import org.bitrepository.pillar.integration.ActiveMQFixedPortContainer; +import org.bitrepository.pillar.integration.ArtemisFixedPortContainer; import org.bitrepository.protocol.IntegrationTest; import org.bitrepository.protocol.activemq.ActiveMQMessageBus; import org.bitrepository.protocol.bus.MessageReceiver; import org.bitrepository.protocol.messagebus.MessageBusManager; import org.bitrepository.settings.repositorysettings.Collection; import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.activemq.ArtemisContainer; import org.testcontainers.containers.InternetProtocol; import org.testcontainers.junit.jupiter.Container; -import javax.jms.JMSException; +import jakarta.jms.JMSException; import java.util.List; public abstract class DefaultFixturePillarIT extends IntegrationTest { @@ -45,7 +46,7 @@ public abstract class DefaultFixturePillarIT extends IntegrationTest { protected MessageReceiver clientReceiver; @Container - static ActiveMQContainer activemq = new ActiveMQFixedPortContainer("apache/activemq:5.17.7") + static ArtemisContainer activemq = new ArtemisFixedPortContainer("apache/artemis:2.55.0") .withFixedExposedPort(9999, 61616, InternetProtocol.TCP); /** @@ -63,7 +64,8 @@ protected void registerMessageReceivers() { super.registerMessageReceivers(); clientDestinationId = settingsForTestClient.getReceiverDestinationID(); - clientReceiver = addReceiver(new MessageReceiver(clientDestinationId)); + clientReceiver = new MessageReceiver(clientDestinationId); + addReceiver(clientReceiver); pillarDestinationId = settingsForCUT.getContributorDestinationID(); } @@ -101,15 +103,6 @@ protected void teardownMessageBus() { } } - - if (broker != null) { - try { - broker.stop(); - broker = null; - } catch (Exception e) { - // No reason to pollute the test output with this - } - } } protected String getPillarID() { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorIT.java index deda84163..c92c4f49c 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorIT.java @@ -105,7 +105,7 @@ protected String getComponentID() { return "MediatorUnderTest"; } - private static class TestMediator extends PillarMediator { + private class TestMediator extends PillarMediator { public TestMediator(MessageHandlerContext context, StorageModel model) { super(messageBus, context, model); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ClientProvider.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ClientProvider.java index 6eef99316..429a4931f 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ClientProvider.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ClientProvider.java @@ -54,8 +54,8 @@ public class ClientProvider { * @param settings The settings to use for the clients. */ public ClientProvider( - org.bitrepository.protocol.security.SecurityManager securityManager, - Settings settings) { + org.bitrepository.protocol.security.SecurityManager securityManager, + Settings settings) { this.securityManager = securityManager; this.settings = settings; @@ -64,11 +64,11 @@ public ClientProvider( public synchronized BlockingPutFileClient getPutClient() { if (putFileClient == null) { putFileClient = new BlockingPutFileClient( - new PutFileClientTestWrapper( - ModifyComponentFactory.getInstance().retrievePutClient( - settings, securityManager, settings.getComponentID() - ) - ) + new PutFileClientTestWrapper( + ModifyComponentFactory.getInstance().retrievePutClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return putFileClient; @@ -77,11 +77,11 @@ public synchronized BlockingPutFileClient getPutClient() { public synchronized BlockingDeleteFileClient getDeleteFileClient() { if (getDeleteFileClient == null) { getDeleteFileClient = new BlockingDeleteFileClient( - new DeleteFileClientTestWrapper( - ModifyComponentFactory.getInstance().retrieveDeleteFileClient( - settings, securityManager, settings.getComponentID() - ) - ) + new DeleteFileClientTestWrapper( + ModifyComponentFactory.getInstance().retrieveDeleteFileClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return getDeleteFileClient; @@ -90,11 +90,11 @@ public synchronized BlockingDeleteFileClient getDeleteFileClient() { public synchronized BlockingGetChecksumsClient getGetChecksumsClient() { if (getChecksumsClient == null) { getChecksumsClient = new BlockingGetChecksumsClient( - new GetChecksumsClientTestWrapper( - AccessComponentFactory.getInstance().createGetChecksumsClient( - settings, securityManager, settings.getComponentID() - ) - ) + new GetChecksumsClientTestWrapper( + AccessComponentFactory.getInstance().createGetChecksumsClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return getChecksumsClient; @@ -103,11 +103,11 @@ public synchronized BlockingGetChecksumsClient getGetChecksumsClient() { public synchronized BlockingGetFileIDsClient getGetFileIDsClient() { if (getFileIDsClient == null) { getFileIDsClient = new BlockingGetFileIDsClient( - new GetFileIDsClientTestWrapper( - AccessComponentFactory.getInstance().createGetFileIDsClient( - settings, securityManager, settings.getComponentID() - ) - ) + new GetFileIDsClientTestWrapper( + AccessComponentFactory.getInstance().createGetFileIDsClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return getFileIDsClient; @@ -117,11 +117,11 @@ public synchronized BlockingGetFileIDsClient getGetFileIDsClient() { public synchronized BlockingAuditTrailClient getAuditTrailsClient() { if (getAuditTrailsClient == null) { getAuditTrailsClient = new BlockingAuditTrailClient( - new AuditTrailClientTestWrapper( - AccessComponentFactory.getInstance().createAuditTrailClient( - settings, securityManager, settings.getComponentID() - ) - ) + new AuditTrailClientTestWrapper( + AccessComponentFactory.getInstance().createAuditTrailClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return getAuditTrailsClient; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java index 036026e45..651ce8891 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java @@ -60,12 +60,14 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.testcontainers.activemq.ActiveMQContainer; +import org.testcontainers.activemq.ArtemisContainer; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.InternetProtocol; import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.postgresql.PostgreSQLContainer; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; @@ -81,6 +83,7 @@ */ @TestInstance(TestInstance.Lifecycle.PER_CLASS) @ExtendWith(SuiteInfoParameterResolver.class) +@Testcontainers(parallel = true, disabledWithoutDocker = true) public abstract class PillarIntegrationIT extends IntegrationTest { /** * The path to the directory containing the integration test configuration files @@ -107,17 +110,17 @@ public abstract class PillarIntegrationIT extends IntegrationTest { private static final Logger log = LoggerFactory.getLogger(PillarIntegrationIT.class); @Container - static ActiveMQContainer activemq = new ActiveMQFixedPortContainer("apache/activemq:5.17.7") + static ArtemisContainer activemq = new ArtemisFixedPortContainer("apache/artemis:2.55.0") .withFixedExposedPort(61616, 61616, InternetProtocol.TCP); @Container - static PostgreSQLContainer auditTrailDB = new PostgresFixedPortContainer("postgres:12-alpine") + static PostgreSQLContainer auditTrailDB = new PostgresFixedPortContainer("postgres:18-alpine") .withFixedExposedPort(65432, 5432, InternetProtocol.TCP) .withDatabaseName("auditcontributerdb") .withUsername("testcontainerUser") .withPassword("testcontainerPassword") .withLabel("purpose","auditcontributerdb"); @Container - static PostgreSQLContainer checksumDB = new PostgresFixedPortContainer("postgres:12-alpine") + static PostgreSQLContainer checksumDB = new PostgresFixedPortContainer("postgres:18-alpine") .withFixedExposedPort(54321, 5432, InternetProtocol.TCP) .withDatabaseName("checksumdb") .withUsername("testcontainerUser") diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryIT.java index 081c0d023..dc793b5cb 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/GetChecksumQueryIT.java @@ -84,7 +84,7 @@ void maxNumberOfResultTest() { singleChecksumQuery, null); Assertions.assertEquals(1, singleChecksumList.size(), "The result didn't contain a single checksum"); - Assertions.assertEquals(originalChecksumList.get(0), singleChecksumList.get(0), + Assertions.assertEquals(originalChecksumList.getFirst(), singleChecksumList.getFirst(), "The returned checksum wasn't equal to " + "the oldest checksum"); } @@ -105,47 +105,47 @@ void minTimeStampTest() { "but the test needs this to be satisfied to make sense)."); List originalChecksumList = pillarFileManager.getChecksums(null, null, null); - Assertions.assertTrue(originalChecksumList.get(0).getCalculationTimestamp().compare( - originalChecksumList.get(originalChecksumList.size() - 1).getCalculationTimestamp()) != 0, + Assertions.assertTrue(originalChecksumList.getFirst().getCalculationTimestamp().compare( + originalChecksumList.getLast().getCalculationTimestamp()) != 0, "The timestamps of the first and last checksum are the same."); addStep("Request checksums with MinTimeStamp set to the timestamp of the oldest checksum", "All checksums should be returned."); - XMLGregorianCalendar oldestTimestamp = originalChecksumList.get(0).getCalculationTimestamp(); + XMLGregorianCalendar oldestTimestamp = originalChecksumList.getFirst().getCalculationTimestamp(); ContributorQuery query = new ContributorQuery(getPillarID(), - oldestTimestamp.toGregorianCalendar().getTime(), null, null); + oldestTimestamp.toGregorianCalendar().toInstant(), null, null); List limitedChecksumList = pillarFileManager.getChecksums(null, query, null); Assertions.assertEquals(originalChecksumList.size(), limitedChecksumList.size(), "Differing size of checksum lists"); - Assertions.assertEquals(originalChecksumList.get(0), limitedChecksumList.get(0), + Assertions.assertEquals(originalChecksumList.getFirst(), limitedChecksumList.getFirst(), "Different first list element when " + "setting oldest minTimestamp"); - Assertions.assertEquals(originalChecksumList.get(originalChecksumList.size() - 1), - limitedChecksumList.get(limitedChecksumList.size() - 1), + Assertions.assertEquals(originalChecksumList.getLast(), + limitedChecksumList.getLast(), "Different last list element when setting " + "oldest minTimestamp"); - Assertions.assertTrue(limitedChecksumList.get(0).getCalculationTimestamp().compare( - limitedChecksumList.get(limitedChecksumList.size() - 1).getCalculationTimestamp()) <= 0, + Assertions.assertTrue(limitedChecksumList.getFirst().getCalculationTimestamp().compare( + limitedChecksumList.getLast().getCalculationTimestamp()) <= 0, "First checksum has newer timestamp than last checksum"); addStep("Request checksums with MinTimeStamp set to the timestamp of the newest checksum", "Only checksum with the timestamp equal to MinTimeStamp are returned."); XMLGregorianCalendar newestTimestamp = - originalChecksumList.get(originalChecksumList.size() - 1).getCalculationTimestamp(); - query = new ContributorQuery(getPillarID(), newestTimestamp.toGregorianCalendar().getTime(), + originalChecksumList.getLast().getCalculationTimestamp(); + query = new ContributorQuery(getPillarID(), newestTimestamp.toGregorianCalendar().toInstant(), null, null); limitedChecksumList = pillarFileManager.getChecksums(null, query, null); Assertions.assertFalse(limitedChecksumList.isEmpty(), "Empty list returned when when minTimestamp is set to newest calculated checksum timestamp"); - Assertions.assertEquals(0, limitedChecksumList.get(0).getCalculationTimestamp().compare(newestTimestamp), + Assertions.assertEquals(0, limitedChecksumList.getFirst().getCalculationTimestamp().compare(newestTimestamp), "Different timestamps in the set of newest checksums." + limitedChecksumList); addStep("Request checksums with MinTimeStamp set to the timestamp of the newest checksum + 10 ms", "No checksums are returned."); GregorianCalendar newerThanNewestTimestamp = newestTimestamp.toGregorianCalendar(); newerThanNewestTimestamp.add(Calendar.MILLISECOND, 10); - query = new ContributorQuery(getPillarID(), newerThanNewestTimestamp.getTime(), null, null); + query = new ContributorQuery(getPillarID(), newerThanNewestTimestamp.toInstant(), null, null); limitedChecksumList = pillarFileManager.getChecksums(null, query, null); Assertions.assertTrue(limitedChecksumList.isEmpty(), "Non-empty checksum list returned with newerThanNewestTimestamp(" + @@ -169,48 +169,47 @@ void maxTimeStampTest() { "but the test needs this to be satisfied to make sense)."); List originalChecksumList = pillarFileManager.getChecksums(null, null, null); - Assertions.assertTrue(originalChecksumList.get(0).getCalculationTimestamp().compare( - originalChecksumList.get(originalChecksumList.size() - 1).getCalculationTimestamp()) != 0, + Assertions.assertTrue(originalChecksumList.getFirst().getCalculationTimestamp().compare( + originalChecksumList.getLast().getCalculationTimestamp()) != 0, "The timestamps of the first and last checksum are the same."); addStep("Request checksums with MaxTimeStamp set to the timestamp of the newest checksum", "All checksums should be returned."); XMLGregorianCalendar newestTimestamp = - originalChecksumList.get(originalChecksumList.size() - 1).getCalculationTimestamp(); + originalChecksumList.getLast().getCalculationTimestamp(); ContributorQuery query = new ContributorQuery(getPillarID(), - null, newestTimestamp.toGregorianCalendar().getTime(), null); + null, newestTimestamp.toGregorianCalendar().toInstant(), null); List limitedChecksumList = pillarFileManager.getChecksums(null, query, null); Assertions.assertEquals(originalChecksumList.size(), limitedChecksumList.size(), "Differing size of checksum lists"); - Assertions.assertEquals(originalChecksumList.get(0), limitedChecksumList.get(0), + Assertions.assertEquals(originalChecksumList.getFirst(), limitedChecksumList.getFirst(), "Different first list element when " + "setting newest maxTimestamp"); - Assertions.assertEquals(originalChecksumList.get(originalChecksumList.size() - 1), - limitedChecksumList.get(limitedChecksumList.size() - 1), + Assertions.assertEquals(originalChecksumList.getLast(), limitedChecksumList.getLast(), "Different last list element when setting " + "newest maxTimestamp"); - Assertions.assertTrue(limitedChecksumList.get(0).getCalculationTimestamp().compare( - limitedChecksumList.get(limitedChecksumList.size() - 1).getCalculationTimestamp()) <= 0, + Assertions.assertTrue(limitedChecksumList.getFirst().getCalculationTimestamp().compare( + limitedChecksumList.getLast().getCalculationTimestamp()) <= 0, "First checksum has newer timestamp than last checksum"); addStep("Request checksums with MaxTimeStamp set to the timestamp of the oldest checksum", "Only checksum with the timestamp equal to MaxTimeStamp are returned."); - XMLGregorianCalendar oldestTimestamp = originalChecksumList.get(0).getCalculationTimestamp(); + XMLGregorianCalendar oldestTimestamp = originalChecksumList.getFirst().getCalculationTimestamp(); query = new ContributorQuery(getPillarID(), - null, oldestTimestamp.toGregorianCalendar().getTime(), null); + null, oldestTimestamp.toGregorianCalendar().toInstant(), null); limitedChecksumList = pillarFileManager.getChecksums(null, query, null); Assertions.assertFalse(limitedChecksumList.isEmpty(), "At least one checksum with the oldest timestamp should be " + "returned."); - Assertions.assertEquals(0, limitedChecksumList.get(0).getCalculationTimestamp().compare(oldestTimestamp), + Assertions.assertEquals(0, limitedChecksumList.getFirst().getCalculationTimestamp().compare(oldestTimestamp), "Different timestamps in the set of oldest checksums." + limitedChecksumList); addStep("Request checksums with MaxTimeStamp set to the timestamp of the oldest checksum - 10 ms", "No checksums are returned."); GregorianCalendar olderThanOldestTimestamp = oldestTimestamp.toGregorianCalendar(); olderThanOldestTimestamp.add(Calendar.MILLISECOND, -10); - query = new ContributorQuery(getPillarID(), null, olderThanOldestTimestamp.getTime(), null); + query = new ContributorQuery(getPillarID(), null, olderThanOldestTimestamp.toInstant(), null); limitedChecksumList = pillarFileManager.getChecksums(null, query, null); Assertions.assertTrue(limitedChecksumList.isEmpty(), "Non-empty checksum list returned with olderThanOldestTimestamp(" + diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java index 509f59912..ecf91c472 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java @@ -152,7 +152,7 @@ void pillarGetFileIDsSpecificFileIDRequest() throws Exception { @Tag(PillarTestGroups.CHECKSUM_PILLAR_TEST) void pillarGetFileIDsTestBadDeliveryURL() throws Exception { addDescription("Test the case when the delivery URL is unaccessible."); - String badURL = "http://localhost:61616/¾"; + String badURL = "http://localhost:54321/¾"; GetFileIDsRequest getFileIDsRequest = msgFactory.createGetFileIDsRequest( FileIDsUtils.getAllFileIDs(), badURL); messageBus.sendMessage(getFileIDsRequest); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java index b7565dfa6..fb54585d3 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java @@ -83,11 +83,11 @@ void maxNumberOfResultTest() { addStep("Repeat the request file ids, this time with maxNumberOfResult set to one", "A file id result with a single file id should be returned. " + "The file id should be the oldest/first file id in the full list."); - ContributorQuery singleFileIDQuery = new ContributorQuery(getPillarID(), (Instant) null, (Instant) null, 1); + ContributorQuery singleFileIDQuery = new ContributorQuery(getPillarID(), null, (Instant) null, 1); List singleFileIDList = pillarFileManager.getFileIDs(singleFileIDQuery); Assertions.assertEquals(1, singleFileIDList.size(), "The result didn't contain a single file id"); - Assertions.assertEquals(originalFileIDsList.get(0), singleFileIDList.get(0), - "The returned file id wasn't equal to the oldest file id"); + Assertions.assertEquals(originalFileIDsList.getFirst(), singleFileIDList.getFirst(), + "The returned file id wasn't equal to the oldest file id"); } @Test @@ -104,15 +104,15 @@ void minTimeStampTest() { List originalFileIDsList = pillarFileManager.getFileIDs(null); Assertions.assertTrue(originalFileIDsList.size() >= 2, "Must initially have at least two file ids, but had: " + originalFileIDsList.size()); - Assertions.assertTrue(originalFileIDsList.get(0).getLastModificationTime().compare( - originalFileIDsList.get(originalFileIDsList.size() - 1).getLastModificationTime()) != 0, + Assertions.assertTrue(originalFileIDsList.getFirst().getLastModificationTime().compare( + originalFileIDsList.getLast().getLastModificationTime()) != 0, "The timestamps of the first and last file id are the same."); addStep("Request file ids with MinTimeStamp set to the timestamp of the oldest file id", "All file ids should be returned."); - XMLGregorianCalendar oldestTimestamp = originalFileIDsList.get(0).getLastModificationTime(); + XMLGregorianCalendar oldestTimestamp = originalFileIDsList.getFirst().getLastModificationTime(); ContributorQuery query = new ContributorQuery(getPillarID(), - oldestTimestamp.toGregorianCalendar().getTime(), null, null); + oldestTimestamp.toGregorianCalendar().toInstant(), null, null); List limitedFileIDsList = pillarFileManager.getFileIDs(query); Assertions.assertEquals(originalFileIDsList, limitedFileIDsList, "Different list return when setting old minTimestamp: " @@ -121,21 +121,21 @@ void minTimeStampTest() { addStep("Request file ids with MinTimeStamp set to the timestamp of the newest file id", "Only file id with the timestamp equal to MinTimeStamp are returned."); XMLGregorianCalendar newestTimestamp = - originalFileIDsList.get(originalFileIDsList.size() - 1).getLastModificationTime(); + originalFileIDsList.getLast().getLastModificationTime(); query = new ContributorQuery(getPillarID(), - newestTimestamp.toGregorianCalendar().getTime(), null, null); + newestTimestamp.toGregorianCalendar().toInstant(), null, null); limitedFileIDsList = pillarFileManager.getFileIDs(query); Assertions.assertFalse(limitedFileIDsList.isEmpty(), "Empty list returned when when minTimestamp is set to newest " + "calculated checksum timestamp"); - Assertions.assertEquals(0, limitedFileIDsList.get(0).getLastModificationTime().compare(newestTimestamp), + Assertions.assertEquals(0, limitedFileIDsList.getFirst().getLastModificationTime().compare(newestTimestamp), "Different timestamps in the set of newest file ids." + limitedFileIDsList); addStep("Request file ids with MinTimeStamp set to the timestamp of the newest file id + 10 ms", "No file ids are returned."); GregorianCalendar newerThanNewestTimestamp = newestTimestamp.toGregorianCalendar(); newerThanNewestTimestamp.add(Calendar.MILLISECOND, 10); - query = new ContributorQuery(getPillarID(), newerThanNewestTimestamp.getTime(), null, null); + query = new ContributorQuery(getPillarID(), newerThanNewestTimestamp.toInstant(), null, null); limitedFileIDsList = pillarFileManager.getFileIDs(query); Assert.assertEmpty(limitedFileIDsList, "Non-empty list returned with olderThanOldestTimestamp(" + CalendarUtils.getXmlGregorianCalendar(newerThanNewestTimestamp) + ") query"); @@ -155,37 +155,37 @@ void maxTimeStampTest() { List originalFileIDsList = pillarFileManager.getFileIDs(null); Assertions.assertTrue(originalFileIDsList.size() >= 2, "Must initially have at least two file ids, but had: " + originalFileIDsList.size()); - Assertions.assertTrue(originalFileIDsList.get(0).getLastModificationTime().compare( - originalFileIDsList.get(originalFileIDsList.size() - 1).getLastModificationTime()) != 0, + Assertions.assertTrue(originalFileIDsList.getFirst().getLastModificationTime().compare( + originalFileIDsList.getLast().getLastModificationTime()) != 0, "The timestamps of the first and last file id are the same."); addStep("Request file ids with MaxTimeStamp set to the timestamp of the newest file id", "All file ids should be returned."); XMLGregorianCalendar newestTimestamp = - originalFileIDsList.get(originalFileIDsList.size() - 1).getLastModificationTime(); + originalFileIDsList.getLast().getLastModificationTime(); ContributorQuery query = new ContributorQuery(getPillarID(), - null, newestTimestamp.toGregorianCalendar().getTime(), null); + null, newestTimestamp.toGregorianCalendar().toInstant(), null); List limitedFileIDsList = pillarFileManager.getFileIDs(query); Assertions.assertEquals(originalFileIDsList, limitedFileIDsList, "Different list return when setting newest maxTimestamp"); addStep("Request file ids with MaxTimeStamp set to the timestamp of the oldest file id", "Only file id with the timestamp equal to MaxTimeStamp are returned."); - XMLGregorianCalendar oldestTimestamp = originalFileIDsList.get(0).getLastModificationTime(); + XMLGregorianCalendar oldestTimestamp = originalFileIDsList.getFirst().getLastModificationTime(); query = new ContributorQuery(getPillarID(), - null, oldestTimestamp.toGregorianCalendar().getTime(), null); + null, oldestTimestamp.toGregorianCalendar().toInstant(), null); limitedFileIDsList = pillarFileManager.getFileIDs(query); Assertions.assertFalse(limitedFileIDsList.isEmpty(), "At least one file id with the oldest timestamp should be " + "returned. The folliwing fileIDs where received: "); - Assertions.assertEquals(0, limitedFileIDsList.get(0).getLastModificationTime().compare(oldestTimestamp), + Assertions.assertEquals(0, limitedFileIDsList.getFirst().getLastModificationTime().compare(oldestTimestamp), "Different timestamps in the set of oldest file ids." + limitedFileIDsList); addStep("Request file ids with MaxTimeStamp set to the timestamp of the oldest file id - 10 ms", "No file ids are returned."); GregorianCalendar olderThanOldestTimestamp = oldestTimestamp.toGregorianCalendar(); olderThanOldestTimestamp.add(Calendar.MILLISECOND, -10); - query = new ContributorQuery(getPillarID(), null, olderThanOldestTimestamp.getTime(), null); + query = new ContributorQuery(getPillarID(), null, olderThanOldestTimestamp.toInstant(), null); limitedFileIDsList = pillarFileManager.getFileIDs(query); Assert.assertEmpty(limitedFileIDsList, "Non-empty list returned with olderThanOldestTimestamp(" + CalendarUtils.getXmlGregorianCalendar(olderThanOldestTimestamp) + ") query"); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java index 10db1578b..3aad7a8d5 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java @@ -80,16 +80,8 @@ void goodCaseIdentification() throws Exception { addStep("Setup for having the file and delivering pillar id", "Should return true, when requesting file-id existence."); - Mockito.doAnswer(new Answer() { - public Boolean answer(InvocationOnMock invocation) { - return true; - } - }).when(model).hasFileID(eq(FILE_ID), anyString()); - Mockito.doAnswer(new Answer() { - public String answer(InvocationOnMock invocation) { - return settingsForCUT.getComponentID(); - } - }).when(model).getPillarID(); + Mockito.doAnswer(invocation -> true).when(model).hasFileID(eq(FILE_ID), anyString()); + Mockito.doAnswer(invocation -> settingsForCUT.getComponentID()).when(model).getPillarID(); addStep("Create and send the identify request message.", "Should be received and handled by the pillar."); @@ -122,16 +114,8 @@ void badCaseIdentification() throws Exception { addStep("Setup for delivering pillar id and not having the file ", "Returns false, when requesting file-id existence."); - Mockito.doAnswer(new Answer() { - public Boolean answer(InvocationOnMock invocation) { - return false; - } - }).when(model).hasFileID(eq(FILE_ID), anyString()); - Mockito.doAnswer(new Answer() { - public String answer(InvocationOnMock invocation) { - return settingsForCUT.getComponentID(); - } - }).when(model).getPillarID(); + Mockito.doAnswer(invocation -> false).when(model).hasFileID(eq(FILE_ID), anyString()); + Mockito.doAnswer(invocation -> settingsForCUT.getComponentID()).when(model).getPillarID(); addStep("Create and send the identify request message.", "Should be received and handled by the pillar."); @@ -164,16 +148,8 @@ void badCaseOperationNoFile() throws Exception { addStep("Setup for delivering pillar id and not having the file ", "Returns false, when requesting file-id existence."); - Mockito.doAnswer(new Answer() { - public Boolean answer(InvocationOnMock invocation) { - return false; - } - }).when(model).hasFileID(eq(FILE_ID), anyString()); - Mockito.doAnswer(new Answer() { - public String answer(InvocationOnMock invocation) { - return settingsForCUT.getComponentID(); - } - }).when(model).getPillarID(); + Mockito.doAnswer(invocation -> false).when(model).hasFileID(eq(FILE_ID), anyString()); + Mockito.doAnswer(invocation -> settingsForCUT.getComponentID()).when(model).getPillarID(); addStep("Create and send the actual DeleteFile message to the pillar.", "Should be received and handled by the pillar."); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java index 76e77d7c5..86e2462ee 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java @@ -52,7 +52,7 @@ void setUpFactory() throws DatatypeConfigurationException { @Tag("pillartest") void testWorkflowRecalculatesChecksum() throws Exception { addDescription("Test that the workflow recalculates the workflows, when the maximum age has been met."); - Date beforeWorkflowDate = csCache.getCalculationDate(defaultFileId, collectionID); + var beforeWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); Assertions.assertEquals(1, csCache.getAllFileIDs(collectionID).size()); Assertions.assertEquals(1, archives.getAllFileIds(collectionID).size()); settingsForCUT.getReferenceSettings().getPillarSettings().setMaxAgeForChecksums(factory.newDuration(0)); @@ -64,10 +64,10 @@ void testWorkflowRecalculatesChecksum() throws Exception { addStep("Create and run workflow", "The checksum"); SchedulableJob workflow = new RecalculateChecksumJob(collectionID, model); workflow.start(); - Date afterWorkflowDate = csCache.getCalculationDate(defaultFileId, collectionID); + var afterWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); - Assertions.assertTrue(beforeWorkflowDate.getTime() < afterWorkflowDate.getTime(), - beforeWorkflowDate.getTime() + " < " + afterWorkflowDate.getTime()); + Assertions.assertTrue(beforeWorkflowDate.toEpochMilli() < afterWorkflowDate.toEpochMilli(), + beforeWorkflowDate.toEpochMilli() + " < " + afterWorkflowDate.toEpochMilli()); } @Test @@ -76,7 +76,7 @@ void testWorkflowRecalculatesChecksum() throws Exception { void testWorkflowDoesNotRecalculateWhenNotNeeded() throws Exception { addDescription("Test that the workflow does not recalculates the workflows, when the maximum age has " + "not yet been met."); - Date beforeWorkflowDate = csCache.getCalculationDate(defaultFileId, collectionID); + var beforeWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); Assertions.assertEquals(1, csCache.getAllFileIDs(collectionID).size()); Assertions.assertEquals(1, archives.getAllFileIds(collectionID).size()); settingsForCUT.getReferenceSettings().getPillarSettings() @@ -89,9 +89,9 @@ void testWorkflowDoesNotRecalculateWhenNotNeeded() throws Exception { addStep("Create and run workflow", "The checksum"); SchedulableJob workflow = new RecalculateChecksumJob(collectionID, model); workflow.start(); - Date afterWorkflowDate = csCache.getCalculationDate(defaultFileId, collectionID); + var afterWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); - Assertions.assertEquals(afterWorkflowDate.getTime(), beforeWorkflowDate.getTime(), - beforeWorkflowDate.getTime() + " == " + afterWorkflowDate.getTime()); + Assertions.assertEquals(afterWorkflowDate.toEpochMilli(), beforeWorkflowDate.toEpochMilli(), + beforeWorkflowDate.toEpochMilli() + " == " + afterWorkflowDate.toEpochMilli()); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java index 7a56d7026..a1ec1645b 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java @@ -63,7 +63,7 @@ class ChecksumDatabaseTest { private static final Instant DEFAULT_DATE = Instant.ofEpochMilli(System.currentTimeMillis()); @Container - static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:12-alpine") + static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:18-alpine") .withClasspathResourceMapping( "sql/postgres/checksumDBCreation.sql", "/docker-entrypoint-initdb.d/init.sql", diff --git a/bitrepository-reference-pillar/src/test/resources/conf/RepositorySettings.xml b/bitrepository-reference-pillar/src/test/resources/conf/RepositorySettings.xml index f858da3e3..e429d2bde 100644 --- a/bitrepository-reference-pillar/src/test/resources/conf/RepositorySettings.xml +++ b/bitrepository-reference-pillar/src/test/resources/conf/RepositorySettings.xml @@ -59,6 +59,8 @@ PillarIntegrationTestMessageBus tcp://localhost:61616 + artemis + artemis diff --git a/bitrepository-reference-settings/pom.xml b/bitrepository-reference-settings/pom.xml index 8fbb4e5e9..3f2cb3dbc 100644 --- a/bitrepository-reference-settings/pom.xml +++ b/bitrepository-reference-settings/pom.xml @@ -1,102 +1,96 @@ - - 4.0.0 - - org.bitrepository.reference - bitrepository-parent - 1.12-SNAPSHOT - - bitrepository-reference-settings - Bitrepository Reference Settings - Settings functionality for the reference code. + + 4.0.0 + + org.bitrepository.reference + bitrepository-parent + 1.12-SNAPSHOT + + bitrepository-reference-settings + Bitrepository Reference Settings + Settings functionality for the reference code. - - target/generated-sources/jaxb - - - src/main/resources - true - - - ${project.build.directory}/xsd - - *.xsd - *.xml - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.15.0 - - 21 - - - - maven-resources-plugin - - - copy-resources - generate-sources - - copy-resources - - - ${project.build.directory}/xsd - - - src/main/resources/xsd - true - - - - - - - - - org.codehaus.mojo - jaxb2-maven-plugin - 2.5.0 - - - generate-classes-from-xsds - - xjc - - - - - - ${project.build.directory}/xsd/ReferenceSettings.xsd - - - ${project.build.directory}/xsd/bindings-reference-settings.xjb - - true - - -XtoString - -Xequals - -XhashCode - -Xannotate - - - - - org.jvnet.jaxb2_commons - jaxb2-basics - 0.11.1 - - - org.jvnet.jaxb2_commons - jaxb2-basics-annotate - 1.1.0 - - - - - + + + org.jvnet.jaxb + jaxb-plugins-runtime + + + + + target/generated-sources/jaxb + + + src/main/resources + true + + + ${project.build.directory}/xsd + + *.xsd + *.xml + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 21 + + + + maven-resources-plugin + + + copy-resources + generate-sources + + copy-resources + + + ${project.build.directory}/xsd + + + src/main/resources/xsd + true + + + + + + + + org.jvnet.jaxb + jaxb-maven-plugin + ${jaxb.version} + + + generate-classes-from-xsds + + generate + + + + + ${project.basedir}/src/main/resources/xsd/ + true + + -XtoString + -XsimpleEquals + -XsimpleHashCode + + + + org.jvnet.jaxb + jaxb-plugins + ${jaxb.version} + + + + + + diff --git a/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb b/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb index 558fd1450..a511fbdf3 100644 --- a/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb +++ b/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb @@ -1,7 +1,5 @@ - + - diff --git a/bitrepository-service/pom.xml b/bitrepository-service/pom.xml index afe6079b0..d9a227ea9 100644 --- a/bitrepository-service/pom.xml +++ b/bitrepository-service/pom.xml @@ -19,37 +19,30 @@ org.apache.derby derby - ${derby.version} org.apache.derby derbyclient - ${derby.version} org.apache.derby derbynet - ${derby.version} org.apache.derby derbytools - ${derby.version} org.postgresql postgresql - 42.7.8 com.mchange c3p0 - 0.12.0 - javax.servlet - javax.servlet-api - ${javax.servlet.version} + jakarta.servlet + jakarta.servlet-api provided diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/AbstractBitrepositoryContextListener.java b/bitrepository-service/src/main/java/org/bitrepository/service/AbstractBitrepositoryContextListener.java index fb21623b8..89dc7526a 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/AbstractBitrepositoryContextListener.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/AbstractBitrepositoryContextListener.java @@ -25,8 +25,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; /** * The Listener has two intentions diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java index 7ca6f7c45..8a7d21aa9 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java @@ -22,6 +22,8 @@ package org.bitrepository.service.contributor.handler; import java.io.ByteArrayInputStream; + +import jakarta.xml.bind.JAXBException; import org.bitrepository.bitrepositorydata.GetAuditTrailsResults; import org.bitrepository.bitrepositoryelements.ResponseCode; import org.bitrepository.bitrepositoryelements.ResponseInfo; @@ -45,7 +47,6 @@ import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; -import javax.xml.bind.JAXBException; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/workflow/WorkflowState.java b/bitrepository-service/src/main/java/org/bitrepository/service/workflow/WorkflowState.java index aa9631954..818c17b01 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/workflow/WorkflowState.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/workflow/WorkflowState.java @@ -24,7 +24,8 @@ */ package org.bitrepository.service.workflow; -import javax.xml.bind.annotation.XmlRootElement; + +import jakarta.xml.bind.annotation.XmlRootElement; /** * States for a workflow. diff --git a/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java b/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java index 630f6a1f9..9c3ca82b4 100644 --- a/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java +++ b/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java @@ -65,7 +65,7 @@ class AuditTrailContributorDatabaseTest { @Container static PostgreSQLContainer postgreSQLContainer = - new PostgreSQLContainer("postgres:12-alpine") + new PostgreSQLContainer("postgres:18-alpine") .withClasspathResourceMapping("sql/postgres/auditContributorDBCreation.sql", "/docker-entrypoint-initdb.d/init.sql", BindMode.READ_ONLY); diff --git a/bitrepository-webclient/pom.xml b/bitrepository-webclient/pom.xml index 940f4bcc1..afeaaea9d 100644 --- a/bitrepository-webclient/pom.xml +++ b/bitrepository-webclient/pom.xml @@ -11,42 +11,31 @@ Bitrepository Webclient + - javax - javaee-web-api - ${javaee.web.version} - provided - - - javax.servlet - javax.servlet-api - ${javax.servlet.version} + jakarta.servlet + jakarta.servlet-api provided org.apache.cxf cxf-rt-transports-http - ${cxf.version} org.apache.cxf cxf-rt-rs-client - ${cxf.version} com.fasterxml.jackson.core jackson-databind - ${jackson.version} - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - ${jackson.version} + com.fasterxml.jackson.jakarta.rs + jackson-jakarta-rs-json-provider jakarta.ws.rs jakarta.ws.rs-api - ${jakarta.ws.rs.version} org.bitrepository.reference @@ -60,11 +49,6 @@ io.qameta.allure allure-maven - 2.12.0 - - ${project.basedir}/allure-results - ${project.basedir}/allure-report - maven-war-plugin diff --git a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/Reposervice.java b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/Reposervice.java index c7ecf31de..b26cf904e 100644 --- a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/Reposervice.java +++ b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/Reposervice.java @@ -29,11 +29,11 @@ import org.bitrepository.settings.repositorysettings.Collection; import org.bitrepository.settings.repositorysettings.ProtocolSettings; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; import java.io.IOException; import java.io.StringWriter; import java.util.List; diff --git a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ReposerviceRestApplication.java b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ReposerviceRestApplication.java index 9e35cfee2..189521984 100644 --- a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ReposerviceRestApplication.java +++ b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ReposerviceRestApplication.java @@ -1,8 +1,8 @@ package org.bitrepository.webservice; -import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; -import javax.ws.rs.core.Application; +import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; +import jakarta.ws.rs.core.Application; import java.util.Arrays; import java.util.HashSet; import java.util.Set; diff --git a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ServiceUrl.java b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ServiceUrl.java index 246d7ca5c..a1a073d22 100644 --- a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ServiceUrl.java +++ b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ServiceUrl.java @@ -24,10 +24,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; diff --git a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebCollection.java b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebCollection.java index a43b26b3d..7ce1b3f4f 100644 --- a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebCollection.java +++ b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebCollection.java @@ -21,8 +21,8 @@ */ package org.bitrepository.webservice; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement public class WebCollection { diff --git a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebclientContextListener.java b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebclientContextListener.java index 6ac633478..1e9208630 100644 --- a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebclientContextListener.java +++ b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebclientContextListener.java @@ -5,49 +5,48 @@ * Copyright (C) 2010 - 2012 The State and University Library, The Royal Library and The State Archives, Denmark * %% * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 2.1 of the + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 2.1 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public + * + * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * . * #L% */ package org.bitrepository.webservice; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.bitrepository.BasicClient; import org.bitrepository.BasicClientFactory; import org.bitrepository.utils.LogbackConfigLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - /** * The Listener has two intentions - * 1) Acquire necessary information at startup to locate configuration files and create the first instance - * of the basic client, so everything is setup before the first users start using the webservice. - * 2) In time shut the service down in a proper manner, so no threads will be orphaned. + * 1) Acquire necessary information at startup to locate configuration files and create the first instance + * of the basic client, so everything is setup before the first users start using the webservice. + * 2) In time shut the service down in a proper manner, so no threads will be orphaned. */ public class WebclientContextListener implements ServletContextListener { private final Logger log = LoggerFactory.getLogger(getClass()); /** - * Do initialization work + * Do initialization work */ @SuppressWarnings("unused") @Override public void contextInitialized(ServletContextEvent sce) { String confDir = sce.getServletContext().getInitParameter("configurationDir"); - if(confDir == null) { + if (confDir == null) { throw new RuntimeException("No configuration directory specified!"); } log.debug("Configuration dir = {}", confDir); @@ -55,20 +54,20 @@ public void contextInitialized(ServletContextEvent sce) { new LogbackConfigLoader(confDir + "/logback.xml"); } catch (Exception e) { log.info("Failed to read log configuration file. Falling back to default."); - } + } BasicClientFactory.init(confDir); BasicClient client = BasicClientFactory.getInstance(); log.debug("Servlet context initialized"); } /** - * Does work of shutting the webclient down in a graceful manner. - * This is done by calling BasicClient's shutdown method. + * Does work of shutting the webclient down in a graceful manner. + * This is done by calling BasicClient's shutdown method. */ @Override public void contextDestroyed(ServletContextEvent sce) { BasicClient client = BasicClientFactory.getInstance(); - client.shutdown(); + client.shutdown(); log.debug("Servlet context destroyed"); } } diff --git a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebserviceIllegalArgumentException.java b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebserviceIllegalArgumentException.java index 9e842fc03..371afe60a 100644 --- a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebserviceIllegalArgumentException.java +++ b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebserviceIllegalArgumentException.java @@ -21,9 +21,9 @@ */ package org.bitrepository.webservice; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; @SuppressWarnings("serial") public class WebserviceIllegalArgumentException extends WebApplicationException { diff --git a/bitrepository-webclient/src/main/webapp/WEB-INF/web.xml b/bitrepository-webclient/src/main/webapp/WEB-INF/web.xml index 3954fafe6..6ed8567a4 100644 --- a/bitrepository-webclient/src/main/webapp/WEB-INF/web.xml +++ b/bitrepository-webclient/src/main/webapp/WEB-INF/web.xml @@ -33,7 +33,7 @@ Bitrepository-webclient org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet - javax.ws.rs.Application + jakarta.ws.rs.Application org.bitrepository.webservice.ReposerviceRestApplication diff --git a/pom.xml b/pom.xml index 6de914734..fc54e89e4 100644 --- a/pom.xml +++ b/pom.xml @@ -1,661 +1,804 @@ - 4.0.0 - org.bitrepository.reference - bitrepository-parent - 1.12-SNAPSHOT - - - org.sbforge - sbforge-parent - 22 - - - Bitrepository - - pom - - - bitrepository-reference-settings - bitrepository-core - bitrepository-client - bitrepository-service - bitrepository-integrity-service - bitrepository-alarm-service - bitrepository-audit-trail-service - bitrepository-reference-pillar - bitrepository-monitoring-service - bitrepository-integration - bitrepository-webclient - - - - - sbforge-nexus - https://sbforge.org/nexus/content/groups/public - - true - - - true - - - - - - - Mikis Seth Sørensen - mss - - Former Employee - - - - Kim Agerbo Christensen - ktc - - Former Employee - - - - Jonas Lindberg Frellesen - jolf - - Former Employee - - - - Asger Askov Blekinge - asga@kb.dk - The Danish Royal Library - https://www.kb.dk/en - - Developer - - - - Rasmus Bohl Kristensen - rbkr@kb.dk - The Danish Royal Library - https://www.kb.dk/en - - Developer - - - - Mathias Søby Jensen - masj@kb.dk - The Danish Royal Library - https://www.kb.dk/en - - Developer - - - - - 2010 - - - - LGPL v2.1 - repo - http://www.gnu.org/licenses/lgpl-2.1.txt - - - - - JIRA - https://sbforge.org/jira/browse/BITMAG - - - - Jenkins - https://sbforge.org/jenkins/ - - - The Bit Repository system enables long-term preservation of data in a distributed, highly redundant - architecture. The data integrity is ensured by using multiple, independently developed data storage systems - (Pillars) - across different organizations, together with functionality for maintaining the integrity of the data over - time. - + 4.0.0 + org.bitrepository.reference + bitrepository-parent + 1.12-SNAPSHOT + + + org.sbforge + sbforge-parent + 22 + + + Bitrepository + + pom + + + bitrepository-reference-settings + bitrepository-core + bitrepository-client + bitrepository-service + bitrepository-integrity-service + bitrepository-alarm-service + bitrepository-audit-trail-service + bitrepository-reference-pillar + bitrepository-monitoring-service + bitrepository-integration + bitrepository-webclient + + + + + sbforge-nexus + https://sbforge.org/nexus/content/groups/public + + true + + + true + + + + + + + Mikis Seth Sørensen + mss + + Former Employee + + + + Kim Agerbo Christensen + ktc + + Former Employee + + + + Jonas Lindberg Frellesen + jolf + + Former Employee + + + + Asger Askov Blekinge + asga@kb.dk + The Danish Royal Library + https://www.kb.dk/en + + Developer + + + + Rasmus Bohl Kristensen + rbkr@kb.dk + The Danish Royal Library + https://www.kb.dk/en + + Developer + + + + Mathias Søby Jensen + masj@kb.dk + The Danish Royal Library + https://www.kb.dk/en + + Developer + + + + + 2010 + + + + LGPL v2.1 + repo + http://www.gnu.org/licenses/lgpl-2.1.txt + + + + + JIRA + https://sbforge.org/jira/browse/BITMAG + + + + Jenkins + https://sbforge.org/jenkins/ + + + The Bit Repository system enables long-term preservation of data in a distributed, highly redundant + architecture. The data integrity is ensured by using multiple, independently developed data storage systems + (Pillars) + across different organizations, together with functionality for maintaining the integrity of the data over + time. + + https://sbforge.org/display/BITMAG + + + The State and University Library, The Royal Library and The State Archives, Denmark https://sbforge.org/display/BITMAG + + + + https://sbforge.org/fisheye/browse/bitrepository-reference + scm:git:git@github.com:bitrepository/reference.git + scm:git:git@github.com:bitrepository/reference.git + HEAD + - - The State and University Library, The Royal Library and The State Archives, Denmark - https://sbforge.org/display/BITMAG - - - - https://sbforge.org/fisheye/browse/bitrepository-reference - scm:git:git@github.com:bitrepository/reference.git - scm:git:git@github.com:bitrepository/reference.git - HEAD - - - - - - io.qameta.allure - allure-bom - 2.32.0 - pom - import - - - org.slf4j - slf4j-api - 2.0.17 - - - org.mockito - mockito-bom - 5.23.0 - pom - import - - - org.junit - junit-bom - 5.14.3 - pom - import - - - org.testcontainers - testcontainers-bom - 2.0.5 - pom - import - - - org.apache.cxf - cxf-bom - 3.6.7 - pom - import - - - - com.fasterxml.jackson - jackson-bom - ${jackson.version} - pom - import - - - + - - org.slf4j - slf4j-api - ${slf4j.version} - - - ch.qos.logback - logback-classic - 1.5.32 - - - - ch.qos.logback - logback-core - 1.5.32 - - - - - org.jvnet.jaxb2_commons - jaxb2-basics-runtime - 0.11.1 - - - - - jakarta.xml.bind - jakarta.xml.bind-api - 2.3.3 - - - - jakarta.activation - jakarta.activation-api - 1.2.2 - - - - org.glassfish.jaxb - jaxb-runtime - 2.3.6 - runtime - - - org.junit.jupiter - junit-jupiter - test - - - org.junit.platform - junit-platform-suite-engine - test - - - org.mockito - mockito-core - test - - - - org.slf4j - jul-to-slf4j - ${slf4j.version} - - - org.slf4j - log4j-over-slf4j - ${slf4j.version} - - - org.slf4j - jcl-over-slf4j - ${slf4j.version} - - - - io.qameta.allure - allure-junit5 - test - - - org.aspectj - aspectjweaver - ${aspectj.version} - + + + + jakarta.platform + jakarta.jakartaee-bom + 11.0.0 + pom + import + + + org.apache.cxf + cxf-bom + 4.2.0 + pom + import + + + com.fasterxml.jackson + jackson-bom + 2.21.4 + pom + import + + + org.bouncycastle + bc-jdk18on-bom + 1.84 + pom + import + + + org.apache.httpcomponents + httpclient + 4.5.14 + + + jakarta.xml.bind + jakarta.xml.bind-api + 4.0.5 + + + org.glassfish.jaxb + jaxb-runtime + 4.0.9 + + + + + org.apache.artemis + artemis-bom + 2.55.0 + pom + import + + + org.apache.activemq + activemq-bom + 6.2.7 + pom + import + + + org.apache.activemq + activemq-broker + 6.2.7 + + + + + org.slf4j + slf4j-bom + 2.0.18 + pom + import + + + ch.qos.logback + logback-classic + 1.5.32 + + + ch.qos.logback + logback-core + 1.5.32 + + + + + io.qameta.allure + allure-bom + 2.32.0 + pom + import + + + org.testcontainers + testcontainers-bom + 2.0.5 + pom + import + + + org.mockito + mockito-bom + 5.23.0 + pom + import + + + org.junit + junit-bom + 5.14.4 + pom + import + + + org.eclipse.jetty + jetty-server + 12.1.8 + + + org.hamcrest + hamcrest-core + 3.0 + + + + + + + + commons-io + commons-io + 2.21.0 + + + commons-codec + commons-codec + 1.21.0 + + + commons-cli + commons-cli + 1.4 + + + org.jetbrains + annotations + 23.0.0 + compile + + + org.jvnet.jaxb + jaxb-plugins-runtime + ${jaxb.version} + + + javax.mail + javax.mail-api + 1.6.2 + + + org.aspectj + aspectjweaver + 1.9.25.1 + + + + + com.mchange + c3p0 + 0.12.0 + + + org.postgresql + postgresql + 42.7.8 + + + org.apache.derby + derby + 10.17.1.0 + + + org.apache.derby + derbyclient + 10.17.1.0 + + + org.apache.derby + derbynet + 10.17.1.0 + + + org.apache.derby + derbytools + 10.17.1.0 + + + + + org.bitrepository.message-xml + message-xml-xsd + ${message.xml.version} + + + org.bitrepository.message-xml + message-xml-java + ${message.xml.version} + + + org.bitrepository.repository-settings + repository-settings-xsd + ${repository.settings.version} + + + org.bitrepository.repository-settings + repository-settings-java + ${repository.settings.version} + + + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + ch.qos.logback + logback-core + + + jakarta.xml.bind + jakarta.xml.bind-api + + + jakarta.activation + jakarta.activation-api + + + org.glassfish.jaxb + jaxb-runtime + runtime + + + + org.aspectj + aspectjweaver + + + + org.junit.jupiter + junit-jupiter + test + + + org.junit.platform + junit-platform-suite-engine + test + + + org.mockito + mockito-core + test + + + + org.slf4j + jul-to-slf4j + + + org.slf4j + log4j-over-slf4j + + + org.slf4j + jcl-over-slf4j + + + + io.qameta.allure + allure-junit5 + test + - + + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.0.0-M3 + + + enforce-maven + + enforce + + + + + 2.2.1 + + + + + + + + org.codehaus.mojo + license-maven-plugin + + true + true + true + lgpl_v2_1 + true + false + + **/*.java + **/*.xsd + **/*.sql + + + xml + + + + + + maven-surefire-plugin + + regressiontest + random + + + + org.apache.maven.plugins + maven-failsafe-plugin + true + + + maven-release-plugin + + + true + + + + maven-war-plugin + + + + WEB-INF/lib/commons-logging-*.jar, + %regex[WEB-INF/lib/log4j-(?!over-slf4j).*.jar] + + false + + + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + + prepare-agent + + + + report + test + + report + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + + properties + + + + + + de.thetaphi + forbiddenapis + 3.8 + + ${maven.compiler.release} + false + + jdk-unsafe + jdk-deprecated + jdk-non-portable + jdk-reflection + + + + + ${api.check.phase} + + check + testCheck + + + + + + + + + io.qameta.allure + allure-maven + 2.17.0 + + 2.20.1 + ${project.basedir}/target/site/allure-maven-plugin + ${project.basedir}/target/allure-results + + + + org.codehaus.mojo + license-maven-plugin + 2.0.0 + + + maven-compiler-plugin + 3.15.0 + + + maven-source-plugin + 3.2.1 + + + maven-javadoc-plugin + 3.2.0 + + + maven-release-plugin + 3.0.0-M1 + + + maven-jar-plugin + 3.5.0 + + + + true + true + + + value + + + true + + + + + test-jar + + + prepare-package + + + false + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.4 + + + ${project.basedir}/../target/allure-results + + + + @{argLine} -javaagent:${org.aspectj:aspectjweaver:jar} + + + + maven-failsafe-plugin + 3.5.5 + + + + integration-test + verify + + + + + + maven-war-plugin + 3.3.0 + + + maven-assembly-plugin + 3.3.0 + + + maven-resources-plugin + 3.1.0 + + + maven-remote-resources-plugin + 1.7.0 + + + maven-clean-plugin + 3.1.0 + + + maven-install-plugin + 3.0.0-M1 + + + maven-deploy-plugin + 3.0.0-M1 + + + maven-dependency-plugin + 3.1.2 + + + org.codehaus.mojo + jaxb2-maven-plugin + 2.5.0 + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + + org.codehaus.mojo + exec-maven-plugin + 3.0.0 + + + de.thetaphi + forbiddenapis + 3.8 + + + + + + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 3.9.0 + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.6.0 + + sonarCheckstyle.xml + + + + com.github.spotbugs + spotbugs-maven-plugin + 4.9.8.3 + + false + + + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + + org.apache.maven.plugins + maven-pmd-plugin + 3.26.0 + + + + + + + deploy + - - io.qameta.allure - allure-maven - ${allure.version} - - 2.20.1 - ${project.basedir}/target/site/allure-maven-plugin - ${project.basedir}/target/allure-results - - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.0.0-M3 - - - enforce-maven - - enforce - - - - - 2.2.1 - - - - - - - - org.codehaus.mojo - license-maven-plugin - - true - true - true - lgpl_v2_1 - true - false - - **/*.java - **/*.xsd - **/*.sql - - - xml - - - - - - maven-surefire-plugin - - regressiontest - random - - - - org.apache.maven.plugins - maven-failsafe-plugin - true - - - maven-release-plugin - - - true - - - - maven-war-plugin - - - - WEB-INF/lib/commons-logging-*.jar, - %regex[WEB-INF/lib/log4j-(?!over-slf4j).*.jar] - - false - - - - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - - prepare-agent - - - - report - test - - report - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - - properties - - - - - - de.thetaphi - forbiddenapis - 3.8 - - ${maven.compiler.release} - false - - jdk-unsafe - jdk-deprecated - jdk-non-portable - jdk-reflection - - - - - ${api.check.phase} - - check - testCheck - - - - + + maven-source-plugin + + + attach-sources + + jar + + + + + + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + - - - - org.codehaus.mojo - license-maven-plugin - 2.0.0 - - - maven-compiler-plugin - 3.15.0 - - - maven-source-plugin - 3.2.1 - - - maven-javadoc-plugin - 3.2.0 - - - maven-release-plugin - 3.0.0-M1 - - - maven-jar-plugin - 3.5.0 - - - - true - true - - - value - - - true - - - - - test-jar - - - prepare-package - - - false - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 3.5.4 - - - ${project.basedir}/../target/allure-results - - - - @{argLine} -javaagent:${org.aspectj:aspectjweaver:jar} - - - - maven-failsafe-plugin - 3.5.5 - - - - integration-test - verify - - - - - - maven-war-plugin - 3.3.0 - - - maven-assembly-plugin - 3.3.0 - - - maven-resources-plugin - 3.1.0 - - - maven-remote-resources-plugin - 1.7.0 - - - maven-clean-plugin - 3.1.0 - - - maven-install-plugin - 3.0.0-M1 - - - maven-deploy-plugin - 3.0.0-M1 - - - maven-dependency-plugin - 3.1.2 - - - org.codehaus.mojo - jaxb2-maven-plugin - 2.5.0 - - - org.apache.tomcat.maven - tomcat7-maven-plugin - 2.2 - - - org.codehaus.mojo - exec-maven-plugin - 3.0.0 - - - de.thetaphi - forbiddenapis - 3.8 - - - - - - +
    + + + skip-unit-tests + - - org.apache.maven.plugins - maven-project-info-reports-plugin - 3.9.0 - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.6.0 - - sonarCheckstyle.xml - - - - com.github.spotbugs - spotbugs-maven-plugin - 4.0.0 - - false - - - - org.jacoco - jacoco-maven-plugin - 0.8.12 - - - org.apache.maven.plugins - maven-pmd-plugin - 3.26.0 - + + org.apache.maven.plugins + maven-surefire-plugin + + true + + - - - - - deploy - - - - maven-source-plugin - - - attach-sources - - jar - - - - - - maven-javadoc-plugin - - - attach-javadocs - - jar - - - - - - - - - skip-unit-tests - - - - org.apache.maven.plugins - maven-surefire-plugin - - true - - - - - - - - - - 21 - process-classes - 31 - 14 - 10.17.1.0 - 6.2.4 - 2.54.0 - 4.2.0 - 2.21.2 - 2.1.6 - 8.0.1 - 4.0.1 - 2.0.17 - dav:https://sbforge.org/maven/bitrepository/sites/reference/${project.version} - - UTF-8 - 1.9.22.1 - 2.17.0 - + + + + + + + 21 + process-classes + + 33-SNAPSHOT + 15-SNAPSHOT + 4.0.12 + dav:https://sbforge.org/maven/bitrepository/sites/reference/${project.version} + + UTF-8 + From a7bbb183371435e7278edf80708ec51c5ca758ba Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Wed, 15 Jul 2026 11:12:27 +0200 Subject: [PATCH 14/22] cleaned up warnings --- .../collector/IncrementalCollectorTest.java | 2 +- .../ChecksumsCompletePillarEvent.java | 2 +- .../getfile/conversation/GettingFile.java | 2 +- .../FileIDsCompletePillarEvent.java | 2 +- .../StatusCompleteContributorEvent.java | 2 +- .../ConversationEventMonitor.java | 13 ++-- .../CollectionBasedConversationMediator.java | 2 +- .../eventhandler/AbstractOperationEvent.java | 37 +++++------ .../client/eventhandler/CompleteEvent.java | 4 +- .../ContributorCompleteEvent.java | 7 +- .../client/eventhandler/ContributorEvent.java | 15 ++++- .../eventhandler/ContributorFailedEvent.java | 14 +++- .../client/eventhandler/DefaultEvent.java | 10 ++- .../IdentificationCompleteEvent.java | 4 +- .../eventhandler/OperationFailedEvent.java | 17 +++-- .../commandline/CommandLineClient.java | 2 +- .../commandline/DeleteFileCmd.java | 2 +- .../commandline/GetChecksumsCmd.java | 2 +- .../bitrepository/commandline/GetFileCmd.java | 2 +- .../commandline/GetFileIDsCmd.java | 2 +- .../bitrepository/commandline/PutFileCmd.java | 2 +- .../commandline/ReplaceFileCmd.java | 3 +- .../DeleteFileCompletePillarEvent.java | 2 +- .../IdentifyPillarsForPutFile.java | 4 +- .../PutFileCompletePillarEvent.java | 6 +- .../putfile/conversation/PuttingFile.java | 8 ++- .../ReplaceFileCompletePillarEvent.java | 2 +- bitrepository-integrity-service/pom.xml | 7 ++ .../RepairMissingFilesWorkflowTest.java | 4 +- .../workflow/SaltedChecksumWorkflowTest.java | 12 ++-- .../step/GetChecksumForFileStepTest.java | 2 +- .../workflow/step/GetFileStepTest.java | 2 +- .../workflow/step/PutFileStepTest.java | 2 +- .../step/UpdateChecksumsStepTest.java | 6 +- .../workflow/step/UpdateFileIDsStepTest.java | 6 +- .../collector/StatusEventHandlerTest.java | 5 +- pom.xml | 65 ++++++++----------- 37 files changed, 154 insertions(+), 127 deletions(-) diff --git a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/collector/IncrementalCollectorTest.java b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/collector/IncrementalCollectorTest.java index 9dbbb767c..d5f860077 100644 --- a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/collector/IncrementalCollectorTest.java +++ b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/collector/IncrementalCollectorTest.java @@ -255,7 +255,7 @@ void contributorFailureTest() throws Exception { verify(store, timeout(3000).times(1)) .addAuditTrails(any(AuditTrailEvents.class), eq(TEST_COLLECTION), eq(TEST_CONTRIBUTOR2)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null)); Assertions.assertFalse(collectionRunner.finished, "The collector should not have finished after the complete event, as partialResults where received"); diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/ChecksumsCompletePillarEvent.java b/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/ChecksumsCompletePillarEvent.java index 90ede07ab..40d47e266 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/ChecksumsCompletePillarEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/ChecksumsCompletePillarEvent.java @@ -45,7 +45,7 @@ public class ChecksumsCompletePillarEvent extends ContributorCompleteEvent { */ public ChecksumsCompletePillarEvent(String pillarID, String collectionID, ResultingChecksums result, ChecksumSpecTYPE checksumType, boolean isPartialResult) { - super(pillarID, collectionID); + super(pillarID, collectionID, null); this.result = result; this.checksumType = checksumType; this.isPartialResult = isPartialResult; diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getfile/conversation/GettingFile.java b/bitrepository-client/src/main/java/org/bitrepository/access/getfile/conversation/GettingFile.java index 59bd4a63b..d851f29ac 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getfile/conversation/GettingFile.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getfile/conversation/GettingFile.java @@ -81,7 +81,7 @@ protected boolean handleFailureResponse(MessageResponse msg) throws UnableToFini @Override protected void generateContributorCompleteEvent(MessageResponse msg) { - getContext().getMonitor().contributorComplete(new ContributorCompleteEvent(msg.getFrom(), msg.getCollectionID())); + getContext().getMonitor().contributorComplete(new ContributorCompleteEvent(msg.getFrom(), msg.getCollectionID(), null)); } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/FileIDsCompletePillarEvent.java b/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/FileIDsCompletePillarEvent.java index 0963f3440..4912ec1c9 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/FileIDsCompletePillarEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/FileIDsCompletePillarEvent.java @@ -41,7 +41,7 @@ public class FileIDsCompletePillarEvent extends ContributorCompleteEvent { * @param isPartialResult Indication if the event contains partial results */ public FileIDsCompletePillarEvent(String pillarID, String collectionID, ResultingFileIDs result, boolean isPartialResult) { - super(pillarID, collectionID); + super(pillarID, collectionID, null); this.result = result; this.isPartialResult = isPartialResult; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getstatus/conversation/StatusCompleteContributorEvent.java b/bitrepository-client/src/main/java/org/bitrepository/access/getstatus/conversation/StatusCompleteContributorEvent.java index 98cdc2ccb..c890b9621 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getstatus/conversation/StatusCompleteContributorEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getstatus/conversation/StatusCompleteContributorEvent.java @@ -42,7 +42,7 @@ public class StatusCompleteContributorEvent extends ContributorCompleteEvent { * @param status The status for the contributor. */ public StatusCompleteContributorEvent(String contributorID, String collectionID, ResultingStatus status) { - super(contributorID, collectionID); + super(contributorID, collectionID, null); this.status = status; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/ConversationEventMonitor.java b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/ConversationEventMonitor.java index cd02425f8..25668cfff 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/conversation/ConversationEventMonitor.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/conversation/ConversationEventMonitor.java @@ -326,24 +326,19 @@ private String getShortConversationID(String fullConversationID) { } private DefaultEvent createDefaultEvent(OperationEvent.OperationEventType eventType, String info) { - DefaultEvent event = new DefaultEvent(collectionID); - event.setEventType(eventType); - event.setInfo(info); + DefaultEvent event = new DefaultEvent(eventType, collectionID, info); addContextInfo(event); return event; } private ContributorEvent createContributorEvent(OperationEvent.OperationEventType eventType, String info, String contributorID) { - ContributorEvent event = new ContributorEvent(contributorID, collectionID); - event.setEventType(eventType); - event.setInfo(info); + ContributorEvent event = new ContributorEvent(eventType, contributorID, collectionID, info); addContextInfo(event); return event; } private ContributorFailedEvent createContributorFailedEvent(String info, String contributorID, ResponseCode responseCode) { - ContributorFailedEvent event = new ContributorFailedEvent(contributorID, collectionID, responseCode); - event.setInfo(info); + ContributorFailedEvent event = new ContributorFailedEvent(contributorID, collectionID, responseCode, info); addContextInfo(event); return event; } @@ -355,7 +350,7 @@ private IdentificationCompleteEvent createContributorsIdentifiedEvent(ListOperationEvent. */ public abstract class AbstractOperationEvent implements OperationEvent { - private OperationEventType type; + protected final OperationEventType type; private OperationType operationType; private String fileID; - private String info; + private final String info; private String conversationID; - private String collectionID; + protected final String collectionID; + + protected AbstractOperationEvent(final OperationEventType type, final String collectionID, final String info) { + this.type = type; + this.info = info; + this.collectionID = collectionID; + } + + protected AbstractOperationEvent(final OperationEventType type, final String collectionID) { + this.type = type; + this.info = null; + this.collectionID = collectionID; + } @Override public String getCollectionID() { return collectionID; } - public void setCollectionID(String collectionID) { - this.collectionID = collectionID; - } @Override public String getInfo() { @@ -71,13 +80,7 @@ public String getConversationID() { return conversationID; } - /** - * @param type The {@link OperationEventType} to set as the event type - * @see #getEventType - */ - public void setEventType(OperationEventType type) { - this.type = type; - } + /** * @param operationType The {@link OperationType} to set as the operation type @@ -95,13 +98,7 @@ public void setFileID(String fileID) { this.fileID = fileID; } - /** - * @param info The content of the info field - * @see #getInfo - */ - public void setInfo(String info) { - this.info = info; - } + /** * @param conversationID See {@link #getConversationID} diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/CompleteEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/CompleteEvent.java index 4989af39e..61c6fd2d7 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/CompleteEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/CompleteEvent.java @@ -42,9 +42,7 @@ public class CompleteEvent extends AbstractOperationEvent { * the operation. */ public CompleteEvent(String collectionID, List componentResults) { - super(); - setCollectionID(collectionID); - setEventType(OperationEventType.COMPLETE); + super(OperationEventType.COMPLETE, collectionID, null); this.componentResults = componentResults; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorCompleteEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorCompleteEvent.java index 925d47703..765d6ecd5 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorCompleteEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorCompleteEvent.java @@ -25,8 +25,11 @@ * The parent class for all the concrete operation specific contributors complete events */ public class ContributorCompleteEvent extends ContributorEvent { + public ContributorCompleteEvent(String contributorID, String collectionID, String info) { + super(OperationEventType.COMPONENT_COMPLETE, contributorID, collectionID, info); + } + public ContributorCompleteEvent(String contributorID, String collectionID) { - super(contributorID, collectionID); - setEventType(OperationEventType.COMPONENT_COMPLETE); + super(OperationEventType.COMPONENT_COMPLETE, contributorID, collectionID); } } diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorEvent.java index b9db0305a..b02c48f2f 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorEvent.java @@ -33,10 +33,19 @@ public class ContributorEvent extends AbstractOperationEvent { /** * @param contributorID The contributorID for which this event concerns. * @param collectionID the collectionID for which this event concerns. + * @param info */ - public ContributorEvent(String contributorID, String collectionID) { - super(); - setCollectionID(collectionID); + public ContributorEvent(OperationEventType eventType, String contributorID, String collectionID, final String info) { + super(eventType, collectionID, info); + this.contributorID = contributorID; + } + + /** + * @param contributorID The contributorID for which this event concerns. + * @param collectionID the collectionID for which this event concerns. + */ + public ContributorEvent(OperationEventType eventType, String contributorID, String collectionID) { + super(eventType, collectionID); this.contributorID = contributorID; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorFailedEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorFailedEvent.java index 44e02a977..1f62759b2 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorFailedEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorFailedEvent.java @@ -28,6 +28,17 @@ public class ContributorFailedEvent extends ContributorEvent { private final ResponseCode responseCode; + /** + * @param contributorID the contributor + * @param collectionID the collection + * @param responseCode The response code from any response indicating the failure. Might be null, if no relevant + * response exists. + */ + public ContributorFailedEvent(String contributorID, String collectionID, ResponseCode responseCode, String info) { + super(COMPONENT_FAILED, contributorID, collectionID, info); + this.responseCode = responseCode; + } + /** * @param contributorID the contributor * @param collectionID the collection @@ -35,8 +46,7 @@ public class ContributorFailedEvent extends ContributorEvent { * response exists. */ public ContributorFailedEvent(String contributorID, String collectionID, ResponseCode responseCode) { - super(contributorID, collectionID); - setEventType(COMPONENT_FAILED); + super(COMPONENT_FAILED, contributorID, collectionID); this.responseCode = responseCode; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/DefaultEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/DefaultEvent.java index d59e5a8c0..7b67a55d5 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/DefaultEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/DefaultEvent.java @@ -29,9 +29,13 @@ */ public class DefaultEvent extends AbstractOperationEvent { - public DefaultEvent(String collectionID) { - super(); - setCollectionID(collectionID); + + public DefaultEvent(final OperationEventType type, final String collectionID, final String info) { + super(type, collectionID, info); + } + + public DefaultEvent(final OperationEventType type, final String collectionID) { + super(type, collectionID); } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/IdentificationCompleteEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/IdentificationCompleteEvent.java index 180cd4037..a9adfed74 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/IdentificationCompleteEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/IdentificationCompleteEvent.java @@ -37,9 +37,7 @@ public class IdentificationCompleteEvent extends AbstractOperationEvent { * @param contributorIDs The list of IDs of the contributor this event relates to. */ public IdentificationCompleteEvent(String collectionID, List contributorIDs) { - super(); - setCollectionID(collectionID); - setEventType(OperationEventType.IDENTIFICATION_COMPLETE); + super(OperationEventType.IDENTIFICATION_COMPLETE, collectionID, null); this.contributorIDs = contributorIDs; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/OperationFailedEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/OperationFailedEvent.java index 0e2f5f46a..ad607cbd3 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/OperationFailedEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/OperationFailedEvent.java @@ -35,14 +35,23 @@ public class OperationFailedEvent extends AbstractOperationEvent { /** * @param collectionID the collection ID + * @param componentResults The aggregated list of COMPONENT_COMPLETE events generated during + * the operation. * @param info See {@link #getInfo()} + */ + public OperationFailedEvent(String collectionID, List componentResults, String info) { + super(OperationEventType.FAILED, collectionID, info); + this.componentResults = componentResults; + } + + /** + * @param collectionID the collection ID * @param componentResults The aggregated list of COMPONENT_COMPLETE events generated during * the operation. + * @param info See {@link #getInfo()} */ - public OperationFailedEvent(String collectionID, String info, List componentResults) { - setEventType(OperationEventType.FAILED); - setInfo(info); - setCollectionID(collectionID); + public OperationFailedEvent(String collectionID, List componentResults) { + super(OperationEventType.FAILED, collectionID); this.componentResults = componentResults; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java index 97c6eb732..3014ad540 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java @@ -59,7 +59,7 @@ * Defines the common functionality for command-line-clients. */ public abstract class CommandLineClient { - private final String componentID; + protected final String componentID; protected OutputHandler output = new DefaultOutputHandler(getClass()); protected Settings settings; protected SecurityManager securityManager; diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/DeleteFileCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/DeleteFileCmd.java index bbbf72060..17b8e29d0 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/DeleteFileCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/DeleteFileCmd.java @@ -61,7 +61,7 @@ public static void main(String[] args) { protected DeleteFileCmd(String... args) { super(args); client = ModifyComponentFactory.getInstance().retrieveDeleteFileClient(settings, securityManager, - getComponentID()); + settings.getComponentID()); } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetChecksumsCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetChecksumsCmd.java index 111375f80..a96905893 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetChecksumsCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetChecksumsCmd.java @@ -55,7 +55,7 @@ public static void main(String[] args) { protected GetChecksumsCmd(String... args) { super(args); GetChecksumsClient client = AccessComponentFactory.getInstance().createGetChecksumsClient(settings, - securityManager, getComponentID()); + securityManager, settings.getComponentID()); GetChecksumsOutputFormatter outputFormatter = retrieveOutputFormatter(); int pageSize = SettingsUtils.getMaxClientPageSize(); pagingClient = new PagingGetChecksumsClient(client, getTimeout(), pageSize, outputFormatter, output); diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java index b65251252..f276aa9cc 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java @@ -64,7 +64,7 @@ public static void main(String[] args) { protected GetFileCmd(String... args) { super(args); client = AccessComponentFactory.getInstance().createGetFileClient(settings, securityManager, - getComponentID()); + settings.getComponentID()); } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileIDsCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileIDsCmd.java index db2f6744e..04951e309 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileIDsCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileIDsCmd.java @@ -57,7 +57,7 @@ protected GetFileIDsCmd(String... args) { super(args); output.debug("Instantiation GetFileIDClient."); GetFileIDsClient client = AccessComponentFactory.getInstance().createGetFileIDsClient(settings, - securityManager, getComponentID()); + securityManager, settings.getComponentID()); output.debug("Instantiation GetFileID outputFormatter."); GetFileIDsOutputFormatter outputFormatter = new GetFileIDsInfoFormatter(output); diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/PutFileCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/PutFileCmd.java index 31dd59e95..81fcbef96 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/PutFileCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/PutFileCmd.java @@ -86,7 +86,7 @@ public static void main(String[] args) { */ protected PutFileCmd(String... args) { super(args); - client = ModifyComponentFactory.getInstance().retrievePutClient(settings, securityManager, getComponentID()); + client = ModifyComponentFactory.getInstance().retrievePutClient(settings, securityManager, settings.getComponentID()); } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java index af6da3d8d..e87c02c77 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java @@ -72,7 +72,8 @@ public static void main(String[] args) { */ protected ReplaceFileCmd(String... args) { super(args); - client = ModifyComponentFactory.getInstance().retrieveReplaceFileClient(settings, securityManager, this.getComponentID()); + client = ModifyComponentFactory.getInstance().retrieveReplaceFileClient(settings, securityManager, + settings.getComponentID()); } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/modify/deletefile/conversation/DeleteFileCompletePillarEvent.java b/bitrepository-client/src/main/java/org/bitrepository/modify/deletefile/conversation/DeleteFileCompletePillarEvent.java index c7fd50c82..d1da0565b 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/modify/deletefile/conversation/DeleteFileCompletePillarEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/modify/deletefile/conversation/DeleteFileCompletePillarEvent.java @@ -43,7 +43,7 @@ public class DeleteFileCompletePillarEvent extends ContributorCompleteEvent { * @param result The result returned by the pillar. */ public DeleteFileCompletePillarEvent(String pillarID, String collectionID, ChecksumDataForFileTYPE result) { - super(pillarID, collectionID); + super(pillarID, collectionID, null); this.result = result; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/IdentifyPillarsForPutFile.java b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/IdentifyPillarsForPutFile.java index 10dbc04c1..4071daf00 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/IdentifyPillarsForPutFile.java +++ b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/IdentifyPillarsForPutFile.java @@ -63,8 +63,8 @@ protected void handleFailureResponse(MessageResponse msg) throws UnableToFinishE if (ChecksumUtils.areEqual( response.getChecksumDataForExistingFile(), context.getChecksumForValidationAtPillar())) { PutFileCompletePillarEvent event = new PutFileCompletePillarEvent( - response.getPillarID(), response.getCollectionID(), response.getChecksumDataForExistingFile(), response.getResponseInfo()); - event.setInfo("File already existed on " + response.getPillarID()); + response.getPillarID(), response.getCollectionID(), response.getChecksumDataForExistingFile(), response.getResponseInfo(), + "File already existed on " + response.getPillarID()); getContext().getMonitor().contributorComplete(event); } else { getContext().getMonitor().contributorFailed( diff --git a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PutFileCompletePillarEvent.java b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PutFileCompletePillarEvent.java index a51cfe1e2..fcaabf19c 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PutFileCompletePillarEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PutFileCompletePillarEvent.java @@ -40,9 +40,11 @@ public class PutFileCompletePillarEvent extends ContributorCompleteEvent { * @param pillarID The pillar which generated the result * @param collectionID The ID of the collection * @param result The result returned by the pillar. + * @param info */ - public PutFileCompletePillarEvent(String pillarID, String collectionID, ChecksumDataForFileTYPE result, ResponseInfo responseInfo) { - super(pillarID, collectionID); + public PutFileCompletePillarEvent(String pillarID, String collectionID, ChecksumDataForFileTYPE result, ResponseInfo responseInfo, + final String info) { + super(pillarID, collectionID, info); this.result = result; this.responseInfo = responseInfo; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java index 2899a18d9..53af4e0dc 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java +++ b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java @@ -62,7 +62,9 @@ protected void generateContributorCompleteEvent(MessageResponse msg) throws Unex if (msg instanceof PutFileFinalResponse) { PutFileFinalResponse response = (PutFileFinalResponse) msg; getContext().getMonitor().contributorComplete(new PutFileCompletePillarEvent(response.getPillarID(), response.getCollectionID(), - response.getChecksumDataForNewFile(), response.getResponseInfo())); + response.getChecksumDataForNewFile(), response.getResponseInfo(), + "File already existed on " + + response.getPillarID())); } else { throw new UnexpectedResponseException( "Received unexpected msg " + msg.getClass().getSimpleName() + " while waiting for Put file response."); @@ -149,8 +151,8 @@ protected boolean handleFailureResponse(MessageResponse msg) throws UnableToFini case DUPLICATE_FILE_FAILURE: if (ChecksumUtils.areEqual(response.getChecksumDataForExistingFile(), context.getChecksumForValidationAtPillar())) { PutFileCompletePillarEvent event = new PutFileCompletePillarEvent(response.getPillarID(), - response.getCollectionID(), response.getChecksumDataForExistingFile(), response.getResponseInfo()); - event.setInfo("File already existed on " + response.getPillarID()); + response.getCollectionID(), response.getChecksumDataForExistingFile(), response.getResponseInfo(), + "File already existed on " + response.getPillarID()); getContext().getMonitor().contributorComplete(event); } else { getContext().getMonitor().contributorFailed( diff --git a/bitrepository-client/src/main/java/org/bitrepository/modify/replacefile/conversation/ReplaceFileCompletePillarEvent.java b/bitrepository-client/src/main/java/org/bitrepository/modify/replacefile/conversation/ReplaceFileCompletePillarEvent.java index 8e432942a..897551d2e 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/modify/replacefile/conversation/ReplaceFileCompletePillarEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/modify/replacefile/conversation/ReplaceFileCompletePillarEvent.java @@ -43,7 +43,7 @@ public class ReplaceFileCompletePillarEvent extends ContributorCompleteEvent { */ public ReplaceFileCompletePillarEvent( String pillarID, String collectionID, ChecksumDataForFileTYPE deletedFile, ChecksumDataForFileTYPE newFile) { - super(pillarID, collectionID); + super(pillarID, collectionID, null); this.newFileChecksum = newFile; this.replacedFileChecksum = deletedFile; } diff --git a/bitrepository-integrity-service/pom.xml b/bitrepository-integrity-service/pom.xml index 199c5370f..01082ac55 100644 --- a/bitrepository-integrity-service/pom.xml +++ b/bitrepository-integrity-service/pom.xml @@ -94,6 +94,13 @@ src/test/resources true + + scripts/** + + + + src/test/resources + false diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/RepairMissingFilesWorkflowTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/RepairMissingFilesWorkflowTest.java index 290b0d6e2..b27fdefe4 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/RepairMissingFilesWorkflowTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/RepairMissingFilesWorkflowTest.java @@ -199,7 +199,7 @@ void testFailedGetFile() { doAnswer(new Answer() { public Void answer(InvocationOnMock invocation) { EventHandler eventHandler = (EventHandler) invocation.getArguments()[3]; - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "failure", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "failure")); return null; } }).when(collector).getFile( @@ -252,7 +252,7 @@ public Void answer(InvocationOnMock invocation) { doAnswer(new Answer() { public Void answer(InvocationOnMock invocation) { EventHandler eventHandler = (EventHandler) invocation.getArguments()[4]; - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "failure", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "failure")); return null; } }).when(collector).putFile( diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/SaltedChecksumWorkflowTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/SaltedChecksumWorkflowTest.java index fb7317ddf..0345116d4 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/SaltedChecksumWorkflowTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/SaltedChecksumWorkflowTest.java @@ -182,7 +182,9 @@ void testOneComponentFailureAndTwoOtherAgreeOnChecksum() { eventHandler.handleEvent(e1); eventHandler.handleEvent(e2); eventHandler.handleEvent(e3); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "COMPONENT FAILED", Arrays.asList(e1, e2, e3))); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, + Arrays.asList(e1, e2, e3), + "COMPONENT FAILED")); return null; }).when(collector).getChecksums(anyString(), any(), any(), anyString(), anyString(), any(), any(EventHandler.class)); @@ -228,8 +230,10 @@ void testOneComponentFailureAndTwoOtherDisagreeOnChecksum() throws Exception { eventHandler.handleEvent(e1); eventHandler.handleEvent(e2); eventHandler.handleEvent(e3); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "COMPONENT FAILED", - Arrays.asList(e1, e2, e3))); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, + Arrays.asList(e1, e2, e3), + "COMPONENT FAILED" + )); return null; }).when(collector).getChecksums(anyString(), any(), any(), anyString(), anyString(), any(), any(EventHandler.class)); @@ -312,7 +316,7 @@ void testNoReceivedChecksums() { doAnswer((Answer) invocation -> { EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "")); return null; }).when(collector).getChecksums(anyString(), any(), any(), anyString(), anyString(), any(), any(EventHandler.class)); diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetChecksumForFileStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetChecksumForFileStepTest.java index 8d9a95637..dc3a91ef3 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetChecksumForFileStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetChecksumForFileStepTest.java @@ -187,7 +187,7 @@ void testComponentFailure() throws Exception { eventHandler.handleEvent(e2); eventHandler.handleEvent(e3); eventHandler.handleEvent( - new OperationFailedEvent(TEST_COLLECTION, "COMPONENT FAILED", Arrays.asList(e1, e2, e3))); + new OperationFailedEvent(TEST_COLLECTION, Arrays.asList(e1, e2, e3), "COMPONENT FAILED")); return null; }).when(collector).getChecksums( eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), anyString(), diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetFileStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetFileStepTest.java index 918630262..ac48a5fd4 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetFileStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/GetFileStepTest.java @@ -80,7 +80,7 @@ void testNegativeReply() throws Exception { doAnswer(new Answer() { public Void answer(InvocationOnMock invocation) { EventHandler eventHandler = (EventHandler) invocation.getArguments()[3]; - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Problem encountered")); return null; } }).when(collector).getFile( diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/PutFileStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/PutFileStepTest.java index 7c31b30b6..8d137bdf0 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/PutFileStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/PutFileStepTest.java @@ -84,7 +84,7 @@ void testNegativeReply() throws Exception { doAnswer(new Answer() { public Void answer(InvocationOnMock invocation) { EventHandler eventHandler = (EventHandler) invocation.getArguments()[4]; - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Problem encountered")); return null; } }).when(collector).putFile( diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java index 774734472..80f6b20e6 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java @@ -105,7 +105,7 @@ void testAbortWorkflowWhenNegativeReply() { eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Problem encountered")); return null; }).when(collector).getChecksums( eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), @@ -152,7 +152,7 @@ public Void answer(InvocationOnMock invocation) { eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Problem encountered")); } else { eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, @@ -206,7 +206,7 @@ void testContinueWorkflowNegativeReply() throws WorkflowAbortedException { eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Problem encountered", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Problem encountered")); return null; }).when(collector).getChecksums( eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateFileIDsStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateFileIDsStepTest.java index 908829009..47110bcfb 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateFileIDsStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateFileIDsStepTest.java @@ -96,7 +96,7 @@ void testAbortWorkflowWhenNegativeReply() { public Void answer(InvocationOnMock invocation) { EventHandler eventHandler = (EventHandler) invocation.getArguments()[4]; eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Operation failed", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Operation failed")); return null; } }).when(collector).getFileIDs( @@ -138,7 +138,7 @@ public Void answer(InvocationOnMock invocation) { if(firstAnswer) { firstAnswer = false; eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Operation failed", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Operation failed")); } else { eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); eventHandler.handleEvent(new FileIDsCompletePillarEvent( @@ -180,7 +180,7 @@ void testContinueWorkflowWhenNegativeReply() throws WorkflowAbortedException { public Void answer(InvocationOnMock invocation) { EventHandler eventHandler = (EventHandler) invocation.getArguments()[4]; eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, "Operation failed", null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Operation failed")); return null; } }).when(collector).getFileIDs( diff --git a/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/collector/StatusEventHandlerTest.java b/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/collector/StatusEventHandlerTest.java index ee37bca1b..0c109b77d 100644 --- a/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/collector/StatusEventHandlerTest.java +++ b/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/collector/StatusEventHandlerTest.java @@ -57,8 +57,7 @@ void testStatusEventHandler() throws Exception { Assertions.assertEquals(0, alerter.getCallsForCheckStatuses()); addStep("Test an unhandled event.", "Should not make any calls."); - AbstractOperationEvent event = new DefaultEvent(TEST_COLLECTION); - event.setEventType(OperationEvent.OperationEventType.WARNING); + AbstractOperationEvent event = new DefaultEvent(OperationEvent.OperationEventType.WARNING, TEST_COLLECTION); eventHandler.handleEvent(event); Assertions.assertEquals(0, store.getCallsForGetStatusMap()); @@ -75,7 +74,7 @@ void testStatusEventHandler() throws Exception { Assertions.assertEquals(1, alerter.getCallsForCheckStatuses()); addStep("Test the Failed event", "Should make another call to the alerter"); - event = new OperationFailedEvent(null, "info", null); + event = new OperationFailedEvent(null, null); eventHandler.handleEvent(event); Assertions.assertEquals(0, store.getCallsForGetStatusMap()); Assertions.assertEquals(0, store.getCallsForUpdateReplayCounts()); diff --git a/pom.xml b/pom.xml index fc54e89e4..d01ffe040 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ org.sbforge sbforge-parent - 22 + 25 Bitrepository @@ -203,6 +203,7 @@ 6.2.7 + org.slf4j @@ -214,12 +215,12 @@ ch.qos.logback logback-classic - 1.5.32 + 1.5.34 ch.qos.logback logback-core - 1.5.32 + 1.5.34 @@ -262,9 +263,6 @@ 3.0 - - - commons-io @@ -356,7 +354,6 @@ repository-settings-java ${repository.settings.version} - @@ -426,17 +423,14 @@ allure-junit5 test - - - org.apache.maven.plugins maven-enforcer-plugin - 3.0.0-M3 + 3.6.2 enforce-maven @@ -446,7 +440,7 @@ - 2.2.1 + 3.9.1 @@ -511,7 +505,7 @@ org.jacoco jacoco-maven-plugin - 0.8.12 + 0.8.14 @@ -541,7 +535,7 @@ de.thetaphi forbiddenapis - 3.8 + 3.10 ${maven.compiler.release} false @@ -578,7 +572,7 @@ org.codehaus.mojo license-maven-plugin - 2.0.0 + 2.7.1 maven-compiler-plugin @@ -586,15 +580,15 @@ maven-source-plugin - 3.2.1 + 3.4.0 maven-javadoc-plugin - 3.2.0 + 3.12.0 maven-release-plugin - 3.0.0-M1 + 3.3.1 maven-jar-plugin @@ -629,7 +623,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.4 + 3.5.6 ${project.basedir}/../target/allure-results @@ -641,7 +635,7 @@ maven-failsafe-plugin - 3.5.5 + 3.5.6 @@ -653,40 +647,35 @@ maven-war-plugin - 3.3.0 + 3.5.1 maven-assembly-plugin - 3.3.0 + 3.8.0 maven-resources-plugin - 3.1.0 + 3.5.0 maven-remote-resources-plugin - 1.7.0 + 3.3.0 maven-clean-plugin - 3.1.0 + 3.5.0 maven-install-plugin - 3.0.0-M1 + 3.1.4 maven-deploy-plugin - 3.0.0-M1 + 3.1.4 maven-dependency-plugin - 3.1.2 - - - org.codehaus.mojo - jaxb2-maven-plugin - 2.5.0 + 3.10.0 org.apache.tomcat.maven @@ -696,12 +685,12 @@ org.codehaus.mojo exec-maven-plugin - 3.0.0 + 3.6.3 de.thetaphi forbiddenapis - 3.8 + 3.10 @@ -725,7 +714,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.9.8.3 + 4.9.8.2 false @@ -733,12 +722,12 @@ org.jacoco jacoco-maven-plugin - 0.8.12 + 0.8.14 org.apache.maven.plugins maven-pmd-plugin - 3.26.0 + 3.28.0 From 9cd427c29fc0c81f7235624cae7a1aeff37deba2 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Wed, 15 Jul 2026 12:28:05 +0200 Subject: [PATCH 15/22] clean up whitespace changes --- bitrepository-alarm-service/pom.xml | 3 +- .../alarm/alarmservice/AlarmServiceInput.java | 1 - .../webservice/RestAuditTrailService.java | 10 +- .../src/main/webapp/WEB-INF/web.xml | 4 +- .../collector/IncrementalCollectorTest.java | 2 +- .../audittrails/store/AuditDatabaseTest.java | 391 +++++------------- .../ChecksumsCompletePillarEvent.java | 2 +- .../getfile/conversation/GettingFile.java | 2 +- .../FileIDsCompletePillarEvent.java | 2 +- .../StatusCompleteContributorEvent.java | 2 +- .../client/eventhandler/DefaultEvent.java | 1 - .../IdentificationCompleteEvent.java | 2 +- .../eventhandler/OperationFailedEvent.java | 1 - .../bitrepository/commandline/GetFileCmd.java | 4 +- .../DeleteFileCompletePillarEvent.java | 2 +- .../PutFileCompletePillarEvent.java | 5 +- .../putfile/conversation/PuttingFile.java | 31 +- .../ReplaceFileCompletePillarEvent.java | 2 +- .../bitrepository/client/DefaultClientIT.java | 5 +- .../client/DefaultFixtureClientIT.java | 4 +- bitrepository-core/pom.xml | 4 +- .../webobjects/StatisticsCollectionSize.java | 1 - .../common/webobjects/StatisticsDataSize.java | 1 - .../webobjects/StatisticsPillarSize.java | 1 - .../protocol/activemq/ActiveMQMessageBus.java | 34 +- .../ExtendedTestInfoParameterResolver.java | 48 +-- .../protocol/IntegrationTest.java | 39 +- .../protocol/MessageCreationTest.java | 3 +- bitrepository-integrity-service/pom.xml | 3 +- .../cache/database/IntegrityDAOUtils.java | 3 +- .../web/IntegrityServiceRestApplication.java | 4 +- .../web/RestIntegrityService.java | 130 +++--- .../web/RestStatisticsService.java | 12 +- .../integrityservice/web/StreamingTools.java | 4 +- .../workflow/step/HandleMissingFilesStep.java | 2 +- .../step/HandleObsoleteChecksumsStep.java | 2 +- .../workflow/step/UpdateChecksumsStep.java | 3 +- .../main/scripts/create_derby_databases.sh | 3 +- .../IntegrityDatabaseTestCase.java | 26 +- .../cache/IntegrityDAOTest.java | 3 - .../integrationtest/MissingChecksumTests.java | 3 - .../stresstest/DatabaseStressTests.java | 1 - .../step/UpdateChecksumsStepTest.java | 368 +++++++---------- .../MonitoringServiceRestApplication.java | 1 + .../webservice/RestMonitoringService.java | 6 +- .../webservice/WebStatus.java | 4 +- .../collector/StatusEventHandlerTest.java | 2 +- .../GetChecksumsRequestHandler.java | 6 +- .../GetFileIDsRequestHandler.java | 7 +- .../pillar/DefaultFixturePillarIT.java | 3 +- .../bitrepository/pillar/DefaultPillarIT.java | 4 +- .../bitrepository/pillar/MockedPillarIT.java | 1 - .../pillar/integration/ClientProvider.java | 54 +-- .../integration/PillarIntegrationIT.java | 10 +- .../ReferencePillarDerbyDBTestUtils.java | 4 +- .../func/DefaultPillarMessagingIT.java | 1 + .../func/deletefile/DeleteFileRequestIT.java | 2 +- .../func/getfile/GetFileRequestIT.java | 2 +- .../func/getfileids/GetFileIDsIT.java | 8 +- .../func/getfileids/GetFileIDsQueryIT.java | 2 +- .../putfile/IdentifyPillarsForPutFileIT.java | 3 +- .../func/putfile/PutFileRequestIT.java | 5 +- .../replacefile/ReplaceFileRequestIT.java | 3 +- .../integration/perf/GetFileStressIT.java | 2 +- .../pillar/messagehandling/DeleteFileIT.java | 2 - .../GeneralMessageHandlingIT.java | 1 - .../messagehandling/GetAuditTrailsIT.java | 1 - .../messagehandling/GetChecksumsIT.java | 1 - .../pillar/messagehandling/GetFileIDsIT.java | 4 +- .../pillar/messagehandling/GetFileIT.java | 1 - .../pillar/messagehandling/PutFileIT.java | 1 - .../pillar/messagehandling/ReplaceFileIT.java | 1 - .../RecalculateChecksumWorkflowIT.java | 11 +- .../pillar/store/ChecksumPillarModelIT.java | 2 +- .../pillar/store/FullPillarModelIT.java | 2 +- .../checksumcache/ChecksumDatabaseTest.java | 64 ++- .../xsd/bindings-reference-settings.xjb | 4 +- .../AbstractBitrepositoryContextListener.java | 5 +- .../service/workflow/WorkflowState.java | 1 - .../AuditTrailContributorDatabaseTest.java | 110 +++-- bitrepository-webclient/pom.xml | 1 - .../bitrepository/webservice/ServiceUrl.java | 6 +- .../webservice/WebclientContextListener.java | 4 +- pom.xml | 3 +- 84 files changed, 580 insertions(+), 949 deletions(-) diff --git a/bitrepository-alarm-service/pom.xml b/bitrepository-alarm-service/pom.xml index 0f1c3a662..504188cac 100644 --- a/bitrepository-alarm-service/pom.xml +++ b/bitrepository-alarm-service/pom.xml @@ -1,5 +1,4 @@ - + 4.0.0 diff --git a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceInput.java b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceInput.java index 56d17bad5..9890a94c8 100644 --- a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceInput.java +++ b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/alarmservice/AlarmServiceInput.java @@ -21,7 +21,6 @@ */ package org.bitrepository.alarm.alarmservice; - import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement diff --git a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java index d64f42f1e..381a3f921 100644 --- a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java +++ b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java @@ -85,11 +85,11 @@ public StreamingOutput queryAuditTrailEvents(@FormParam("fromDate") String fromD final int maxAudits = maxResults; final AuditEventIterator it = service.queryAuditTrailEventsByIterator( - from != null ? from : null, - to != null ? to : null, - contentOrNull(fileID), - collectionID, contentOrNull(reportingComponent), contentOrNull(actor), filterAction(action), - contentOrNull(fingerprint), contentOrNull(operationID), maxAudits); + from, + to, + contentOrNull(fileID), + collectionID, contentOrNull(reportingComponent), contentOrNull(actor), filterAction(action), + contentOrNull(fingerprint), contentOrNull(operationID), maxAudits); if (it != null) { return output -> { JsonFactory jf = new JsonFactory(); diff --git a/bitrepository-audit-trail-service/src/main/webapp/WEB-INF/web.xml b/bitrepository-audit-trail-service/src/main/webapp/WEB-INF/web.xml index a77580dbd..72536a131 100644 --- a/bitrepository-audit-trail-service/src/main/webapp/WEB-INF/web.xml +++ b/bitrepository-audit-trail-service/src/main/webapp/WEB-INF/web.xml @@ -25,8 +25,8 @@ --> - + Bit Repository Audit Trail Service diff --git a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/collector/IncrementalCollectorTest.java b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/collector/IncrementalCollectorTest.java index d5f860077..6a7680003 100644 --- a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/collector/IncrementalCollectorTest.java +++ b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/collector/IncrementalCollectorTest.java @@ -255,7 +255,7 @@ void contributorFailureTest() throws Exception { verify(store, timeout(3000).times(1)) .addAuditTrails(any(AuditTrailEvents.class), eq(TEST_COLLECTION), eq(TEST_CONTRIBUTOR2)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "")); Assertions.assertFalse(collectionRunner.finished, "The collector should not have finished after the complete event, as partialResults where received"); diff --git a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java index 9f7afb0e0..1514e140d 100644 --- a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java +++ b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java @@ -90,13 +90,13 @@ void setup() throws Exception { @Tag("databasetest") void AuditDatabaseExtractionTest() throws Exception { addDescription("Testing the connection to the audit trail service database especially with regards to " - + "extracting the data from it."); + + "extracting the data from it."); addStep("Setup the variables and constants.", "Should be ok."); Instant restrictionDate = Instant.ofEpochMilli(123456789); // Sometime between epoch and now! addStep("Adds the variables to the settings and instantaites the database cache", "Should be connected."); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); addStep("Validate that the database is empty and then populate it.", "Should be possible."); @@ -106,154 +106,112 @@ void AuditDatabaseExtractionTest() throws Exception { addStep("Extract the audit trails", ""); List res = - getEventsFromIterator(database.getAuditTrailsByIterator(null, - null, - null, - null, - null, - null, - null, - (Instant) null, - (Instant) null, - null, - null)); + getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, null, + null, null, null, (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(2, res.size(), res.toString()); addStep("Test the extraction of FileID", "Should be able to extract the audit of each file individually."); res = getEventsFromIterator(database.getAuditTrailsByIterator(fileID, null, null, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID, res.get(0).getFileID()); res = getEventsFromIterator(database.getAuditTrailsByIterator(fileID2, null, null, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID2, res.get(0).getFileID()); addStep("Test the extraction of CollectionID", "Only results when the defined collection is used"); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, collectionID, null, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(2, res.size(), res.toString()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, - "NOT-THE-CORRECT-COLLECTION-ID" - + System.currentTimeMillis(), null, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + "NOT-THE-CORRECT-COLLECTION-ID" + System.currentTimeMillis(), null, + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(0, res.size(), res.toString()); addStep("Perform extraction based on the component id.", ""); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, pillarID, - null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(2, res.size(), res.toString()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, - "NO COMPONENT", null, null, null, - null, - (Instant) null, (Instant) null, null, null)); + "NO COMPONENT", null, null, null, + null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(0, res.size(), res.toString()); addStep("Perform extraction based on the sequence number restriction", "Should be possible to have both lower and upper sequence number restrictions."); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - 5L, null, null, null, (Instant) null, - (Instant) null, null, null)); + 5L, null, null, null, (Instant) null, + (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID2, res.get(0).getFileID()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, 5L, null, null, (Instant) null, - (Instant) null, null, null)); + null, 5L, null, null, (Instant) null, + (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID, res.get(0).getFileID()); addStep("Perform extraction based on actor id restriction.", "Should be possible to restrict on the id of the actor."); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, actor1, null, - (Instant) null, (Instant) null, null, null)); + null, null, actor1, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(actor1, res.get(0).getActorOnFile()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, actor2, null, - (Instant) null, (Instant) null, null, null)); + null, null, actor2, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(actor2, res.get(0).getActorOnFile()); addStep("Perform extraction based on operation restriction.", "Should be possible to restrict on the FileAction operation."); - res = getEventsFromIterator(database.getAuditTrailsByIterator(null, - null, - null, - null, - null, - null, - FileAction.INCONSISTENCY, - (Instant) null, - (Instant) null, - null, - null)); + res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, + null, null, null, + FileAction.INCONSISTENCY, (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(FileAction.INCONSISTENCY, res.get(0).getActionOnFile()); - res = getEventsFromIterator(database.getAuditTrailsByIterator(null, - null, - null, - null, - null, - null, - FileAction.FAILURE, - (Instant) null, - (Instant) null, - null, - null)); + res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, + null, null, null, + FileAction.FAILURE, (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(FileAction.FAILURE, res.get(0).getActionOnFile()); addStep("Perform extraction based on date restriction.", "Should be possible to restrict on the date of the audit."); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, null, null, - restrictionDate, null, null, null)); + null, null, null, null, + restrictionDate, null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID2, res.get(0).getFileID()); res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, - null, null, null, null, - null, restrictionDate, null, null)); + null, null, null, null, + null, restrictionDate, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID, res.get(0).getFileID()); addStep("Perform extraction based on fingerprint restriction.", "Should be possible to restrict on the fingerprint of the audit."); - res = getEventsFromIterator(database.getAuditTrailsByIterator(null, - null, - null, - null, - null, - null, - null, - (Instant) null, - (Instant) null, - fingerprint1, - null)); + res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, + null, null, null, null, + (Instant) null, (Instant) null, fingerprint1, null)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID, res.get(0).getFileID()); Assertions.assertEquals(fingerprint1, res.get(0).getCertificateID()); addStep("Perform extraction based on operationID restriction.", "Should be possible to restrict on the operationID of the audit."); - res = getEventsFromIterator(database.getAuditTrailsByIterator(null, - null, - null, - null, - null, - null, - null, - (Instant) null, - (Instant) null, - null, - operationID2)); + res = getEventsFromIterator(database.getAuditTrailsByIterator(null, null, null, + null, null, null, null, + (Instant) null, (Instant) null, null, operationID2)); Assertions.assertEquals(1, res.size(), res.toString()); Assertions.assertEquals(fileID2, res.get(0).getFileID()); Assertions.assertEquals(operationID2, res.get(0).getOperationID()); @@ -269,7 +227,7 @@ void AuditDatabasePreservationTest() throws Exception { addStep("Adds the variables to the settings and instantaites the database cache", "Should be connected."); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); Assertions.assertEquals(0, database.largestSequenceNumber(pillarID, collectionID)); @@ -296,7 +254,7 @@ void AuditDatabasePreservationTest() throws Exception { void auditDatabaseCorrectTimestampTest() { addDescription("Testing the correct ingest and extraction of audittrail dates"); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); Instant summertimeTS = OffsetDateTime.parse("2015-10-25T02:59:54.000+02:00").toInstant(); @@ -309,48 +267,27 @@ void auditDatabaseCorrectTimestampTest() { AuditTrailEvents events = new AuditTrailEvents(); events.getAuditTrailEvent().add(createSingleEvent(summertimeTS, - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - "summertime", - "info", - pillarID, - new BigInteger("1"), - operationID1, - fingerprint1)); + FileAction.CHECKSUM_CALCULATED, "actor", "auditInfo", "summertime", "info", + pillarID, new BigInteger("1"), + operationID1, fingerprint1)); events.getAuditTrailEvent().add(createSingleEvent(wintertimeTS, - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - "wintertime", - "info", - pillarID, - new BigInteger("1"), - operationID1, - fingerprint1)); + FileAction.CHECKSUM_CALCULATED, "actor", "auditInfo", "wintertime", "info", + pillarID, new BigInteger("1"), + operationID1, fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); List res = getEventsFromIterator(database.getAuditTrailsByIterator("summertime", - null, - null, - null, - null, - null, - null, - (Instant) null, - (Instant) null, - null, - null)); + null, null, + null, + null, null, null, (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); - Assertions.assertEquals(summertimeUnix, - CalendarUtils.convertFromXMLGregorianCalendarToInstant(res.get(0).getActionDateTime())); + Assertions.assertEquals(summertimeUnix, CalendarUtils.convertFromXMLGregorianCalendarToInstant(res.get(0).getActionDateTime())); res = getEventsFromIterator(database.getAuditTrailsByIterator("wintertime", null, - null, null, null, null, null, - (Instant) null, (Instant) null, null, null)); + null, null, null, null, null, + (Instant) null, (Instant) null, null, null)); Assertions.assertEquals(1, res.size(), res.toString()); - Assertions.assertEquals(wintertimeUnix, - CalendarUtils.convertFromXMLGregorianCalendarToInstant(res.get(0).getActionDateTime())); + Assertions.assertEquals(wintertimeUnix, CalendarUtils.convertFromXMLGregorianCalendarToInstant(res.get(0).getActionDateTime())); } @@ -362,7 +299,7 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Adds the variables to the settings and instantaites the database cache", "Should be connected."); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); AuditTrailEvents events; String veryLongString = ""; @@ -372,31 +309,17 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with all data", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - "fileID", - "info", - pillarID, - new BigInteger("1"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("1"), + operationID1, fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); addStep("Test ingesting with no timestamp", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(null, - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - "fileID", - "info", - pillarID, - new BigInteger("2"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(null, FileAction.CHECKSUM_CALCULATED, + "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("2"), + operationID1, fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -406,16 +329,9 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no file action", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - null, - "actor", - "auditInfo", - "fileID", - "info", - pillarID, - new BigInteger("3"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), null, + "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("3"), + operationID1, fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -425,16 +341,9 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no actor", "Throws exception"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - null, - "auditInfo", - "fileID", - "info", - pillarID, - new BigInteger("4"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + null, "auditInfo", "fileID", "info", pillarID, new BigInteger("4"), + operationID1, fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -444,30 +353,16 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no audit info", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - "actor", - null, - "fileID", - "info", - pillarID, - new BigInteger("5"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + "actor", null, "fileID", "info", pillarID, new BigInteger("5"), + operationID1, fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); addStep("Test ingesting with no file id", "Throws exception"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - null, - "info", - pillarID, - new BigInteger("6"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + "actor", "auditInfo", null, "info", pillarID, new BigInteger("6"), + operationID1, fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -477,30 +372,16 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no info", "No failure"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - "fileID", - null, - pillarID, - new BigInteger("7"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + "actor", "auditInfo", "fileID", null, pillarID, new BigInteger("7"), + operationID1, fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); addStep("Test ingesting with no component id", "Throws exception"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - "fileID", - "info", - null, - new BigInteger("8"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + "actor", "auditInfo", "fileID", "info", null, new BigInteger("8"), + operationID1, fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -513,8 +394,8 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingesting with no sequence number", "Throws exception"); events = new AuditTrailEvents(); events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, - "actor", "auditInfo", "fileID", "info", pillarID, null, - operationID1, fingerprint1)); + "actor", "auditInfo", "fileID", "info", pillarID, null, + operationID1, fingerprint1)); try { database.addAuditTrails(events, collectionID, pillarID); Assertions.fail("Should throw an exception."); @@ -524,30 +405,16 @@ void AuditDatabaseIngestTest() throws Exception { addStep("Test ingest with very long auditInfo (255+)", "Not failing any more"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - "actor", - veryLongString, - "fileID", - "info", - pillarID, - new BigInteger("9"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + "actor", veryLongString, "fileID", "info", pillarID, new BigInteger("9"), + operationID1, fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); addStep("Test ingest with very long info (255+)", "Not failing any more"); events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - "fileID", - veryLongString, - pillarID, - new BigInteger("10"), - operationID1, - fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + "actor", "auditInfo", "fileID", veryLongString, pillarID, new BigInteger("10"), + operationID1, fingerprint1)); database.addAuditTrails(events, collectionID, pillarID); } @@ -560,51 +427,23 @@ void AuditDatabaseGoodIngestTest() throws Exception { addStep("Adds the variables to the settings and instantaites the database cache", "Should be connected."); DatabaseManager dm = new AuditTrailDatabaseManager( - settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); + settings.getReferenceSettings().getAuditTrailServiceSettings().getAuditTrailServiceDatabase()); AuditTrailServiceDAO database = new AuditTrailServiceDAO(dm); addStep("Build test data", "No failure"); AuditTrailEvents events = new AuditTrailEvents(); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.PUT_FILE, - "actor", - "auditInfo", - "fileID", - "info", - pillarID, - new BigInteger("1"), - operationID1, - fingerprint1)); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - "fileID", - "info", - pillarID, - new BigInteger("2"), - operationID1, - null)); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.REPLACE_FILE, - "actor", - "auditInfo", - "fileID", - "info", - pillarID, - new BigInteger("3"), - null, - fingerprint1)); - events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), - FileAction.CHECKSUM_CALCULATED, - "actor", - "auditInfo", - "fileID", - "info", - pillarID, - new BigInteger("4"), - null, - null)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.PUT_FILE, + "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("1"), + operationID1, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("2"), + operationID1, null)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.REPLACE_FILE, + "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("3"), + null, fingerprint1)); + events.getAuditTrailEvent().add(createSingleEvent(Instant.now(), FileAction.CHECKSUM_CALCULATED, + "actor", "auditInfo", "fileID", "info", pillarID, new BigInteger("4"), + null, null)); database.addAuditTrails(events, collectionID, pillarID); } @@ -612,28 +451,12 @@ void AuditDatabaseGoodIngestTest() throws Exception { private AuditTrailEvents createEvents() { AuditTrailEvents events = new AuditTrailEvents(); - AuditTrailEvent event1 = createSingleEvent(Instant.EPOCH, - FileAction.INCONSISTENCY, - actor1, - "I AM AUDIT", - fileID, - null, - pillarID, - new BigInteger("1"), - operationID1, - fingerprint1); + AuditTrailEvent event1 = createSingleEvent(Instant.EPOCH, FileAction.INCONSISTENCY, actor1, + "I AM AUDIT", fileID, null, pillarID, new BigInteger("1"), operationID1, fingerprint1); events.getAuditTrailEvent().add(event1); - AuditTrailEvent event2 = createSingleEvent(Instant.now(), - FileAction.FAILURE, - actor2, - null, - fileID2, - "WHAT AM I DOING?", - pillarID, - new BigInteger("10"), - operationID2, - fingerprint2); + AuditTrailEvent event2 = createSingleEvent(Instant.now(), FileAction.FAILURE, actor2, null, fileID2, + "WHAT AM I DOING?", pillarID, new BigInteger("10"), operationID2, fingerprint2); events.getAuditTrailEvent().add(event2); return events; diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/ChecksumsCompletePillarEvent.java b/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/ChecksumsCompletePillarEvent.java index 40d47e266..90ede07ab 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/ChecksumsCompletePillarEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getchecksums/conversation/ChecksumsCompletePillarEvent.java @@ -45,7 +45,7 @@ public class ChecksumsCompletePillarEvent extends ContributorCompleteEvent { */ public ChecksumsCompletePillarEvent(String pillarID, String collectionID, ResultingChecksums result, ChecksumSpecTYPE checksumType, boolean isPartialResult) { - super(pillarID, collectionID, null); + super(pillarID, collectionID); this.result = result; this.checksumType = checksumType; this.isPartialResult = isPartialResult; diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getfile/conversation/GettingFile.java b/bitrepository-client/src/main/java/org/bitrepository/access/getfile/conversation/GettingFile.java index d851f29ac..59bd4a63b 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getfile/conversation/GettingFile.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getfile/conversation/GettingFile.java @@ -81,7 +81,7 @@ protected boolean handleFailureResponse(MessageResponse msg) throws UnableToFini @Override protected void generateContributorCompleteEvent(MessageResponse msg) { - getContext().getMonitor().contributorComplete(new ContributorCompleteEvent(msg.getFrom(), msg.getCollectionID(), null)); + getContext().getMonitor().contributorComplete(new ContributorCompleteEvent(msg.getFrom(), msg.getCollectionID())); } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/FileIDsCompletePillarEvent.java b/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/FileIDsCompletePillarEvent.java index 4912ec1c9..0963f3440 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/FileIDsCompletePillarEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getfileids/conversation/FileIDsCompletePillarEvent.java @@ -41,7 +41,7 @@ public class FileIDsCompletePillarEvent extends ContributorCompleteEvent { * @param isPartialResult Indication if the event contains partial results */ public FileIDsCompletePillarEvent(String pillarID, String collectionID, ResultingFileIDs result, boolean isPartialResult) { - super(pillarID, collectionID, null); + super(pillarID, collectionID); this.result = result; this.isPartialResult = isPartialResult; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/access/getstatus/conversation/StatusCompleteContributorEvent.java b/bitrepository-client/src/main/java/org/bitrepository/access/getstatus/conversation/StatusCompleteContributorEvent.java index c890b9621..98cdc2ccb 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/access/getstatus/conversation/StatusCompleteContributorEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/access/getstatus/conversation/StatusCompleteContributorEvent.java @@ -42,7 +42,7 @@ public class StatusCompleteContributorEvent extends ContributorCompleteEvent { * @param status The status for the contributor. */ public StatusCompleteContributorEvent(String contributorID, String collectionID, ResultingStatus status) { - super(contributorID, collectionID, null); + super(contributorID, collectionID); this.status = status; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/DefaultEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/DefaultEvent.java index 7b67a55d5..2b18962fb 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/DefaultEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/DefaultEvent.java @@ -29,7 +29,6 @@ */ public class DefaultEvent extends AbstractOperationEvent { - public DefaultEvent(final OperationEventType type, final String collectionID, final String info) { super(type, collectionID, info); } diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/IdentificationCompleteEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/IdentificationCompleteEvent.java index a9adfed74..c567ef944 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/IdentificationCompleteEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/IdentificationCompleteEvent.java @@ -37,7 +37,7 @@ public class IdentificationCompleteEvent extends AbstractOperationEvent { * @param contributorIDs The list of IDs of the contributor this event relates to. */ public IdentificationCompleteEvent(String collectionID, List contributorIDs) { - super(OperationEventType.IDENTIFICATION_COMPLETE, collectionID, null); + super(OperationEventType.IDENTIFICATION_COMPLETE, collectionID); this.contributorIDs = contributorIDs; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/OperationFailedEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/OperationFailedEvent.java index ad607cbd3..68f74b1d7 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/OperationFailedEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/OperationFailedEvent.java @@ -48,7 +48,6 @@ public OperationFailedEvent(String collectionID, List componen * @param collectionID the collection ID * @param componentResults The aggregated list of COMPONENT_COMPLETE events generated during * the operation. - * @param info See {@link #getInfo()} */ public OperationFailedEvent(String collectionID, List componentResults) { super(OperationEventType.FAILED, collectionID); diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java index f276aa9cc..ad3ba09ab 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java @@ -63,8 +63,8 @@ public static void main(String[] args) { */ protected GetFileCmd(String... args) { super(args); - client = AccessComponentFactory.getInstance().createGetFileClient(settings, securityManager, - settings.getComponentID()); + client = AccessComponentFactory.getInstance().createGetFileClient( + settings, securityManager, settings.getComponentID()); } @Override diff --git a/bitrepository-client/src/main/java/org/bitrepository/modify/deletefile/conversation/DeleteFileCompletePillarEvent.java b/bitrepository-client/src/main/java/org/bitrepository/modify/deletefile/conversation/DeleteFileCompletePillarEvent.java index d1da0565b..c7fd50c82 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/modify/deletefile/conversation/DeleteFileCompletePillarEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/modify/deletefile/conversation/DeleteFileCompletePillarEvent.java @@ -43,7 +43,7 @@ public class DeleteFileCompletePillarEvent extends ContributorCompleteEvent { * @param result The result returned by the pillar. */ public DeleteFileCompletePillarEvent(String pillarID, String collectionID, ChecksumDataForFileTYPE result) { - super(pillarID, collectionID, null); + super(pillarID, collectionID); this.result = result; } diff --git a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PutFileCompletePillarEvent.java b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PutFileCompletePillarEvent.java index fcaabf19c..be0362b22 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PutFileCompletePillarEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PutFileCompletePillarEvent.java @@ -42,7 +42,10 @@ public class PutFileCompletePillarEvent extends ContributorCompleteEvent { * @param result The result returned by the pillar. * @param info */ - public PutFileCompletePillarEvent(String pillarID, String collectionID, ChecksumDataForFileTYPE result, ResponseInfo responseInfo, + public PutFileCompletePillarEvent(String pillarID, + String collectionID, + ChecksumDataForFileTYPE result, + ResponseInfo responseInfo, final String info) { super(pillarID, collectionID, info); this.result = result; diff --git a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java index 53af4e0dc..3cccb69f2 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java +++ b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java @@ -61,13 +61,15 @@ public PuttingFile(PutFileConversationContext context, Collection - + 4.0.0 org.bitrepository.reference @@ -101,6 +100,5 @@ activemq-broker test - diff --git a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsCollectionSize.java b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsCollectionSize.java index 064f49cc9..06a168628 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsCollectionSize.java +++ b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsCollectionSize.java @@ -21,7 +21,6 @@ */ package org.bitrepository.common.webobjects; - import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement diff --git a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsDataSize.java b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsDataSize.java index 58dfc4bbb..ec24028f3 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsDataSize.java +++ b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsDataSize.java @@ -21,7 +21,6 @@ */ package org.bitrepository.common.webobjects; - import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement diff --git a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsPillarSize.java b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsPillarSize.java index cf7289332..9c9e5645d 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsPillarSize.java +++ b/bitrepository-core/src/main/java/org/bitrepository/common/webobjects/StatisticsPillarSize.java @@ -21,7 +21,6 @@ */ package org.bitrepository.common.webobjects; - import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java index 95ba2fdc8..c83258d7d 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java @@ -34,9 +34,6 @@ import jakarta.jms.Session; import jakarta.jms.TextMessage; import jakarta.jms.Topic; - -import java.io.ByteArrayInputStream; - import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory; import org.bitrepository.bitrepositorymessages.Message; import org.bitrepository.bitrepositorymessages.MessageRequest; @@ -68,6 +65,7 @@ import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; +import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.HashMap; @@ -112,7 +110,7 @@ public class ActiveMQMessageBus implements MessageBus { * The session for sending messages. Should not be the same as the consumer session, * as sessions are not thread safe. This also means the session should be used in a synchronized manor. * TODO Switch to use a session pool/producer poll to allow multithreaded message sending, see - * https://sbforge.org/jira/browse/BITMAG-357. + * https://sbforge.org/jira/browse/BITMAG-357. */ private final Session producerSession; @@ -224,13 +222,13 @@ public synchronized void addListener(String destinationID, final MessageListener @Override public synchronized void addListener(String destinationID, final MessageListener listener, boolean durable) { log.debug("Adding {} listener '{}' to destination: '{}' on message-bus '{}'.", (durable ? "durable " : ""), - listener, destinationID, configuration.getName()); + listener, destinationID, configuration.getName()); MessageConsumer consumer = getMessageConsumer(destinationID, listener, durable); try { consumer.setMessageListener(new ActiveMQMessageListener(listener)); } catch (JMSException e) { throw new CoordinationLayerException( - "Unable to add durable listener '" + listener + "' to destinationID '" + destinationID + "'", e); + "Unable to add durable listener '" + listener + "' to destinationID '" + destinationID + "'", e); } } @@ -310,12 +308,8 @@ public void close() throws JMSException { @Override public void sendMessage(Message content) { - sendMessage(content.getDestination(), - content.getReplyTo(), - content.getTo(), - content.getCollectionID(), - content.getCorrelationID(), - content); + sendMessage(content.getDestination(), content.getReplyTo(), content.getTo(), content.getCollectionID(), + content.getCorrelationID(), content); MessageLoggerProvider.getInstance().logMessageSent(content); } @@ -342,7 +336,7 @@ private synchronized void sendMessage(String destinationID, xmlContent = jaxbHelper.serializeToXml(content); jaxbHelper.validate(new ByteArrayInputStream(xmlContent.getBytes(StandardCharsets.UTF_8))); log.trace("The following message is sent to the destination '{}' on message-bus '{}': \n{}", - destinationID, configuration.getName(), xmlContent); + destinationID, configuration.getName(), xmlContent); TextMessage msg = producerSession.createTextMessage(xmlContent); String stringData = msg.getText(); @@ -377,7 +371,7 @@ private synchronized void sendMessage(String destinationID, private MessageConsumer getMessageConsumer(String destinationID, MessageListener listener, boolean durable) { String key = getConsumerHash(destinationID, listener); log.debug("Retrieving message consumer on destination '{}' for listener '{}'. Key: '{}'", - destinationID, listener, key); + destinationID, listener, key); if (!consumers.containsKey(key)) { log.debug("No consumer known. Creating new for key '{}", key); Destination destination = getDestination(destinationID, consumerSession); @@ -389,15 +383,13 @@ private MessageConsumer getMessageConsumer(String destinationID, MessageListener consumer = consumerSession.createDurableSubscriber(topic, clientID); } else { throw new IllegalArgumentException("Can not create durable subscriber on " + destinationID + - " is is not a topic"); + " is is not a topic"); } } else { consumer = consumerSession.createConsumer(destination); } } catch (JMSException e) { - throw new CoordinationLayerException("Could not create message consumer for destination '" + - destination + - '"', e); + throw new CoordinationLayerException("Could not create message consumer for destination '" + destination + '"', e); } consumers.put(key, consumer); } @@ -518,14 +510,14 @@ public void onMessage(final jakarta.jms.Message jmsMessage) { log.trace("Received xml message: '{}'", text); jaxbHelper.validate(new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8))); Message content = (Message) jaxbHelper.loadXml( - Class.forName("org.bitrepository.bitrepositorymessages." + type), - new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8))); + Class.forName("org.bitrepository.bitrepositorymessages." + type), + new ByteArrayInputStream(text.getBytes(StandardCharsets.UTF_8))); log.trace("Checking signature '{}'", signature); SignerId signer = securityManager.authenticateMessage(text, signature); securityManager.authorizeCertificateUse(content.getFrom(), text, signature); if (content instanceof MessageRequest) { securityManager.authorizeOperation(content.getClass().getSimpleName(), text, signature, - content.getCollectionID()); + content.getCollectionID()); } MessageVersionValidator.validateMessageVersion(content); MessageLoggerProvider.getInstance().logMessageReceived(content); diff --git a/bitrepository-core/src/test/java/org/bitrepository/ExtendedTestInfoParameterResolver.java b/bitrepository-core/src/test/java/org/bitrepository/ExtendedTestInfoParameterResolver.java index 1f67b9971..09993512b 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/ExtendedTestInfoParameterResolver.java +++ b/bitrepository-core/src/test/java/org/bitrepository/ExtendedTestInfoParameterResolver.java @@ -10,36 +10,26 @@ import java.util.Optional; import java.util.Set; - -/** - * A JUnit Jupiter parameter resolver that injects {@link SuiteInfo} instances into test methods. - * This resolver supports parameters explicitly declared as {@code SuiteInfo} and provides an implementation - * that exposes standard test metadata along with a custom {@code pillarType} configuration value retrieved - * from the extension context. It serves as an extended variant of the base suite info resolver by including - * additional configuration data in the resolved object. - */ public class ExtendedTestInfoParameterResolver implements ParameterResolver { - + @Override - public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws - ParameterResolutionException { + public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { return (parameterContext.getParameter().getType() == SuiteInfo.class); } - + @Override - public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws - ParameterResolutionException { + public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { return new ExtendedTestInfo(extensionContext); } - + private static class ExtendedTestInfo implements SuiteInfo { - + private final String displayName; private final Set tags; private final Class testClass; private final Method testMethod; private final String pillarType; - + ExtendedTestInfo(ExtensionContext extensionContext) { this.displayName = extensionContext.getDisplayName(); this.tags = extensionContext.getTags(); @@ -47,41 +37,41 @@ private static class ExtendedTestInfo implements SuiteInfo { this.testMethod = extensionContext.getTestMethod().orElse(null); this.pillarType = extensionContext.getConfigurationParameter("pillarType").orElse(null); } - + @Override public String getDisplayName() { return this.displayName; } - + @Override public Set getTags() { return this.tags; } - + @Override public Optional> getTestClass() { return Optional.ofNullable(this.testClass); } - + @Override public Optional getTestMethod() { return Optional.ofNullable(this.testMethod); } - + @Override public Optional getPillarType() { return Optional.ofNullable(pillarType); } - + @Override public String toString() { return new ToStringBuilder(this) - .append("displayName", this.displayName) - .append("tags", this.tags) - .append("testClass", this.testClass) - .append("testMethod", this.testMethod) - .toString(); + .append("displayName", this.displayName) + .append("tags", this.tags) + .append("testClass", this.testClass) + .append("testMethod", this.testMethod) + .toString(); } } - + } \ No newline at end of file diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java index 1d49499b5..9e1ea13f0 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/IntegrationTest.java @@ -162,7 +162,7 @@ protected void setupMessageBus() { } } } - + /** * Returns the postfix string to use when accessing user specific topics, which is the mechanism we use in the * bit repository tests. @@ -172,21 +172,21 @@ protected void setupMessageBus() { protected String getTopicPostfix() { return "-" + System.getProperty("user.name"); } - + /** * Indicated whether an embedded active MQ should be started and used */ public boolean useEmbeddedMessageBus() { return System.getProperty("useEmbeddedMessageBus", "true").equals("true"); } - + @BeforeEach public void logTestStart(TestInfo testInfo) { Class aClass = testInfo.getTestClass().orElse(null); String displayName = testInfo.getDisplayName(); System.out.println("Running Integration Test " + aClass + "#" + displayName); } - + /** * Defines the standard BitRepositoryCollection configuration */ @@ -204,7 +204,7 @@ public void beforeMethod(TestInfo testInfo) { receiverManager.startListeners(); appender = hookLogger(); } - + /** * Initializes the settings. Will postfix the alarm and collection topics with '-${user.name} */ @@ -218,7 +218,7 @@ protected void setupSettings() { settingsForTestClient = loadSettings(testMethodName); makeUserSpecificSettings(settingsForTestClient); } - + /** * May be extended by subclasses needing to have their receivers managed. Remember to still call * super.registerReceivers() when overriding @@ -229,7 +229,7 @@ protected void registerMessageReceivers() { protected void initializeCUT() { } - + private static ListAppender hookLogger() { // get Logback Logger var fooLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); @@ -237,8 +237,7 @@ private static ListAppender hookLogger() { // create and start a ListAppender ListAppender listAppender = new ListAppender<>(); listAppender.start(); - - + //Save the appenders and detach them appenders = new ArrayList<>(); Iterator> iterator = fooLogger.iteratorForAppenders(); @@ -251,12 +250,12 @@ private static ListAppender hookLogger() { fooLogger.addAppender(listAppender); return listAppender; } - + protected MessageReceiver addReceiver(MessageReceiver receiver) { receiverManager.addReceiver(receiver); return receiver; } - + @BeforeEach public void writeLogStatus() { if (System.getProperty("enableLogStatus", "false").equals("true")) { @@ -278,7 +277,7 @@ public final void afterMethod() { replayLoggedEvents(); } } - + /** * May be used by specific tests for general verification when the test method has finished. Will only be run * if the test has passed (so far). @@ -286,13 +285,13 @@ public final void afterMethod() { protected void afterMethodVerification() { receiverManager.checkNoMessagesRemainInReceivers(); } - + /** * May be overridden by specific tests wishing to do stuff. Remember to call super if this is overridden. */ protected void shutdownCUT() { } - + private void replayLoggedEvents() { for (ILoggingEvent loggingEvent : appender.list) { for (Appender appender : appenders) { @@ -300,13 +299,13 @@ private void replayLoggedEvents() { } } } - + @AfterAll public void shutdownSuite() { teardownMessageBus(); teardownHttpServer(); } - + /** * Shutdown the message bus. */ @@ -324,7 +323,7 @@ protected void teardownMessageBus() { } } - + /** * Shutdown the embedded http server if any. */ @@ -333,21 +332,21 @@ protected void teardownHttpServer() { server.stop(); } } - + /** * Indicated whether an embedded http server should be started and used */ public boolean useEmbeddedHttpServer() { return System.getProperty("useEmbeddedHttpServer", "false").equals("true"); } - + /** * Purges all messages from the receivers. */ protected void clearReceivers() { receiverManager.clearMessagesInReceivers(); } - + protected String createDate() { return Long.toString(System.currentTimeMillis()); } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageCreationTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageCreationTest.java index 51198039d..93718c708 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageCreationTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/MessageCreationTest.java @@ -24,8 +24,6 @@ */ package org.bitrepository.protocol; -import java.io.ByteArrayInputStream; - import jakarta.xml.bind.JAXBException; import org.apache.commons.io.IOUtils; import org.bitrepository.bitrepositorymessages.AlarmMessage; @@ -44,6 +42,7 @@ import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathFactory; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; diff --git a/bitrepository-integrity-service/pom.xml b/bitrepository-integrity-service/pom.xml index 01082ac55..c3abf6c0a 100644 --- a/bitrepository-integrity-service/pom.xml +++ b/bitrepository-integrity-service/pom.xml @@ -1,5 +1,4 @@ - + org.bitrepository.reference bitrepository-parent diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAOUtils.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAOUtils.java index 28761b585..709a6163d 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAOUtils.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/cache/database/IntegrityDAOUtils.java @@ -44,7 +44,8 @@ public List retrieveCollectionsInDatabase() { return DatabaseUtils.selectStringList(dbConnector, selectSql); } - @Override public void close() { + @Override + public void close() { dbConnector.destroy(); } } diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/IntegrityServiceRestApplication.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/IntegrityServiceRestApplication.java index 205b4b155..d9307f0e8 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/IntegrityServiceRestApplication.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/IntegrityServiceRestApplication.java @@ -11,8 +11,6 @@ public class IntegrityServiceRestApplication extends Application { @Override public Set> getClasses() { - return new HashSet<>(Arrays.asList(JacksonJsonProvider.class, - RestIntegrityService.class, - RestStatisticsService.class)); + return new HashSet<>(Arrays.asList(JacksonJsonProvider.class, RestIntegrityService.class, RestStatisticsService.class)); } } diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestIntegrityService.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestIntegrityService.java index 4f2fab51d..67dd0ad29 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestIntegrityService.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestIntegrityService.java @@ -26,6 +26,18 @@ import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.FormParam; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import org.bitrepository.common.utils.FileSizeUtils; import org.bitrepository.common.utils.SettingsUtils; import org.bitrepository.common.utils.TimeUtils; @@ -47,19 +59,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import jakarta.ws.rs.Consumes; -import jakarta.ws.rs.DefaultValue; -import jakarta.ws.rs.FormParam; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.POST; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; -import jakarta.ws.rs.WebApplicationException; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; -import jakarta.ws.rs.core.StreamingOutput; - import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -123,13 +122,14 @@ public HashMap> getTotalFileIDs(@QueryParam("collectionID") List iteratorAsList = StreamingTools.iteratorToList(it); if (iteratorAsList.isEmpty()) { - throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND) - .entity( - String.format(Locale.ROOT, - "No fileIDs found for collection: '%s' and pillar: '%s'", - collectionID, - pillarID)).type(MediaType.TEXT_PLAIN) - .build()); + throw new WebApplicationException( + Response.status(Response.Status.NOT_FOUND) + .entity(String.format(Locale.ROOT, + "No fileIDs found for collection: '%s' and pillar: '%s'", + collectionID, + pillarID)) + .type(MediaType.TEXT_PLAIN) + .build()); } return new HashMap<>(Map.of(pillarID, iteratorAsList)); @@ -154,20 +154,21 @@ public HashMap> getMissingFileIDs(@QueryParam("collectionID List missingOnOtherPillar; List otherPillars = SettingsUtils.getPillarIDsForCollection(collectionID).stream().filter( - pillar -> !pillar.equals(pillarID)).collect(Collectors.toList()); + pillar -> !pillar.equals(pillarID)).collect(Collectors.toList()); try { missingOnPillar = getReportPart(part, collectionID, pillarID, page, pageSize); output.put(pillarID, missingOnPillar); } catch (FileNotFoundException e) { - throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND) - .entity(String.format(Locale.ROOT, - "No integrity '%s' report part for collection: '%s' and pillar: '%s' found!", - part.getHumanString(), - collectionID, - pillarID)) - .type(MediaType.TEXT_PLAIN) - .build()); + throw new WebApplicationException( + Response.status(Response.Status.NOT_FOUND) + .entity(String.format(Locale.ROOT, + "No integrity '%s' report part for collection: '%s' and pillar: '%s' found!", + part.getHumanString(), + collectionID, + pillarID)) + .type(MediaType.TEXT_PLAIN) + .build()); } for (String otherPillar : otherPillars) { @@ -191,10 +192,9 @@ public HashMap> getMissingFileIDs(@QueryParam("collectionID public HashMap> getMissingChecksums(@QueryParam("collectionID") String collectionID, @QueryParam("pillarID") String pillarID, @QueryParam("page") int page, - @DefaultValue("100") @QueryParam("pageSize") - int pageSize) { + @DefaultValue("100") @QueryParam("pageSize") int pageSize) { List streamingOutput = getReportPartForPillar(ReportPart.MISSING_CHECKSUM, collectionID, pillarID, page, - pageSize); + pageSize); return new HashMap<>(Map.of(pillarID, streamingOutput)); } @@ -211,10 +211,9 @@ public HashMap> getMissingChecksums(@QueryParam("collection public HashMap> geObsoleteChecksums(@QueryParam("collectionID") String collectionID, @QueryParam("pillarID") String pillarID, @QueryParam("page") int page, - @DefaultValue("100") @QueryParam("pageSize") - int pageSize) { + @DefaultValue("100") @QueryParam("pageSize") int pageSize) { List streamingOutput = getReportPartForPillar(ReportPart.OBSOLETE_CHECKSUM, collectionID, pillarID, - page, pageSize); + page, pageSize); return new HashMap<>(Map.of(pillarID, streamingOutput)); } @@ -233,7 +232,7 @@ public HashMap> getChecksumErrors(@QueryParam("collectionID @QueryParam("page") int page, @DefaultValue("100") @QueryParam("pageSize") int pageSize) { List streamingOutput = getReportPartForPillar(ReportPart.CHECKSUM_ERROR, collectionID, pillarID, page, - pageSize); + pageSize); return new HashMap<>(Map.of(pillarID, streamingOutput)); } @@ -259,20 +258,8 @@ public String getIntegrityStatus(@QueryParam("collectionID") String collectionID String pillarName = Objects.requireNonNullElse(SettingsUtils.getPillarName(pillar), "N/A"); PillarType pillarTypeObject = SettingsUtils.getPillarType(pillar); String pillarType = pillarTypeObject != null ? pillarTypeObject.value() : null; - PillarCollectionStat emptyStat = new PillarCollectionStat(pillar, - collectionID, - pillarName, - pillarType, - 0L, - 0L, - 0L, - 0L, - 0L, - 0L, - "", - null, - Instant.EPOCH, - Instant.EPOCH); + PillarCollectionStat emptyStat = new PillarCollectionStat(pillar, collectionID, pillarName, pillarType, + 0L, 0L, 0L, 0L, 0L, 0L, "", null, Instant.EPOCH, Instant.EPOCH); stats.put(pillar, emptyStat); } } @@ -293,10 +280,8 @@ public List getPillarDetails() { List pillarDetails = SettingsUtils.getPillarIntegrityDetails(); List result = new ArrayList<>(pillarDetails.size()); for (PillarIntegrityDetails.PillarDetails details : pillarDetails) { - PillarDetailsDto detailsDTO = new PillarDetailsDto(details.getPillarID(), - details.getPillarName(), - details.getPillarType().value(), - details.getPillarDeleteFileApprover()); + PillarDetailsDto detailsDTO = new PillarDetailsDto(details.getPillarID(), details.getPillarName(), + details.getPillarType().value(), details.getPillarDeleteFileApprover()); result.add(detailsDTO); } return result; @@ -385,9 +370,13 @@ public StreamingOutput getLatestIntegrityReport(@QueryParam("collectionID") Stri try { fullReport = integrityReportProvider.getLatestIntegrityReportReader(collectionID).getFullReport(); } catch (FileNotFoundException e) { - throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).entity( - String.format(Locale.ROOT, "No integrity report for collection: '%s' found!", collectionID)).type( - MediaType.TEXT_PLAIN).build()); + throw new WebApplicationException( + Response.status(Response.Status.NOT_FOUND) + .entity(String.format(Locale.ROOT, + "No integrity report for collection: '%s' found!", + collectionID)) + .type(MediaType.TEXT_PLAIN) + .build()); } return output -> streamFile(fullReport, output); } @@ -450,10 +439,8 @@ public File getLatestIntegrityReportPartFile(String collectionID, String reportP reportPartFile = integrityReportProvider.getIntegrityReportPart(collectionID, pillarID, reportPart); } catch (FileNotFoundException e) { String errorMessage = String.format(Locale.ROOT, - "No '%s' report part for collection: '%s' and pillar: '%s' found!", - reportPart, - collectionID, - pillarID); + "No '%s' report part for collection: '%s' and pillar: '%s' found!", reportPart, collectionID, + pillarID); log.error(errorMessage); throw new WebApplicationException( Response.status(Response.Status.NOT_FOUND).entity(errorMessage).type(MediaType.TEXT_PLAIN).build()); @@ -517,7 +504,7 @@ public String getCollectionInformation(@QueryParam("collectionID") String collec * @throws FileNotFoundException If there is no integrity report for the given {@link ReportPart}. */ private List getReportPart(ReportPart part, String collectionID, String pillarID, int page, int pageSize) - throws FileNotFoundException { + throws FileNotFoundException { List reportPartContent; int offset = getOffset(page, pageSize); @@ -540,14 +527,15 @@ private List getReportPartForPillar(ReportPart part, String collectionID try { reportPartContent = getReportPart(part, collectionID, pillarID, page, pageSize); } catch (FileNotFoundException e) { - throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND) - .entity(String.format(Locale.ROOT, - "No integrity '%s' report part for collection: '%s' and pillar: '%s' found!", - part.getHumanString(), - collectionID, - pillarID)) - .type(MediaType.TEXT_PLAIN) - .build()); + throw new WebApplicationException( + Response.status(Response.Status.NOT_FOUND) + .entity(String.format(Locale.ROOT, + "No integrity '%s' report part for collection: '%s' and pillar: '%s' found!", + part.getHumanString(), + collectionID, + pillarID)) + .type(MediaType.TEXT_PLAIN) + .build()); } return reportPartContent; } @@ -568,7 +556,7 @@ private List compareMissingFiles(List missingOnPillar, String co List agreedMissingFileIDs = new ArrayList<>(); try { List filesMissingOnPillar = getReportPart(ReportPart.MISSING_FILE, collectionID, pillar, 1, - Integer.MAX_VALUE); + Integer.MAX_VALUE); for (String missingFileID : missingOnPillar) { if (Collections.binarySearch(filesMissingOnPillar, missingFileID) >= 0) { agreedMissingFileIDs.add(missingFileID); diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestStatisticsService.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestStatisticsService.java index 797acd1fa..611f371e6 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestStatisticsService.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/RestStatisticsService.java @@ -21,6 +21,12 @@ */ package org.bitrepository.integrityservice.web; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; import org.bitrepository.common.utils.FileSizeUtils; import org.bitrepository.common.utils.SettingsUtils; import org.bitrepository.common.utils.TimeUtils; @@ -32,12 +38,6 @@ import org.bitrepository.integrityservice.cache.IntegrityModel; import org.bitrepository.integrityservice.cache.PillarCollectionStat; -import jakarta.ws.rs.DefaultValue; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; -import jakarta.ws.rs.core.MediaType; import java.time.Instant; import java.util.ArrayList; import java.util.HashMap; diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/StreamingTools.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/StreamingTools.java index e6a04afcb..27c57a8db 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/StreamingTools.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/web/StreamingTools.java @@ -24,12 +24,12 @@ import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonGenerator; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.StreamingOutput; import org.bitrepository.integrityservice.cache.database.IntegrityIssueIterator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import jakarta.ws.rs.WebApplicationException; -import jakarta.ws.rs.core.StreamingOutput; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleMissingFilesStep.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleMissingFilesStep.java index e121be7d5..5f4399680 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleMissingFilesStep.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleMissingFilesStep.java @@ -88,7 +88,7 @@ public synchronized void performStep() throws StepFailedException { String missingFile; while ((missingFile = issueIterator.getNextIntegrityIssue()) != null) { - var earliestDate = store.getEarliestFileInstant(reporter.getCollectionID(), missingFile); + Instant earliestDate = store.getEarliestFileInstant(reporter.getCollectionID(), missingFile); if (earliestDate.isBefore(missingAfterInstant)) { try { Set pillarsWithFile = getPillarsWithFile(missingFile, reporter.getCollectionID()); diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleObsoleteChecksumsStep.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleObsoleteChecksumsStep.java index 9ef29fafe..6c7abb37f 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleObsoleteChecksumsStep.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/HandleObsoleteChecksumsStep.java @@ -85,7 +85,7 @@ public synchronized void performStep() throws StepFailedException { " (i.e., checksums don't expire).", pillar); continue; } else { - var outdated = Instant.now().minus(maxAge); + Instant outdated = Instant.now().minus(maxAge); try (IntegrityIssueIterator obsoleteChecksumsIterator = store.findChecksumsOlderThan(outdated, pillar, reporter.getCollectionID())) { String file; diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStep.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStep.java index d5af1f65c..11d5e01f5 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStep.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStep.java @@ -39,6 +39,7 @@ import org.slf4j.LoggerFactory; import java.time.Duration; +import java.time.Instant; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -155,7 +156,7 @@ private void handleFailureEvent(OperationEvent event) throws WorkflowAbortedExce private ContributorQuery[] getQueries(Collection pillars) { List res = new ArrayList<>(); for (String pillar : pillars) { - var latestChecksumEntry = store.getDateForNewestChecksumEntryForPillarInstant(pillar, collectionID); + Instant latestChecksumEntry = store.getDateForNewestChecksumEntryForPillarInstant(pillar, collectionID); res.add(new ContributorQuery(pillar, latestChecksumEntry, null, maxNumberOfResultsPerConversation)); } diff --git a/bitrepository-integrity-service/src/main/scripts/create_derby_databases.sh b/bitrepository-integrity-service/src/main/scripts/create_derby_databases.sh index a93f90ec0..897ce24b5 100755 --- a/bitrepository-integrity-service/src/main/scripts/create_derby_databases.sh +++ b/bitrepository-integrity-service/src/main/scripts/create_derby_databases.sh @@ -5,7 +5,7 @@ SCRIPT_DIR="$(dirname "$(readlink -f -- "${BASH_SOURCE[0]}")")" set -o errexit set -o pipefail set -o nounset -set -o xtrace +#set -o xtrace ### @@ -43,7 +43,6 @@ unzip -o -qq *.war echo "Creating integrity database." $JAVA $CLASSPATH "org.bitrepository.integrityservice.cache.database.IntegrityDatabaseCreator" "$CONFDIR" "$INTEGRITY_DB_SCRIPT" - echo "Creating audit database." $JAVA $CLASSPATH "org.bitrepository.integrityservice.audittrail.IntegrityAuditTrailDatabaseCreator" "$CONFDIR" "$AUDIT_CONTRIBUTOR_DB_SCRIPT" diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java index 55cd738bc..f2e5a9c3f 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java @@ -89,9 +89,7 @@ public void beforeEach() { } public void clearDatabase() { - DBConnector connector = new DBConnector(settings.getReferenceSettings() - .getIntegrityServiceSettings() - .getIntegrityDatabase()); + DBConnector connector = new DBConnector(settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase()); DatabaseUtils.executeStatement(connector, "DELETE FROM fileinfo"); DatabaseUtils.executeStatement(connector, "DELETE FROM collection_progress"); DatabaseUtils.executeStatement(connector, "DELETE FROM pillarstats"); @@ -103,31 +101,27 @@ public void clearDatabase() { /** * Inserts the checksumdata, but ensures that the data can be inserted, by inserting the file-id-data before. - * - * @param cache The integrity cache. - * @param csData The checksum data. - * @param pillarID The id of the pillar. + * @param cache The integrity cache. + * @param csData The checksum data. + * @param pillarID The id of the pillar. * @param collectionID The id of the collection. */ protected void insertChecksumDataForModel(IntegrityModel cache, List csData, - String pillarID, String collectionID) { + String pillarID, String collectionID) { insertMissingFilesInChecksumDataForModel(cache, csData, pillarID, collectionID); cache.addChecksums(csData, pillarID, collectionID); } /** * Converts a piece of checksum data into file id data. - * * @param csData The checksum data to convert. */ - protected void insertMissingFilesInChecksumDataForModel(IntegrityModel cache, - List csData, - String pillarID, - String collectionID) { + protected void insertMissingFilesInChecksumDataForModel(IntegrityModel cache, List csData, + String pillarID, String collectionID) { FileIDsData res = new FileIDsData(); FileIDsDataItems items = new FileIDsDataItems(); - for (ChecksumDataForChecksumSpecTYPE entry : csData) { + for(ChecksumDataForChecksumSpecTYPE entry : csData) { FileIDsDataItem dataItem = new FileIDsDataItem(); dataItem.setFileID(entry.getFileID()); dataItem.setFileSize(BigInteger.ZERO); @@ -143,9 +137,7 @@ protected void insertMissingFilesInChecksumDataForModel(IntegrityModel cache, * Method to modify the by constructor loaded settings. * Default implementation does nothing, so override to change behavior. */ - protected void customizeSettings() throws DatatypeConfigurationException { - } - + protected void customizeSettings() throws DatatypeConfigurationException { } protected IntegrityDAO createDAO() { DatabaseSpecifics integrityDatabase = settings.getReferenceSettings() diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java index 45bd59633..67035775c 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java @@ -32,12 +32,9 @@ import org.bitrepository.common.utils.Base16Utils; import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.integrityservice.IntegrityDatabaseTestCase; -import org.bitrepository.integrityservice.cache.database.DerbyIntegrityDAO; import org.bitrepository.integrityservice.cache.database.IntegrityDAO; import org.bitrepository.integrityservice.cache.database.IntegrityIssueIterator; -import org.bitrepository.integrityservice.cache.database.PostgresIntegrityDAO; import org.bitrepository.service.database.DatabaseManager; -import org.bitrepository.settings.referencesettings.DatabaseSpecifics; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java index 2fff6fbbe..edd86751e 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java @@ -55,7 +55,6 @@ import org.bitrepository.pillar.integration.PostgresFixedPortContainer; import org.bitrepository.service.database.DBConnector; import org.bitrepository.service.database.DatabaseUtils; -import org.bitrepository.service.database.DerbyDatabaseDestroyer; import org.bitrepository.service.exception.WorkflowAbortedException; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; @@ -70,7 +69,6 @@ import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.postgresql.PostgreSQLContainer; -import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; import javax.xml.datatype.XMLGregorianCalendar; @@ -121,7 +119,6 @@ public void beforeAll() throws Exception { @BeforeEach public void beforeEach() throws Exception { - clearDatabase(); IntegrityDatabaseCreator integrityDatabaseCreator = new IntegrityDatabaseCreator(); integrityDatabaseCreator.createIntegrityDatabase(settings, "sql/postgres/integrityDBCreation.sql", "sql/postgres/integrityDB7to8migration.sql"); diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java index efa01c82b..0f770d5c6 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/stresstest/DatabaseStressTests.java @@ -135,7 +135,6 @@ protected void populateDatabase(IntegrityDAO cache) { cache.updateFileIDs(data, PILLAR_4, collectionID); } - @Test @Tag("stresstest") @Tag("integritytest") diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java index 80f6b20e6..495a034ba 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java @@ -66,7 +66,7 @@ public class UpdateChecksumsStepTest extends WorkflowstepTest { public static final String TEST_PILLAR_1 = "test-pillar-1"; public static final String TEST_FILE_1 = "test-file-1"; public static final String DEFAULT_CHECKSUM = "0123456789"; - + @Test @Tag("regressiontest") void testPositiveReply() throws WorkflowAbortedException { @@ -76,54 +76,42 @@ void testPositiveReply() throws WorkflowAbortedException { eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, - model, - alerter, - createChecksumSpecTYPE(), - settings, - TEST_COLLECTION, - integrityContributors); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), + settings, TEST_COLLECTION, integrityContributors); step.performStep(); verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), - any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); verifyNoMoreInteractions(alerter); } - + @Test @Tag("regressiontest") void testAbortWorkflowWhenNegativeReply() { addDescription("Test the step for updating the checksums will abort the workflow in case " - + "of FAILURE operation event and AbortOnFailedContributor = true ."); + + "of FAILURE operation event and AbortOnFailedContributor = true ."); doAnswer(invocation -> { EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); - eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, - TEST_COLLECTION, - ResponseCode.FAILURE)); + eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Problem encountered")); return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>()); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>()); when(integrityContributors.getFailedContributors()).thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))); - + settings.getReferenceSettings().getIntegrityServiceSettings().setAbortOnFailedContributor(true); - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, - model, - alerter, - createChecksumSpecTYPE(), - settings, - TEST_COLLECTION, - integrityContributors); + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), + settings, TEST_COLLECTION, integrityContributors); try { step.performStep(); Assertions.fail("The step should have thrown an WorkflowAbortedException"); @@ -131,108 +119,88 @@ void testAbortWorkflowWhenNegativeReply() { // nothing to do here } verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); verify(integrityContributors).failContributor(eq(TEST_PILLAR_1)); verify(alerter).integrityFailed(anyString(), eq(TEST_COLLECTION)); } - + @Test @Tag("regressiontest") void testRetryCollectionWhenNegativeReply() throws WorkflowAbortedException { addDescription("Test the step for updating the file ids will retry on a FAILED event"); - + final ResultingChecksums resultingChecksums = createResultingChecksums(DEFAULT_CHECKSUM, TEST_FILE_1); doAnswer(new Answer() { boolean firstAnswer = true; - + public Void answer(InvocationOnMock invocation) { EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); if (firstAnswer) { firstAnswer = false; - eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, - TEST_COLLECTION, - ResponseCode.FAILURE)); + eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Problem encountered")); } else { eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); - eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, - TEST_COLLECTION, - resultingChecksums, - createChecksumSpecTYPE(), - false)); + eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, TEST_COLLECTION, + resultingChecksums, createChecksumSpecTYPE(), false)); eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); } return null; } }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>()); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>()); when(integrityContributors.getFailedContributors()).thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, - model, - alerter, - createChecksumSpecTYPE(), - settings, - TEST_COLLECTION, - integrityContributors); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), + settings, TEST_COLLECTION, integrityContributors); step.performStep(); - verify(collector, times(2)).getChecksums(eq(TEST_COLLECTION), - any(), - any(ChecksumSpecTYPE.class), - any(), - anyString(), - any(ContributorQuery[].class), - any(EventHandler.class)); + verify(collector, times(2)).getChecksums(eq(TEST_COLLECTION), any(), + any(ChecksumSpecTYPE.class), any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); verify(model).addChecksums(resultingChecksums.getChecksumDataItems(), TEST_PILLAR_1, TEST_COLLECTION); verifyNoMoreInteractions(alerter); verify(integrityContributors).failContributor(eq(TEST_PILLAR_1)); verify(integrityContributors).finishContributor(eq(TEST_PILLAR_1)); - + } - + @Test @Tag("regressiontest") void testContinueWorkflowNegativeReply() throws WorkflowAbortedException { addDescription("Test the step for updating the checksums will continue the workflow in case " - + "of FAILURE operation event and AbortOnFailedContributor = false ."); - doAnswer(invocation -> { - EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); - eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, - TEST_COLLECTION, - ResponseCode.FAILURE)); - eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Problem encountered")); - return null; + + "of FAILURE operation event and AbortOnFailedContributor = false ."); + doAnswer(new Answer() { + public Void answer(InvocationOnMock invocation) { + EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); + eventHandler.handleEvent(new ContributorFailedEvent(TEST_PILLAR_1, TEST_COLLECTION, ResponseCode.FAILURE)); + eventHandler.handleEvent(new OperationFailedEvent(TEST_COLLECTION, null, "Problem encountered")); + return null; + } }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>()); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>()); when(integrityContributors.getFailedContributors()).thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))); - + settings.getReferenceSettings().getIntegrityServiceSettings().setAbortOnFailedContributor(false); - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, - model, - alerter, - createChecksumSpecTYPE(), - settings, - TEST_COLLECTION, - integrityContributors); + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), + settings, TEST_COLLECTION, integrityContributors); step.performStep(); - + verify(integrityContributors).failContributor(eq(TEST_PILLAR_1)); verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); verify(alerter).integrityFailed(anyString(), eq(TEST_COLLECTION)); } - + @Test @Tag("regressiontest") void testIngestOfResults() throws WorkflowAbortedException { @@ -241,41 +209,28 @@ void testIngestOfResults() throws WorkflowAbortedException { doAnswer(invocation -> { EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); - eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, - TEST_COLLECTION, - resultingChecksums, - createChecksumSpecTYPE(), - false)); + eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, TEST_COLLECTION, + resultingChecksums, createChecksumSpecTYPE(), false)); eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, - model, - alerter, - createChecksumSpecTYPE(), - settings, - TEST_COLLECTION, - integrityContributors); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), + settings, TEST_COLLECTION, integrityContributors); step.performStep(); - verify(collector).getChecksums(eq(TEST_COLLECTION), - any(), - any(ChecksumSpecTYPE.class), - any(), - anyString(), - any(ContributorQuery[].class), - any(EventHandler.class)); + verify(collector).getChecksums(eq(TEST_COLLECTION), any(), + any(ChecksumSpecTYPE.class), any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); verify(model).addChecksums(resultingChecksums.getChecksumDataItems(), TEST_PILLAR_1, TEST_COLLECTION); verifyNoMoreInteractions(alerter); } - + @Test @Tag("regressiontest") void testCallForChangingChecksumStates() throws WorkflowAbortedException { @@ -284,197 +239,150 @@ void testCallForChangingChecksumStates() throws WorkflowAbortedException { doAnswer(invocation -> { EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); - eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, - TEST_COLLECTION, - resultingChecksums, - createChecksumSpecTYPE(), - false)); + eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, TEST_COLLECTION, + resultingChecksums, createChecksumSpecTYPE(), false)); eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + UpdateChecksumsStep step = new FullUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + settings, TEST_COLLECTION, integrityContributors); step.performStep(); - verify(collector).getChecksums(eq(TEST_COLLECTION), - any(), - any(ChecksumSpecTYPE.class), - any(), - anyString(), - any(ContributorQuery[].class), - any(EventHandler.class)); + verify(collector).getChecksums(eq(TEST_COLLECTION), any(), + any(ChecksumSpecTYPE.class), any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); verify(model).resetChecksumCollectionProgress(TEST_COLLECTION); verify(model).addChecksums(resultingChecksums.getChecksumDataItems(), TEST_PILLAR_1, TEST_COLLECTION); verifyNoMoreInteractions(alerter); } - + @Test @Tag("regressiontest") void testPartialResults() throws WorkflowAbortedException { addDescription("Test that the number of partial is used for generating more than one request."); final ResultingChecksums resultingChecksums = createResultingChecksums(DEFAULT_CHECKSUM, TEST_FILE_1); - + addStep("Setup the collector mock to generate a isPartialResult=true event the first time and a " + - "isPartialResult=false the second time", + "isPartialResult=false the second time", "The collectors getFileIDs should be called 2 time. The same goes for the 'models' addFileIDs"); doAnswer(new Answer() { boolean firstPage = true; - + public Void answer(InvocationOnMock invocation) { - EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); + EventHandler eventHandler = (EventHandler) invocation.getArguments()[6]; eventHandler.handleEvent(new IdentificationCompleteEvent(TEST_COLLECTION, List.of(TEST_PILLAR_1))); - eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, - TEST_COLLECTION, - resultingChecksums, - createChecksumSpecTYPE(), - firstPage)); + eventHandler.handleEvent(new ChecksumsCompletePillarEvent(TEST_PILLAR_1, TEST_COLLECTION, + resultingChecksums, createChecksumSpecTYPE(), firstPage)); firstPage = false; eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); return null; } }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) - .thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, - model, - alerter, - createChecksumSpecTYPE(), - settings, - TEST_COLLECTION, - integrityContributors); - + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))) + .thenReturn(new HashSet<>()); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), + settings, TEST_COLLECTION, integrityContributors); + step.performStep(); verify(model, times(2)).addChecksums(resultingChecksums.getChecksumDataItems(), - TEST_PILLAR_1, TEST_COLLECTION); - verify(collector, times(2)).getChecksums(eq(TEST_COLLECTION), - any(), - any(ChecksumSpecTYPE.class), - any(), - anyString(), - any(ContributorQuery[].class), - any(EventHandler.class)); + TEST_PILLAR_1, TEST_COLLECTION); + verify(collector, times(2)).getChecksums(eq(TEST_COLLECTION), any(), + any(ChecksumSpecTYPE.class), any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); } - + @Test @Tag("regressiontest") void testFullChecksumCollection() throws WorkflowAbortedException { addDescription("Test that the full list of checksums is requested."); - + doAnswer(invocation -> { invocation.getArgument(6, EventHandler.class).handleEvent(new CompleteEvent(TEST_COLLECTION, null)); return null; - }).when(collector) - .getChecksums( - eq(TEST_COLLECTION), - any(), - any(ChecksumSpecTYPE.class), - any(), - anyString(), - any(ContributorQuery[].class), - any(EventHandler.class)); - + }).when(collector).getChecksums( + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(model.getDateForNewestChecksumEntryForPillarInstant(anyString(), anyString())).thenReturn(Instant.EPOCH); when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + UpdateChecksumsStep step = new FullUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), - settings, TEST_COLLECTION, integrityContributors); + settings, TEST_COLLECTION, integrityContributors); step.performStep(); - - List pillarID = settings.getRepositorySettings() - .getCollections() - .getCollection() - .getFirst() - .getPillarIDs() - .getPillarID(); - ContributorQuery[] expectedContributorQueries = makeFullQueries(pillarID); - - verify(collector).getChecksums( - eq(TEST_COLLECTION), - any(), - any(ChecksumSpecTYPE.class), - any(), - anyString(), - eq(expectedContributorQueries), - any(EventHandler.class)); + + ContributorQuery[] expectedContributorQueries = + makeFullQueries(settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID()); + + verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), + any(), anyString(), eq(expectedContributorQueries), any(EventHandler.class)); verifyNoMoreInteractions(alerter); } - + @Test @Tag("regressiontest") void testIncrementalChecksumCollection() throws WorkflowAbortedException { addDescription("Test that only the list of new checksums is requested."); - + doAnswer(invocation -> { EventHandler eventHandler = invocation.getArgument(6, EventHandler.class); eventHandler.handleEvent(new CompleteEvent(TEST_COLLECTION, null)); return null; }).when(collector).getChecksums( - eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), - anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - + eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), + anyString(), any(ContributorQuery[].class), any(EventHandler.class)); + when(integrityContributors.getActiveContributors()) - .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); - - UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, - model, - alerter, - createChecksumSpecTYPE(), - settings, - TEST_COLLECTION, - integrityContributors); + .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); + + UpdateChecksumsStep step = new IncrementalUpdateChecksumsStep(collector, model, alerter, createChecksumSpecTYPE(), + settings, TEST_COLLECTION, integrityContributors); step.performStep(); - + ContributorQuery[] expectedContributorQueries = - makeQueries(settings.getRepositorySettings() - .getCollections() - .getCollection() - .getFirst() - .getPillarIDs() - .getPillarID(), model); - + makeQueries(settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID(), model); + verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), - any(), anyString(), eq(expectedContributorQueries), any(EventHandler.class)); + any(), anyString(), eq(expectedContributorQueries), any(EventHandler.class)); verifyNoMoreInteractions(alerter); } - + private ContributorQuery[] makeFullQueries(List pillars) { List res = new ArrayList<>(); for (String pillar : pillars) { Instant latestChecksumDate = Instant.EPOCH; res.add(new ContributorQuery(pillar, latestChecksumDate, null, SettingsUtils.DEFAULT_MAX_CLIENT_PAGE_SIZE)); } - + return res.toArray(new ContributorQuery[pillars.size()]); } - + private ContributorQuery[] makeQueries(List pillars, IntegrityModel store) { List res = new ArrayList<>(); for (String pillar : pillars) { Instant latestChecksumDate = store.getDateForNewestChecksumEntryForPillarInstant(pillar, TEST_COLLECTION); res.add(new ContributorQuery(pillar, latestChecksumDate, null, SettingsUtils.DEFAULT_MAX_CLIENT_PAGE_SIZE)); } - + return res.toArray(new ContributorQuery[pillars.size()]); } - + + private ResultingChecksums createResultingChecksums(String checksum, String... fileIDs) { ResultingChecksums res = new ResultingChecksums(); res.getChecksumDataItems().addAll(createChecksumData(checksum, fileIDs)); return res; } - + private List createChecksumData(String checksum, String... fileIDs) { List res = new ArrayList<>(); for (String fileID : fileIDs) { @@ -490,7 +398,7 @@ private List createChecksumData(String checksum } return res; } - + private ChecksumSpecTYPE createChecksumSpecTYPE() { ChecksumSpecTYPE res = new ChecksumSpecTYPE(); res.setChecksumType(ChecksumType.MD5); diff --git a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/MonitoringServiceRestApplication.java b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/MonitoringServiceRestApplication.java index 7f61574d9..a40f24f06 100644 --- a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/MonitoringServiceRestApplication.java +++ b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/MonitoringServiceRestApplication.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; import jakarta.ws.rs.core.Application; + import java.util.Arrays; import java.util.HashSet; import java.util.Set; diff --git a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/RestMonitoringService.java b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/RestMonitoringService.java index 39972f4ea..4e27dc57c 100644 --- a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/RestMonitoringService.java +++ b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/RestMonitoringService.java @@ -21,14 +21,14 @@ */ package org.bitrepository.monitoringservice.webservice; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; import org.bitrepository.common.utils.TimeUtils; import org.bitrepository.monitoringservice.MonitoringService; import org.bitrepository.monitoringservice.MonitoringServiceFactory; import org.bitrepository.monitoringservice.status.ComponentStatus; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.Produces; import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebStatus.java b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebStatus.java index 3b6bcf1bf..7e4c65afe 100644 --- a/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebStatus.java +++ b/bitrepository-monitoring-service/src/main/java/org/bitrepository/monitoringservice/webservice/WebStatus.java @@ -21,11 +21,11 @@ */ package org.bitrepository.monitoringservice.webservice; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.bitrepository.common.utils.TimeUtils; import org.bitrepository.monitoringservice.status.ComponentStatus; -import jakarta.xml.bind.annotation.XmlElement; -import jakarta.xml.bind.annotation.XmlRootElement; import java.time.Instant; @XmlRootElement diff --git a/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/collector/StatusEventHandlerTest.java b/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/collector/StatusEventHandlerTest.java index 0c109b77d..9e71c3ab0 100644 --- a/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/collector/StatusEventHandlerTest.java +++ b/bitrepository-monitoring-service/src/test/java/org/bitrepository/monitoringservice/collector/StatusEventHandlerTest.java @@ -74,7 +74,7 @@ void testStatusEventHandler() throws Exception { Assertions.assertEquals(1, alerter.getCallsForCheckStatuses()); addStep("Test the Failed event", "Should make another call to the alerter"); - event = new OperationFailedEvent(null, null); + event = new OperationFailedEvent(null, null, "info"); eventHandler.handleEvent(event); Assertions.assertEquals(0, store.getCallsForGetStatusMap()); Assertions.assertEquals(0, store.getCallsForUpdateReplayCounts()); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java index 289caa9b8..2b644c372 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java @@ -24,8 +24,6 @@ */ package org.bitrepository.pillar.messagehandler; -import java.io.ByteArrayInputStream; - import jakarta.xml.bind.JAXBException; import org.bitrepository.bitrepositorydata.GetChecksumsResults; import org.bitrepository.bitrepositoryelements.ChecksumDataForChecksumSpecTYPE; @@ -52,6 +50,7 @@ import org.xml.sax.SAXException; import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -208,8 +207,7 @@ private ResultingChecksums compileResultsForMessage(ExtractedChecksumResultSet c * @throws SAXException If the results does not validate against the XSD. */ private File makeTemporaryChecksumFile(GetChecksumsRequest request, - ExtractedChecksumResultSet checksumResultSet) throws IOException, - JAXBException, SAXException { + ExtractedChecksumResultSet checksumResultSet) throws IOException, JAXBException, SAXException { // Create the temporary file. File checksumResultFile = File.createTempFile(request.getCorrelationID(), System.currentTimeMillis() + ".cs"); log.debug("Writing the list of checksums to the file '{}'", checksumResultFile); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java index 0aa7acb5f..a5a87bf38 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java @@ -25,8 +25,6 @@ */ package org.bitrepository.pillar.messagehandler; -import java.io.ByteArrayInputStream; - import jakarta.xml.bind.JAXBException; import org.bitrepository.bitrepositorydata.GetFileIDsResults; import org.bitrepository.bitrepositoryelements.FileIDsData; @@ -53,6 +51,7 @@ import org.xml.sax.SAXException; import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -271,9 +270,7 @@ private GetFileIDsProgressResponse createProgressResponse(GetFileIDsRequest mess */ private GetFileIDsFinalResponse createFinalResponse(GetFileIDsRequest message) { GetFileIDsFinalResponse res = new GetFileIDsFinalResponse(); - StorageModel pillarModel = getPillarModel(); - String pillarID = pillarModel.getPillarID(); - res.setPillarID(pillarID); + res.setPillarID(getPillarModel().getPillarID()); res.setFileIDs(message.getFileIDs()); return res; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java index 836f8d228..09b637d5a 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java @@ -24,6 +24,7 @@ */ package org.bitrepository.pillar; +import jakarta.jms.JMSException; import org.bitrepository.common.settings.Settings; import org.bitrepository.pillar.integration.ArtemisFixedPortContainer; import org.bitrepository.protocol.IntegrationTest; @@ -31,12 +32,10 @@ import org.bitrepository.protocol.bus.MessageReceiver; import org.bitrepository.protocol.messagebus.MessageBusManager; import org.bitrepository.settings.repositorysettings.Collection; -import org.testcontainers.activemq.ActiveMQContainer; import org.testcontainers.activemq.ArtemisContainer; import org.testcontainers.containers.InternetProtocol; import org.testcontainers.junit.jupiter.Container; -import jakarta.jms.JMSException; import java.util.List; public abstract class DefaultFixturePillarIT extends IntegrationTest { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java index 1941d61cf..592caef39 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java @@ -75,7 +75,7 @@ public abstract class DefaultPillarIT extends DefaultFixturePillarIT { } } - @BeforeEach + @Override protected void initializeCUT() { collectionID = settingsForTestClient.getCollections().get(0).getID(); File fileDir = new File(settingsForCUT.getReferenceSettings().getPillarSettings().getCollectionDirs().get(0).getFileDirs().get(0)); @@ -85,7 +85,7 @@ protected void initializeCUT() { createReferencePillar(); } - @AfterEach + @Override protected void shutdownCUT() { shutdownMediator(); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java index 09fb58c62..483413fc3 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java @@ -62,7 +62,6 @@ protected void initializeCUT() { createPillar(); } - @AfterEach @Override protected void shutdownCUT() { shutdownMediator(); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ClientProvider.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ClientProvider.java index 429a4931f..6eef99316 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ClientProvider.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ClientProvider.java @@ -54,8 +54,8 @@ public class ClientProvider { * @param settings The settings to use for the clients. */ public ClientProvider( - org.bitrepository.protocol.security.SecurityManager securityManager, - Settings settings) { + org.bitrepository.protocol.security.SecurityManager securityManager, + Settings settings) { this.securityManager = securityManager; this.settings = settings; @@ -64,11 +64,11 @@ public ClientProvider( public synchronized BlockingPutFileClient getPutClient() { if (putFileClient == null) { putFileClient = new BlockingPutFileClient( - new PutFileClientTestWrapper( - ModifyComponentFactory.getInstance().retrievePutClient( - settings, securityManager, settings.getComponentID() - ) - ) + new PutFileClientTestWrapper( + ModifyComponentFactory.getInstance().retrievePutClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return putFileClient; @@ -77,11 +77,11 @@ public synchronized BlockingPutFileClient getPutClient() { public synchronized BlockingDeleteFileClient getDeleteFileClient() { if (getDeleteFileClient == null) { getDeleteFileClient = new BlockingDeleteFileClient( - new DeleteFileClientTestWrapper( - ModifyComponentFactory.getInstance().retrieveDeleteFileClient( - settings, securityManager, settings.getComponentID() - ) - ) + new DeleteFileClientTestWrapper( + ModifyComponentFactory.getInstance().retrieveDeleteFileClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return getDeleteFileClient; @@ -90,11 +90,11 @@ public synchronized BlockingDeleteFileClient getDeleteFileClient() { public synchronized BlockingGetChecksumsClient getGetChecksumsClient() { if (getChecksumsClient == null) { getChecksumsClient = new BlockingGetChecksumsClient( - new GetChecksumsClientTestWrapper( - AccessComponentFactory.getInstance().createGetChecksumsClient( - settings, securityManager, settings.getComponentID() - ) - ) + new GetChecksumsClientTestWrapper( + AccessComponentFactory.getInstance().createGetChecksumsClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return getChecksumsClient; @@ -103,11 +103,11 @@ public synchronized BlockingGetChecksumsClient getGetChecksumsClient() { public synchronized BlockingGetFileIDsClient getGetFileIDsClient() { if (getFileIDsClient == null) { getFileIDsClient = new BlockingGetFileIDsClient( - new GetFileIDsClientTestWrapper( - AccessComponentFactory.getInstance().createGetFileIDsClient( - settings, securityManager, settings.getComponentID() - ) - ) + new GetFileIDsClientTestWrapper( + AccessComponentFactory.getInstance().createGetFileIDsClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return getFileIDsClient; @@ -117,11 +117,11 @@ public synchronized BlockingGetFileIDsClient getGetFileIDsClient() { public synchronized BlockingAuditTrailClient getAuditTrailsClient() { if (getAuditTrailsClient == null) { getAuditTrailsClient = new BlockingAuditTrailClient( - new AuditTrailClientTestWrapper( - AccessComponentFactory.getInstance().createAuditTrailClient( - settings, securityManager, settings.getComponentID() - ) - ) + new AuditTrailClientTestWrapper( + AccessComponentFactory.getInstance().createAuditTrailClient( + settings, securityManager, settings.getComponentID() + ) + ) ); } return getAuditTrailsClient; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java index 651ce8891..f84d91d6b 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java @@ -151,6 +151,7 @@ public void initializeSuite(SuiteInfo testInfo) { setupRealMessageBus(); + startEmbeddedPillar(testInfo); reloadMessageBus(); clientProvider = new ClientProvider(securityManager, settingsForTestClient); @@ -250,7 +251,6 @@ private static void startContainer(final GenericContainer container) { } } - /** * Will start an embedded reference pillar if specified in the pillar-integration-test.properties.

    * The type of pillar (full or checksum) is baed on the test group used, eg. if the group is @@ -322,12 +322,8 @@ protected SecurityManager createSecurityManager() { MessageSigner signer = new BasicMessageSigner(); OperationAuthorizer authorizer = new BasicOperationAuthorizer(permissionStore); return new BasicSecurityManager(settingsForTestClient.getRepositorySettings(), - testConfiguration.getPrivateKeyFileLocation(), - authenticator, - signer, - authorizer, - permissionStore, - settingsForTestClient.getComponentID()); + testConfiguration.getPrivateKeyFileLocation(), + authenticator, signer, authorizer, permissionStore, settingsForTestClient.getComponentID()); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ReferencePillarDerbyDBTestUtils.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ReferencePillarDerbyDBTestUtils.java index 1bee706d7..b9a670211 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ReferencePillarDerbyDBTestUtils.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/ReferencePillarDerbyDBTestUtils.java @@ -41,12 +41,10 @@ public ReferencePillarDerbyDBTestUtils(Settings pillarSettings) { /** * Creates the Derby databases needed by the reference pillar, * as specified in the settings. - *

    + * * Will also remove existing databases. */ public void createEmptyDatabases() { - - DatabaseSpecifics auditTrailDB = pillarSettings.getReferenceSettings().getPillarSettings().getAuditTrailContributerDatabase(); var pillarAuditTrailDBCreator = new PillarAuditTrailDatabaseCreator(); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java index eff944e2f..41e8dd6bd 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java @@ -56,6 +56,7 @@ public void missingCollectionIDTest() { MessageRequest request = createRequest(); request.setCollectionID(null); messageBus.sendMessage(request); + MessageResponse receivedResponse = receiveResponse(request); Assertions.assertEquals(ResponseCode.REQUEST_NOT_UNDERSTOOD_FAILURE, receivedResponse.getResponseInfo().getResponseCode()); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java index d3b96c100..ecc2bbb97 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java @@ -145,7 +145,7 @@ protected DeleteFileRequest createRequest() { @Override protected DeleteFileFinalResponse receiveResponse(MessageRequest request) { return clientReceiver.waitForMessage(DeleteFileFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS, request.getCorrelationID()); + TimeUnit.SECONDS, request.getCorrelationID()); } protected void assertNoResponseIsReceived() { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java index 82a752bfc..bae1f7fb1 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfile/GetFileRequestIT.java @@ -197,7 +197,7 @@ protected GetFileRequest createRequest() { protected GetFileFinalResponse receiveResponse(final MessageRequest request) { return clientReceiver.waitForMessage(GetFileFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS, request.getCorrelationID()); + TimeUnit.SECONDS, request.getCorrelationID()); } protected void assertNoResponseIsReceived() { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java index ecf91c472..6125710d3 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsIT.java @@ -76,8 +76,7 @@ void pillarGetFileIDsTestSuccessCase() throws Exception { addStep("Retrieve the ProgressResponse for the GetFileIDs request", "A GetFileIDs progress response should be sent to the client with correct attributes."); GetFileIDsProgressResponse progressResponse = clientReceiver.waitForMessage(GetFileIDsProgressResponse.class, - getOperationTimeout(), TimeUnit.SECONDS, - getFileIDsRequest.getCorrelationID()); + getOperationTimeout(), TimeUnit.SECONDS, getFileIDsRequest.getCorrelationID()); Assertions.assertNotNull(progressResponse); Assertions.assertEquals(getFileIDsRequest.getCorrelationID(), progressResponse.getCorrelationID()); Assertions.assertEquals(getFileIDsRequest.getFileIDs(), progressResponse.getFileIDs()); @@ -188,7 +187,7 @@ protected MessageRequest createRequest() { @Override protected GetFileIDsFinalResponse receiveResponse(MessageRequest request) { return clientReceiver.waitForMessage(GetFileIDsFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS, request.getCorrelationID()); + TimeUnit.SECONDS, request.getCorrelationID()); } protected void assertNoResponseIsReceived() { @@ -196,8 +195,7 @@ protected void assertNoResponseIsReceived() { } public String lookupPillarDestination() { - IdentifyPillarsForGetFileIDsRequest identifyPillarsForGetFileIDsRequest = msgFactory.createIdentifyPillarsForGetFileIDsRequest( - null); + IdentifyPillarsForGetFileIDsRequest identifyPillarsForGetFileIDsRequest = msgFactory.createIdentifyPillarsForGetFileIDsRequest(null); messageBus.sendMessage(identifyPillarsForGetFileIDsRequest); return clientReceiver.waitForMessage(IdentifyPillarsForGetFileIDsResponse.class, identifyPillarsForGetFileIDsRequest.getCorrelationID()).getReplyTo(); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java index fb54585d3..496931185 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java @@ -87,7 +87,7 @@ void maxNumberOfResultTest() { List singleFileIDList = pillarFileManager.getFileIDs(singleFileIDQuery); Assertions.assertEquals(1, singleFileIDList.size(), "The result didn't contain a single file id"); Assertions.assertEquals(originalFileIDsList.getFirst(), singleFileIDList.getFirst(), - "The returned file id wasn't equal to the oldest file id"); + "The returned file id wasn't equal to the oldest file id"); } @Test diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java index 1545d6a0f..5a5e311cc 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/IdentifyPillarsForPutFileIT.java @@ -127,8 +127,7 @@ void fileExistsTest() { messageBus.sendMessage(identifyRequest); IdentifyPillarsForPutFileResponse receivedIdentifyResponse = receiveResponse(identifyRequest); - Assertions.assertEquals(ResponseCode.DUPLICATE_FILE_FAILURE, - receivedIdentifyResponse.getResponseInfo().getResponseCode()); + Assertions.assertEquals(ResponseCode.DUPLICATE_FILE_FAILURE, receivedIdentifyResponse.getResponseInfo().getResponseCode()); } @Override diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java index 11e7405aa..be07b85a6 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/putfile/PutFileRequestIT.java @@ -146,8 +146,7 @@ void putFileOperationAcceptedProgressTest() { messageBus.sendMessage(putRequest); PutFileProgressResponse progressResponse = clientReceiver.waitForMessage(PutFileProgressResponse.class, - getOperationTimeout(), TimeUnit.SECONDS, - putRequest.getCorrelationID()); + getOperationTimeout(), TimeUnit.SECONDS, putRequest.getCorrelationID()); Assertions.assertNotNull(progressResponse); Assertions.assertEquals(putRequest.getCorrelationID(), progressResponse.getCorrelationID(), "Received unexpected 'CorrelationID' element."); @@ -179,7 +178,7 @@ protected PutFileRequest createRequest() { @Override protected PutFileFinalResponse receiveResponse(MessageRequest request) { return clientReceiver.waitForMessage(PutFileFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS, request.getCorrelationID()); + TimeUnit.SECONDS, request.getCorrelationID()); } protected void assertNoResponseIsReceived() { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java index 0b3502944..3b7bf50fb 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/replacefile/ReplaceFileRequestIT.java @@ -73,8 +73,7 @@ void normalReplaceFileTest() { messageBus.sendMessage(replaceRequest); ReplaceFileProgressResponse progressResponse = clientReceiver.waitForMessage(ReplaceFileProgressResponse.class, - getOperationTimeout(), TimeUnit.SECONDS, - replaceRequest.getCorrelationID()); + getOperationTimeout(), TimeUnit.SECONDS, replaceRequest.getCorrelationID()); Assertions.assertNotNull(progressResponse); Assertions.assertEquals(replaceRequest.getCorrelationID(), progressResponse.getCorrelationID()); Assertions.assertEquals(getPillarID(), progressResponse.getFrom()); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java index 25da05460..4b22f2bed 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java @@ -157,7 +157,7 @@ defaultFileId, null, getPillarID(), getPillarID(), awaitAsynchronousCompletion(metrics, numberOfFiles); } - public String lookupGetFileDestination() throws InterruptedException { + public String lookupGetFileDestination() { String pillarDestination; try (MessageReceiver clientReceiver = new MessageReceiver(settingsForTestClient.getReceiverDestinationID())) { messageBus.addListener(clientReceiver.getDestination(), clientReceiver.getMessageListener()); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java index 3aad7a8d5..c4c8711e9 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/DeleteFileIT.java @@ -36,9 +36,7 @@ import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileRequest; import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileResponse; import org.bitrepository.pillar.MockedPillarIT; -import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.DeleteFileMessageFactory; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingIT.java index f561f8dee..edac1358f 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingIT.java @@ -29,7 +29,6 @@ import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.pillar.MockedPillarIT; -import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.common.MessageHandlerContext; import org.bitrepository.pillar.messagehandler.PillarMessageHandler; import org.bitrepository.pillar.store.StorageModel; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsIT.java index ed7149575..220f451bb 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetAuditTrailsIT.java @@ -32,7 +32,6 @@ import org.bitrepository.bitrepositorymessages.IdentifyContributorsForGetAuditTrailsResponse; import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.pillar.MockedPillarIT; -import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.GetAuditTrailsMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsIT.java index 0a5aa1429..63ed714e6 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetChecksumsIT.java @@ -38,7 +38,6 @@ import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.common.utils.FileIDsUtils; import org.bitrepository.pillar.MockedPillarIT; -import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.GetChecksumsMessageFactory; import org.bitrepository.pillar.store.checksumdatabase.ChecksumEntry; import org.bitrepository.pillar.store.checksumdatabase.ExtractedChecksumResultSet; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsIT.java index 65c3ae418..667ab9840 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIDsIT.java @@ -38,7 +38,6 @@ import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.common.utils.FileIDsUtils; import org.bitrepository.pillar.MockedPillarIT; -import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.GetFileIDsMessageFactory; import org.bitrepository.pillar.store.checksumdatabase.ExtractedFileIDsResultSet; import org.junit.jupiter.api.Assertions; @@ -240,8 +239,7 @@ void badCaseOperationNoFile() { addStep("Setup for not having the file", "Should cause the FILE_NOT_FOUND_FAILURE later."); Mockito.when(model.hasFileID(eq(FILE_ID), anyString())).thenReturn(false); - String componentID = settingsForCUT.getComponentID(); - Mockito.when(model.getPillarID()).thenReturn(componentID); + Mockito.when(model.getPillarID()).thenReturn(settingsForCUT.getComponentID()); addStep("Create and send the actual GetFileIDs message to the pillar.", "Should be received and handled by the pillar."); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIT.java index b7414ef2f..0ec840574 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GetFileIT.java @@ -35,7 +35,6 @@ import org.bitrepository.bitrepositorymessages.IdentifyPillarsForGetFileResponse; import org.bitrepository.common.filestore.FileInfo; import org.bitrepository.pillar.MockedPillarIT; -import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.common.FileInfoStub; import org.bitrepository.pillar.messagefactories.GetFileMessageFactory; import org.bitrepository.service.exception.IdentifyContributorException; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileIT.java index a7459b2e9..8f51ceceb 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/PutFileIT.java @@ -39,7 +39,6 @@ import org.bitrepository.common.utils.Base16Utils; import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.pillar.MockedPillarIT; -import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.PutFileMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileIT.java index 078298edf..f0d572ffc 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/ReplaceFileIT.java @@ -40,7 +40,6 @@ import org.bitrepository.common.utils.Base16Utils; import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.pillar.MockedPillarIT; -import org.bitrepository.pillar.PillarTestGroups; import org.bitrepository.pillar.messagefactories.ReplaceFileMessageFactory; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Tag; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java index 86e2462ee..034990c4a 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java @@ -32,7 +32,8 @@ import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; -import java.util.Date; + +import java.time.Instant; import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; @@ -52,7 +53,7 @@ void setUpFactory() throws DatatypeConfigurationException { @Tag("pillartest") void testWorkflowRecalculatesChecksum() throws Exception { addDescription("Test that the workflow recalculates the workflows, when the maximum age has been met."); - var beforeWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); + Instant beforeWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); Assertions.assertEquals(1, csCache.getAllFileIDs(collectionID).size()); Assertions.assertEquals(1, archives.getAllFileIds(collectionID).size()); settingsForCUT.getReferenceSettings().getPillarSettings().setMaxAgeForChecksums(factory.newDuration(0)); @@ -64,7 +65,7 @@ void testWorkflowRecalculatesChecksum() throws Exception { addStep("Create and run workflow", "The checksum"); SchedulableJob workflow = new RecalculateChecksumJob(collectionID, model); workflow.start(); - var afterWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); + Instant afterWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); Assertions.assertTrue(beforeWorkflowDate.toEpochMilli() < afterWorkflowDate.toEpochMilli(), beforeWorkflowDate.toEpochMilli() + " < " + afterWorkflowDate.toEpochMilli()); @@ -76,7 +77,7 @@ void testWorkflowRecalculatesChecksum() throws Exception { void testWorkflowDoesNotRecalculateWhenNotNeeded() throws Exception { addDescription("Test that the workflow does not recalculates the workflows, when the maximum age has " + "not yet been met."); - var beforeWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); + Instant beforeWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); Assertions.assertEquals(1, csCache.getAllFileIDs(collectionID).size()); Assertions.assertEquals(1, archives.getAllFileIds(collectionID).size()); settingsForCUT.getReferenceSettings().getPillarSettings() @@ -89,7 +90,7 @@ void testWorkflowDoesNotRecalculateWhenNotNeeded() throws Exception { addStep("Create and run workflow", "The checksum"); SchedulableJob workflow = new RecalculateChecksumJob(collectionID, model); workflow.start(); - var afterWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); + Instant afterWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); Assertions.assertEquals(afterWorkflowDate.toEpochMilli(), beforeWorkflowDate.toEpochMilli(), beforeWorkflowDate.toEpochMilli() + " == " + afterWorkflowDate.toEpochMilli()); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java index 726a8907e..858d48d96 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java @@ -52,7 +52,7 @@ public class ChecksumPillarModelIT extends DefaultFixturePillarIT { protected static final String EMPTY_MD5_CHECKSUM = "d41d8cd98f00b204e9800998ecf8427e"; - @BeforeEach + @Override protected void initializeCUT() { cache = new MemoryCacheMock(); alarmDispatcher = new AlarmDispatcher(settingsForCUT, messageBus); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java index 22ff1e665..dc0b0a3b6 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java @@ -58,7 +58,7 @@ public class FullPillarModelIT extends DefaultFixturePillarIT { "3e7012b39d4f6c503b2a4846fff3f4d0d61fb1a58b81035765f283cfa5f1b93e57ded9e0a946447ff24e5c9be39c8573"; protected static final String EMPTY_MD5_CHECKSUM = "d41d8cd98f00b204e9800998ecf8427e"; - @BeforeEach + @Override protected void initializeCUT() { cache = new MemoryCacheMock(); archives = new CollectionArchiveManager(settingsForCUT); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java index a1ec1645b..d7f35b69b 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java @@ -26,7 +26,6 @@ import org.bitrepository.common.settings.TestSettingsProvider; import org.bitrepository.common.utils.Base16Utils; import org.bitrepository.common.utils.CalendarUtils; -import org.bitrepository.pillar.common.ChecksumDatabaseCreator; import org.bitrepository.pillar.store.checksumdatabase.ChecksumDAO; import org.bitrepository.pillar.store.checksumdatabase.ChecksumDatabaseManager; import org.bitrepository.pillar.store.checksumdatabase.ChecksumEntry; @@ -34,9 +33,7 @@ import org.bitrepository.pillar.store.checksumdatabase.ExtractedFileIDsResultSet; import org.bitrepository.settings.repositorysettings.PillarIDs; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.testcontainers.containers.BindMode; @@ -44,9 +41,7 @@ import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.postgresql.PostgreSQLContainer; -import java.sql.Connection; import java.sql.DriverManager; -import java.sql.Statement; import java.time.Instant; import java.util.List; @@ -113,13 +108,12 @@ void testChecksumDatabaseExtraction() { addStep("Extract all entries", "Should only be the one default."); List entries = cache.getChecksumResults((Instant) null, (Instant) null, - null, collectionID).getEntries(); + null, collectionID).getEntries(); Assertions.assertEquals(1, entries.size()); - Assertions.assertEquals(DEFAULT_FILE_ID, entries.get(0).getFileID()); - Assertions.assertEquals(DEFAULT_CHECKSUM, Base16Utils.decodeBase16(entries.get(0).getChecksumValue())); + Assertions.assertEquals(DEFAULT_FILE_ID, entries.getFirst().getFileID()); + Assertions.assertEquals(DEFAULT_CHECKSUM, Base16Utils.decodeBase16(entries.getFirst().getChecksumValue())); Assertions.assertEquals(DEFAULT_DATE, - CalendarUtils.convertFromXMLGregorianCalendarToInstant(entries.get(0) - .getCalculationTimestamp())); + CalendarUtils.convertFromXMLGregorianCalendarToInstant(entries.getFirst().getCalculationTimestamp())); } @Test @@ -132,10 +126,10 @@ void testDeletion() { addStep("Check whether the default entry exists.", "It does!"); Assertions.assertTrue(cache.hasFile(DEFAULT_FILE_ID, collectionID)); ExtractedFileIDsResultSet res = - cache.getFileIDs((Instant) null, (Instant) null, null, null, collectionID); + cache.getFileIDs((Instant) null, (Instant) null, null, null, collectionID); Assertions.assertEquals(1, res.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(DEFAULT_FILE_ID, - res.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + res.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Remove the default entry", "Should no longer exist"); cache.deleteEntry(DEFAULT_FILE_ID, collectionID); @@ -170,7 +164,7 @@ void testReplacingExistingEntry() { Assertions.assertEquals(newChecksum, newEntry.getChecksum()); Assertions.assertNotEquals(oldEntry.getChecksum(), newEntry.getChecksum()); Assertions.assertNotEquals(oldEntry.getCalculationInstant().toEpochMilli(), - newEntry.getCalculationInstant().toEpochMilli()); + newEntry.getCalculationInstant().toEpochMilli()); } @Test @@ -211,7 +205,7 @@ void testExtractionOfMissingData() { @Tag("pillartest") void testSpecifiedEntryExtraction() { addDescription("Test that specific entries can be extracted. Has two entries in the database: " - + "one for the current timestamp and one for the epoch."); + + "one for the current timestamp and one for the epoch."); addStep("Instantiate database with appropriate data.", ""); Instant beforeTest = Instant.now().minusSeconds(100); String oldFile = "VeryOldFile"; @@ -220,33 +214,31 @@ void testSpecifiedEntryExtraction() { addStep("Extract with out restrictions", "Both entries."); ExtractedChecksumResultSet extractedResults = - cache.getChecksumResults((Instant) null, (Instant) null, null, collectionID); + cache.getChecksumResults((Instant) null, (Instant) null, null, collectionID); Assertions.assertEquals(2, extractedResults.getEntries().size()); addStep("Extract with a maximum of 1 entry", "The oldest entry"); extractedResults = cache.getChecksumResults((Instant) null, (Instant) null, 1L, collectionID); Assertions.assertEquals(1, extractedResults.getEntries().size()); - ChecksumDataForChecksumSpecTYPE dataEntry = extractedResults.getEntries().get(0); + ChecksumDataForChecksumSpecTYPE dataEntry = extractedResults.getEntries().getFirst(); Assertions.assertEquals(0, - CalendarUtils.convertFromXMLGregorianCalendar(dataEntry.getCalculationTimestamp()) - .getTime()); + CalendarUtils.convertFromXMLGregorianCalendar(dataEntry.getCalculationTimestamp()).getTime()); Assertions.assertEquals(oldFile, dataEntry.getFileID()); addStep("Extract all dates older than this tests instantiation", "The oldest entry"); extractedResults = cache.getChecksumResults((Instant) null, beforeTest, null, collectionID); Assertions.assertEquals(1, extractedResults.getEntries().size()); - dataEntry = extractedResults.getEntries().get(0); + dataEntry = extractedResults.getEntries().getFirst(); Assertions.assertEquals(0, - CalendarUtils.convertFromXMLGregorianCalendar(dataEntry.getCalculationTimestamp()) - .getTime()); + CalendarUtils.convertFromXMLGregorianCalendar(dataEntry.getCalculationTimestamp()).getTime()); Assertions.assertEquals(oldFile, dataEntry.getFileID()); addStep("Extract all dates newer than this tests instantiation", "The default entry"); extractedResults = cache.getChecksumResults(beforeTest, (Instant) null, null, collectionID); Assertions.assertEquals(1, extractedResults.getEntries().size()); - dataEntry = extractedResults.getEntries().get(0); + dataEntry = extractedResults.getEntries().getFirst(); Assertions.assertEquals(DEFAULT_DATE, - CalendarUtils.convertFromXMLGregorianCalendarToInstant(dataEntry.getCalculationTimestamp())); + CalendarUtils.convertFromXMLGregorianCalendarToInstant(dataEntry.getCalculationTimestamp())); Assertions.assertEquals(DEFAULT_FILE_ID, dataEntry.getFileID()); addStep("Extract all dates older than the newest instance", "Both entries"); @@ -299,18 +291,18 @@ void testGetFileIDsRestrictions() { efirs = cache.getFileIDs(MIDDLE_DATE, (Instant) null, 100000L, null, collectionID); Assertions.assertEquals(1, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(FILE_ID_2, - efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Test with maximum-date set to middle date.", "Delivers first file."); efirs = cache.getFileIDs((Instant) null, MIDDLE_DATE, 100000L, null, collectionID); Assertions.assertEquals(1, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(FILE_ID_1, - efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Test with both minimum-date and maximum-date set to middle date.", "Delivers no files."); efirs = cache.getFileIDs(MIDDLE_DATE, - MIDDLE_DATE, 100000L, null, collectionID); + MIDDLE_DATE, 100000L, null, collectionID); Assertions.assertEquals(0, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); addStep("Test the first file-id, with no other restrictions", @@ -318,19 +310,19 @@ void testGetFileIDsRestrictions() { efirs = cache.getFileIDs((Instant) null, (Instant) null, 100000L, FILE_ID_1, collectionID); Assertions.assertEquals(1, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(FILE_ID_1, - efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Test the second file-id, with no other restrictions", "Only delivers the requested file-id"); efirs = cache.getFileIDs((Instant) null, (Instant) null, 100000L, FILE_ID_2, collectionID); Assertions.assertEquals(1, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); Assertions.assertEquals(FILE_ID_2, - efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); + efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().get(0).getFileID()); addStep("Test the date for the first file-id, while requesting the second file-id", "Should not deliver anything"); efirs = cache.getFileIDs(Instant.EPOCH, MIDDLE_DATE, - 100000L, FILE_ID_2, collectionID); + 100000L, FILE_ID_2, collectionID); Assertions.assertEquals(0, efirs.getEntries().getFileIDsDataItems().getFileIDsDataItem().size()); } @@ -344,42 +336,42 @@ void testGetChecksumResult() { addStep("Test with no time restrictions", "Retrieves the file"); ExtractedChecksumResultSet extractedChecksums = cache.getChecksumResult((Instant) null, (Instant) null, - DEFAULT_FILE_ID, collectionID); + DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(1, extractedChecksums.getEntries().size()); Assertions.assertEquals(DEFAULT_FILE_ID, extractedChecksums.getEntries().get(0).getFileID()); addStep("Test with time restrictions from epoc to now", "Retrieves the file"); extractedChecksums = cache.getChecksumResult(Instant.EPOCH, Instant.now(), - DEFAULT_FILE_ID, collectionID); + DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(1, extractedChecksums.getEntries().size()); addStep("Test with very strict time restrictions around the default date", "Retrieves the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE.minusMillis(1), - DEFAULT_DATE.plusMillis(1), DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE.plusMillis(1), DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(1, extractedChecksums.getEntries().size()); addStep("Test with too new a lower limit", "Does not retrieve the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE.plusMillis(1), - Instant.now(), DEFAULT_FILE_ID, collectionID); + Instant.now(), DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(0, extractedChecksums.getEntries().size()); addStep("Test with exact date as both upper and lower limit", "Does not retrieve the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE, - DEFAULT_DATE, DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE, DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(0, extractedChecksums.getEntries().size()); addStep("Test with date limit from 1 millis before as lower and exact date a upper limit", "Does retrieve the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE.minusMillis(1), - DEFAULT_DATE, DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE, DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(1, extractedChecksums.getEntries().size()); addStep("Test with date limit from exact date as lower and 1 millis after date a upper limit", "Does not retrieve the file"); extractedChecksums = cache.getChecksumResult(DEFAULT_DATE, - DEFAULT_DATE.plusMillis(1), DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE.plusMillis(1), DEFAULT_FILE_ID, collectionID); Assertions.assertEquals(0, extractedChecksums.getEntries().size()); addStep("Test with too old an upper limit", "Does not retrieve the file"); diff --git a/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb b/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb index a511fbdf3..9cc7a68ce 100644 --- a/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb +++ b/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb @@ -1,5 +1,7 @@ - + + diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/AbstractBitrepositoryContextListener.java b/bitrepository-service/src/main/java/org/bitrepository/service/AbstractBitrepositoryContextListener.java index 89dc7526a..648bf6dde 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/AbstractBitrepositoryContextListener.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/AbstractBitrepositoryContextListener.java @@ -21,13 +21,12 @@ */ package org.bitrepository.service; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.bitrepository.protocol.utils.LogbackConfigLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import jakarta.servlet.ServletContextEvent; -import jakarta.servlet.ServletContextListener; - /** * The Listener has two intentions * 1) Acquire necessary information at startup to locate configuration files and create the first instance diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/workflow/WorkflowState.java b/bitrepository-service/src/main/java/org/bitrepository/service/workflow/WorkflowState.java index 818c17b01..0f26be5ac 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/workflow/WorkflowState.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/workflow/WorkflowState.java @@ -24,7 +24,6 @@ */ package org.bitrepository.service.workflow; - import jakarta.xml.bind.annotation.XmlRootElement; /** diff --git a/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java b/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java index 9c3ca82b4..257a8f558 100644 --- a/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java +++ b/bitrepository-service/src/test/java/org/bitrepository/service/audit/AuditTrailContributorDatabaseTest.java @@ -21,14 +21,12 @@ */ package org.bitrepository.service.audit; -import net.bytebuddy.utility.dispatcher.JavaDispatcher; import org.bitrepository.bitrepositoryelements.FileAction; import org.bitrepository.common.settings.Settings; import org.bitrepository.common.settings.TestSettingsProvider; import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.service.database.DatabaseCreator; import org.bitrepository.service.database.DatabaseManager; -import org.bitrepository.service.database.DerbyDatabaseDestroyer; import org.bitrepository.settings.referencesettings.DatabaseSpecifics; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -95,64 +93,64 @@ void testAuditTrailDatabaseExtraction() throws Exception { addStep("Populate the database.", "Should be inserted into database."); daba.addAuditEvent(firstCollectionID, FILE_ID_1, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.PUT_FILE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.PUT_FILE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_1, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.CHECKSUM_CALCULATED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.CHECKSUM_CALCULATED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.FILE_MOVED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.FILE_MOVED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.FAILURE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.FAILURE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.INCONSISTENCY, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.INCONSISTENCY, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); addStep("Test extracting all the events", "Should be all 5 events."); AuditTrailDatabaseResults events = daba.getAudits(firstCollectionID, null, null, - null, (Instant) null, (Instant) null, null); + null, (Instant) null, (Instant) null, null); Assertions.assertEquals(5, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events for fileID1", "Should be 2 events."); events = daba.getAudits(firstCollectionID, FILE_ID_1, null, null, (Instant) null, - (Instant) null, null); + (Instant) null, null); Assertions.assertEquals(2, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events for fileID2", "Should be 3 events."); events = daba.getAudits(firstCollectionID, FILE_ID_2, null, null, (Instant) null, - (Instant) null, null); + (Instant) null, null); Assertions.assertEquals(3, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events with the sequence number at least equal to the largest sequence number.", "Should be 1 event."); Long seq = daba.extractLargestSequenceNumber(); events = daba.getAudits(firstCollectionID, null, seq, null, (Instant) null, (Instant) null, - null); + null); Assertions.assertEquals(1, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events for fileID1 with sequence number 2 or more", "Should be 1 event."); events = daba.getAudits(firstCollectionID, FILE_ID_1, seq - 3, null, (Instant) null, - (Instant) null, null); + (Instant) null, null); Assertions.assertEquals(1, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting the events for fileID1 with at most sequence number 2", "Should be 2 events."); events = daba.getAudits(firstCollectionID, FILE_ID_1, null, seq - 3, (Instant) null, - (Instant) null, null); + (Instant) null, null); Assertions.assertEquals(2, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting at most 3 events", "Should extract 3 events."); events = daba.getAudits(firstCollectionID, null, null, null, (Instant) null, - (Instant) null, 3L); + (Instant) null, 3L); Assertions.assertEquals(3, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting at most 1000 events", "Should extract all 5 events."); events = daba.getAudits(firstCollectionID, null, null, null, (Instant) null, - (Instant) null, 1000L); + (Instant) null, 1000L); Assertions.assertEquals(5, events.getAuditTrailEvents().getAuditTrailEvent().size()); addStep("Test extracting from another collection", "Should not extract anything."); String secondCollectionID = settings.getCollections().get(1).getID(); events = daba.getAudits(secondCollectionID, null, null, null, (Instant) null, - (Instant) null, 1000L); + (Instant) null, 1000L); Assertions.assertEquals(0, events.getAuditTrailEvents().getAuditTrailEvent().size()); dm.getConnector().destroy(); @@ -170,59 +168,47 @@ void testAuditTrailDatabaseExtractionOrder() throws Exception { addStep("Populate the database.", "Should be inserted into database."); daba.addAuditEvent(firstCollectionID, FILE_ID_1, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.PUT_FILE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.PUT_FILE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_1, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.CHECKSUM_CALCULATED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.CHECKSUM_CALCULATED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.FILE_MOVED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.FILE_MOVED, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.FAILURE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.FAILURE, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); daba.addAuditEvent(firstCollectionID, FILE_ID_2, DEFAULT_ACTOR, DEFAULT_INFO, DEFAULT_AUDIT_TRAIL_MESSAGE, - FileAction.INCONSISTENCY, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); + FileAction.INCONSISTENCY, DEFAULT_OPERATION_ID, DEFAULT_CERTIFICATE_ID); addStep("Extract 3 audit-trails", "Should give first 3 audit-trails in order."); AuditTrailDatabaseResults events = - daba.getAudits(firstCollectionID, null, null, null, - null, (Instant) null, 3L); + daba.getAudits(firstCollectionID, null, null, null, + null, (Instant) null, 3L); Assertions.assertEquals(3L, events.getAuditTrailEvents().getAuditTrailEvent().size()); Assertions.assertEquals(FileAction.PUT_FILE, - events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionOnFile()); Assertions.assertEquals(1L, - events.getAuditTrailEvents() - .getAuditTrailEvent() - .get(0) - .getSequenceNumber() - .longValue()); + events.getAuditTrailEvents().getAuditTrailEvent().get(0).getSequenceNumber().longValue()); Assertions.assertEquals(FileAction.CHECKSUM_CALCULATED, - events.getAuditTrailEvents().getAuditTrailEvent().get(1).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(1).getActionOnFile()); Assertions.assertEquals(2L, - events.getAuditTrailEvents() - .getAuditTrailEvent() - .get(1) - .getSequenceNumber() - .longValue()); + events.getAuditTrailEvents().getAuditTrailEvent().get(1).getSequenceNumber().longValue()); Assertions.assertEquals(FileAction.FILE_MOVED, - events.getAuditTrailEvents().getAuditTrailEvent().get(2).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(2).getActionOnFile()); Assertions.assertEquals(3L, - events.getAuditTrailEvents() - .getAuditTrailEvent() - .get(2) - .getSequenceNumber() - .longValue()); + events.getAuditTrailEvents().getAuditTrailEvent().get(2).getSequenceNumber().longValue()); long firstSeq = events.getAuditTrailEvents().getAuditTrailEvent().get(0).getSequenceNumber().longValue(); addStep("Extract 3 audit-trails, with larger seq-number than the first", "Should give audit-trail #2, #3, #4"); events = daba.getAudits(firstCollectionID, null, firstSeq + 1, null, - null, (Instant) null, 3L); + null, (Instant) null, 3L); Assertions.assertEquals(3L, events.getAuditTrailEvents().getAuditTrailEvent().size()); Assertions.assertEquals(FileAction.CHECKSUM_CALCULATED, - events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionOnFile()); Assertions.assertEquals(FileAction.FILE_MOVED, - events.getAuditTrailEvents().getAuditTrailEvent().get(1).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(1).getActionOnFile()); Assertions.assertEquals(FileAction.FAILURE, - events.getAuditTrailEvents().getAuditTrailEvent().get(2).getActionOnFile()); + events.getAuditTrailEvents().getAuditTrailEvent().get(2).getActionOnFile()); dm.getConnector().destroy(); } @@ -243,22 +229,22 @@ void contributorDatabaseCorrectTimestampTest() { Assertions.assertEquals(wintertimeUnix, wintertimeTS); daba.addAuditEvent(firstCollectionID, "summertime", summertimeTS, "actor", "info", - "auditTrail", FileAction.OTHER, null, null); + "auditTrail", FileAction.OTHER, null, null); daba.addAuditEvent(firstCollectionID, "wintertime", wintertimeTS, "actor", "info" - , "auditTrail", FileAction.OTHER, null, null); + , "auditTrail", FileAction.OTHER, null, null); AuditTrailDatabaseResults events = - daba.getAudits(firstCollectionID, "summertime", null, null, - null, (Instant) null, 2L); + daba.getAudits(firstCollectionID, "summertime", null, null, + null, (Instant) null, 2L); Assertions.assertEquals(1, events.getAuditTrailEvents().getAuditTrailEvent().size(), events.toString()); Assertions.assertEquals(summertimeUnix, CalendarUtils.convertFromXMLGregorianCalendarToInstant( - events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionDateTime())); + events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionDateTime())); events = daba.getAudits(firstCollectionID, "wintertime", null, null, - null, (Instant) null, 2L); + null, (Instant) null, 2L); Assertions.assertEquals(1, events.getAuditTrailEvents().getAuditTrailEvent().size(), events.toString()); Assertions.assertEquals(wintertimeUnix, CalendarUtils.convertFromXMLGregorianCalendarToInstant( - events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionDateTime())); + events.getAuditTrailEvents().getAuditTrailEvent().get(0).getActionDateTime())); } @@ -285,7 +271,7 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with all data.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, auditTrail, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with no collection", "Throws exception"); try { @@ -297,23 +283,23 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with with no file id.", "No failures"); daba.addAuditEvent(firstCollectionID, null, actor, info, auditTrail, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with with no actor.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, null, info, auditTrail, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with with no info.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, null, auditTrail, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with with no audittrail.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, null, FileAction.FAILURE, operationID, - certificateID); + certificateID); addStep("Test with with no operationID.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, auditTrail, FileAction.FAILURE, null, - certificateID); + certificateID); addStep("Test with with no certificateID.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, auditTrail, FileAction.FAILURE, operationID, null); @@ -329,7 +315,7 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with with very large file id.", "Throws exception"); try { daba.addAuditEvent(firstCollectionID, veryLongString, actor, info, auditTrail, FileAction.FAILURE, - operationID, certificateID); + operationID, certificateID); Assertions.fail("Should throw an exception"); } catch (IllegalStateException e) { // expected @@ -338,7 +324,7 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with with very large actor name.", "Throws exception"); try { daba.addAuditEvent(firstCollectionID, fileID1, veryLongString, info, auditTrail, FileAction.FAILURE, - operationID, certificateID); + operationID, certificateID); Assertions.fail("Should throw an exception"); } catch (IllegalStateException e) { // expected @@ -346,11 +332,11 @@ void testAuditTrailDatabaseIngest() throws Exception { addStep("Test with with very large info.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, veryLongString, auditTrail, FileAction.FAILURE, - operationID, certificateID); + operationID, certificateID); addStep("Test with with very large audittrail.", "No failures"); daba.addAuditEvent(firstCollectionID, fileID1, actor, info, veryLongString, FileAction.FAILURE, operationID, - certificateID); + certificateID); dm.getConnector().destroy(); } diff --git a/bitrepository-webclient/pom.xml b/bitrepository-webclient/pom.xml index afeaaea9d..196a3880d 100644 --- a/bitrepository-webclient/pom.xml +++ b/bitrepository-webclient/pom.xml @@ -11,7 +11,6 @@ Bitrepository Webclient - jakarta.servlet jakarta.servlet-api diff --git a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ServiceUrl.java b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ServiceUrl.java index a1a073d22..6a7aac918 100644 --- a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ServiceUrl.java +++ b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/ServiceUrl.java @@ -21,13 +21,13 @@ */ package org.bitrepository.webservice; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; diff --git a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebclientContextListener.java b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebclientContextListener.java index 1e9208630..6982cebd3 100644 --- a/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebclientContextListener.java +++ b/bitrepository-webclient/src/main/java/org/bitrepository/webservice/WebclientContextListener.java @@ -33,7 +33,7 @@ /** * The Listener has two intentions * 1) Acquire necessary information at startup to locate configuration files and create the first instance - * of the basic client, so everything is setup before the first users start using the webservice. + * of the basic client, so everything is setup before the first users start using the webservice. * 2) In time shut the service down in a proper manner, so no threads will be orphaned. */ public class WebclientContextListener implements ServletContextListener { @@ -46,7 +46,7 @@ public class WebclientContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { String confDir = sce.getServletContext().getInitParameter("configurationDir"); - if (confDir == null) { + if(confDir == null) { throw new RuntimeException("No configuration directory specified!"); } log.debug("Configuration dir = {}", confDir); diff --git a/pom.xml b/pom.xml index d01ffe040..5fc2d9d67 100644 --- a/pom.xml +++ b/pom.xml @@ -781,8 +781,7 @@ 21 - process-classes - + process-classes 33-SNAPSHOT 15-SNAPSHOT 4.0.12 From f4675a3a1b3d0873c15ea15e365237fc1f188903 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Wed, 15 Jul 2026 12:37:20 +0200 Subject: [PATCH 16/22] Stop warnings about "non-transient instance field of a serializable class declared with a non-serializable type" by not making the autogenerated types serializable --- .../src/main/resources/xsd/bindings-reference-settings.xjb | 1 - 1 file changed, 1 deletion(-) diff --git a/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb b/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb index 9cc7a68ce..46bf3fb64 100644 --- a/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb +++ b/bitrepository-reference-settings/src/main/resources/xsd/bindings-reference-settings.xjb @@ -1,7 +1,6 @@ - From e9c5f59df9e827d2541a516f51cce8bdd1f55a12 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Wed, 15 Jul 2026 15:29:03 +0200 Subject: [PATCH 17/22] Enabled audit trails stress test --- .../pillar/integration/perf/GetAuditTrailsFileStressIT.java | 5 +---- .../src/test/resources/logback-test.xml | 3 ++- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java index f62cf9a73..a4efca713 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetAuditTrailsFileStressIT.java @@ -33,7 +33,6 @@ import org.bitrepository.pillar.integration.perf.metrics.Metrics; import org.bitrepository.protocol.security.DummySecurityManager; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -49,7 +48,7 @@ void initialiseReferenceTest() throws Exception { putClient = ModifyComponentFactory.getInstance().retrievePutClient( settingsForTestClient, createSecurityManager(), settingsForTestClient.getComponentID()); auditTrailClient = AccessComponentFactory.getInstance().createAuditTrailClient( - settingsForCUT, new DummySecurityManager(), settingsForCUT.getComponentID()); + settingsForTestClient, new DummySecurityManager(), settingsForTestClient.getComponentID()); } private void singleTreadedPut() throws Exception { @@ -74,7 +73,6 @@ private void singleTreadedPut() throws Exception { //ToDo assert that the files are present } - @Disabled("Temporarily disabled due to performance issues") @Test @Tag(PillarTestGroups.PILLAR_STRESS_TEST) void singleTreadedGetAuditTrails() throws Exception { @@ -96,7 +94,6 @@ void singleTreadedGetAuditTrails() throws Exception { } } - @Disabled("Temporarily disabled due to performance issues") @Test @Tag(PillarTestGroups.PILLAR_STRESS_TEST) void parallelGetAuditTrails() throws Exception { diff --git a/bitrepository-reference-pillar/src/test/resources/logback-test.xml b/bitrepository-reference-pillar/src/test/resources/logback-test.xml index 2ddca7379..0b5b01672 100644 --- a/bitrepository-reference-pillar/src/test/resources/logback-test.xml +++ b/bitrepository-reference-pillar/src/test/resources/logback-test.xml @@ -1,11 +1,12 @@ - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + %d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n + From 59779b543967c2f069254724603ee4c175eee4ad Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Mon, 27 Jul 2026 13:10:16 +0200 Subject: [PATCH 18/22] Fixed problems with generating derby databases by removing the call --- bitrepository-integrity-service/pom.xml | 61 ------------------- .../scripts/create_test_databases.sh | 30 --------- 2 files changed, 91 deletions(-) delete mode 100644 bitrepository-integrity-service/src/test/resources/scripts/create_test_databases.sh diff --git a/bitrepository-integrity-service/pom.xml b/bitrepository-integrity-service/pom.xml index c3abf6c0a..88284027f 100644 --- a/bitrepository-integrity-service/pom.xml +++ b/bitrepository-integrity-service/pom.xml @@ -89,19 +89,6 @@ - - - src/test/resources - true - - scripts/** - - - - src/test/resources - false - - io.qameta.allure @@ -136,52 +123,4 @@ - - - component-test - - - - org.codehaus.mojo - exec-maven-plugin - - - Generate databases - pre-integration-test - - exec - - - bash - - ${project.build.directory}/test-classes/scripts/create_test_databases.sh - - - - - - - - - - diff --git a/bitrepository-integrity-service/src/test/resources/scripts/create_test_databases.sh b/bitrepository-integrity-service/src/test/resources/scripts/create_test_databases.sh deleted file mode 100644 index 081ee791c..000000000 --- a/bitrepository-integrity-service/src/test/resources/scripts/create_test_databases.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -### -# #%L -# Bitrepository Integrity Service -# %% -# Copyright (C) 2010 - 2013 The State and University Library, The Royal Library and The State Archives, Denmark -# %% -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as -# published by the Free Software Foundation, either version 2.1 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Lesser Public License for more details. -# -# You should have received a copy of the GNU General Lesser Public -# License along with this program. If not, see -# . -# #L% -### - -# Creates the component-test database. Requires that the package phase has finished as the war files content are used. - -cd target -tar -xf *-distribution.tar.gz -cd ${artifactId}-${version} -bin/create_derby_databases.sh From 244e4b81638e2a1ce69af8113d813826000ed7d0 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Mon, 27 Jul 2026 13:18:00 +0200 Subject: [PATCH 19/22] More cleanup of warnings --- .../store/checksumdatabase/ExtractedChecksumResultSet.java | 2 +- .../func/deletefile/IdentifyPillarsForDeleteFileIT.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/checksumdatabase/ExtractedChecksumResultSet.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/checksumdatabase/ExtractedChecksumResultSet.java index 563b1d08f..68f5b6d4d 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/checksumdatabase/ExtractedChecksumResultSet.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/checksumdatabase/ExtractedChecksumResultSet.java @@ -60,7 +60,7 @@ public void insertChecksumEntry(ChecksumDataForChecksumSpecTYPE entry) { */ public void insertChecksumEntry(ChecksumEntry entry) { ChecksumDataForChecksumSpecTYPE res = new ChecksumDataForChecksumSpecTYPE(); - res.setCalculationTimestamp(CalendarUtils.getXmlGregorianCalendar(entry.getCalculationDate())); + res.setCalculationTimestamp(CalendarUtils.getXmlGregorianCalendar(entry.getCalculationInstant())); try { res.setChecksumValue(Base16Utils.encodeBase16(entry.getChecksum())); } catch (DecoderException e) { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java index 3ae1105a2..fea93898b 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/IdentifyPillarsForDeleteFileIT.java @@ -53,7 +53,7 @@ void normalIdentificationTest() { addDescription("Verifies the normal behaviour for deleteFile identification"); addStep("Sending a deleteFile identification.", "The pillar under test should make a response with the correct elements."); - IdentifyPillarsForDeleteFileRequest identifyRequest = (IdentifyPillarsForDeleteFileRequest) createRequest(); + IdentifyPillarsForDeleteFileRequest identifyRequest = createRequest(); messageBus.sendMessage(identifyRequest); IdentifyPillarsForDeleteFileResponse receivedIdentifyResponse = receiveResponse(identifyRequest); @@ -74,7 +74,7 @@ void identificationTestForChecksumPillar() { addStep("Sending a deleteFile identification.", "The pillar under test should make a response with the correct elements. The only different from a " + "full pillar is that the checksum pillar will respond with the default checksum spec."); - IdentifyPillarsForDeleteFileRequest identifyRequest = (IdentifyPillarsForDeleteFileRequest) createRequest(); + IdentifyPillarsForDeleteFileRequest identifyRequest = createRequest(); messageBus.sendMessage(identifyRequest); IdentifyPillarsForDeleteFileResponse receivedIdentifyResponse = receiveResponse(identifyRequest); From 714534b960b22db4400a5dcd6d21f714e2622358 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 30 Jul 2026 10:24:12 +0200 Subject: [PATCH 20/22] Fixes --- .../alarm/store/AlarmDatabaseTest.java | 19 +++++---- .../webservice/RestAuditTrailService.java | 10 ++--- .../audittrails/store/AuditDatabaseTest.java | 5 +-- .../eventhandler/AbstractOperationEvent.java | 8 ++-- .../client/eventhandler/ContributorEvent.java | 2 +- .../eventhandler/ContributorFailedEvent.java | 2 +- .../commandline/CommandLineClient.java | 10 ----- .../putfile/conversation/PuttingFile.java | 30 +++++++------- .../getfile/GetFileClientComponentIT.java | 27 ++++++++++--- .../client/DefaultFixtureClientIT.java | 20 +++------- .../DeleteFileClientComponentIT.java | 2 +- .../protocol/bus/ActiveMQMessageBusIT.java | 34 ++++++++-------- .../protocol/bus/GeneralMessageBusIT.java | 33 +++++++++------- .../protocol/bus/MessageReceiver.java | 8 ++-- .../IntegrityDatabaseTestCase.java | 13 ++----- .../cache/IntegrityDAOTest.java | 39 ++++++++++++------- .../integrationtest/MissingChecksumTests.java | 2 - .../step/UpdateChecksumsStepTest.java | 2 +- .../ExtractedChecksumResultSet.java | 2 +- .../pillar/DefaultFixturePillarIT.java | 5 ++- .../bitrepository/pillar/DefaultPillarIT.java | 12 ++++-- .../bitrepository/pillar/MockedPillarIT.java | 2 + .../integration/PillarIntegrationIT.java | 19 +++++---- .../func/DefaultPillarIdentificationIT.java | 2 +- .../func/DefaultPillarMessagingIT.java | 5 --- .../integration/func/PillarFunctionIT.java | 6 +++ .../func/deletefile/DeleteFileRequestIT.java | 13 ++++--- .../IdentifyPillarsForGetChecksumsIT.java | 2 +- .../func/getfileids/GetFileIDsQueryIT.java | 2 +- .../integration/perf/GetFileStressIT.java | 6 +-- .../integration/perf/PillarPerformanceIT.java | 9 ++--- .../RecalculateChecksumWorkflowIT.java | 6 +-- .../pillar/store/ChecksumPillarModelIT.java | 1 + .../pillar/store/FullPillarModelIT.java | 1 + .../checksumcache/ChecksumDatabaseTest.java | 22 ++++++----- .../src/test/resources/logback-test.xml | 2 +- .../service/database/SqlScriptRunner.java | 2 +- .../postgres/auditContributorDBUpdate2to3.sql | 4 +- pom.xml | 4 +- 39 files changed, 207 insertions(+), 186 deletions(-) diff --git a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java index 636ebeda5..ce6f807e4 100644 --- a/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java +++ b/bitrepository-alarm-service/src/test/java/org/bitrepository/alarm/store/AlarmDatabaseTest.java @@ -64,18 +64,21 @@ class AlarmDatabaseTest { String DATABASE_NAME = "alarmservicedb"; @Container - PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:18-alpine") - .withDatabaseName(DATABASE_NAME) - .withClasspathResourceMapping("sql/postgres/alarmServiceDBCreation.sql", "/docker-entrypoint-initdb.d/init.sql", BindMode.READ_ONLY); + PostgreSQLContainer postgreSQLContainer = + new PostgreSQLContainer("postgres:18-alpine") + .withDatabaseName(DATABASE_NAME) + .withClasspathResourceMapping("sql/postgres/alarmServiceDBCreation.sql", + "/docker-entrypoint-initdb.d/init.sql", + BindMode.READ_ONLY); @BeforeEach void setup() { settings = TestSettingsProvider.reloadSettings("AlarmDatabaseUnderTest"); - var dbsettings = settings.getReferenceSettings().getAlarmServiceSettings().getAlarmServiceDatabase(); - dbsettings.setDatabaseURL(postgreSQLContainer.getJdbcUrl()); - dbsettings.setUsername(postgreSQLContainer.getUsername()); - dbsettings.setPassword(postgreSQLContainer.getPassword()); - dbsettings.setDriverClass(postgreSQLContainer.getDriverClassName()); + var alarmServiceDatabaseSettings = settings.getReferenceSettings().getAlarmServiceSettings().getAlarmServiceDatabase(); + alarmServiceDatabaseSettings.setDatabaseURL(postgreSQLContainer.getJdbcUrl()); + alarmServiceDatabaseSettings.setUsername(postgreSQLContainer.getUsername()); + alarmServiceDatabaseSettings.setPassword(postgreSQLContainer.getPassword()); + alarmServiceDatabaseSettings.setDriverClass(postgreSQLContainer.getDriverClassName()); } @AfterEach diff --git a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java index 381a3f921..cc881a922 100644 --- a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java +++ b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/webservice/RestAuditTrailService.java @@ -85,11 +85,11 @@ public StreamingOutput queryAuditTrailEvents(@FormParam("fromDate") String fromD final int maxAudits = maxResults; final AuditEventIterator it = service.queryAuditTrailEventsByIterator( - from, - to, - contentOrNull(fileID), - collectionID, contentOrNull(reportingComponent), contentOrNull(actor), filterAction(action), - contentOrNull(fingerprint), contentOrNull(operationID), maxAudits); + from, + to, + contentOrNull(fileID), + collectionID, contentOrNull(reportingComponent), contentOrNull(actor), filterAction(action), + contentOrNull(fingerprint), contentOrNull(operationID), maxAudits); if (it != null) { return output -> { JsonFactory jf = new JsonFactory(); diff --git a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java index 1514e140d..bf8bc16eb 100644 --- a/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java +++ b/bitrepository-audit-trail-service/src/test/java/org/bitrepository/audittrails/store/AuditDatabaseTest.java @@ -28,7 +28,6 @@ import org.bitrepository.common.settings.TestSettingsProvider; import org.bitrepository.common.utils.CalendarUtils; import org.bitrepository.service.database.DatabaseManager; -import org.bitrepository.service.database.DerbyDatabaseDestroyer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; @@ -49,9 +48,7 @@ @Testcontainers class AuditDatabaseTest { - /** - * The settings for the tests. Should be instantiated in the setup. - */ + /** The settings for the tests. Should be instantiated in the setup. */ Settings settings; String fileID = "TEST-FILE-ID-" + Instant.now().toEpochMilli(); String fileID2 = "ANOTHER-FILE-ID" + Instant.now().toEpochMilli(); diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/AbstractOperationEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/AbstractOperationEvent.java index 3d00bbace..00d77b1e3 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/AbstractOperationEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/AbstractOperationEvent.java @@ -30,20 +30,20 @@ * A general implementation of OperationEvent. */ public abstract class AbstractOperationEvent implements OperationEvent { - protected final OperationEventType type; + private final OperationEventType type; private OperationType operationType; private String fileID; private final String info; private String conversationID; - protected final String collectionID; + private final String collectionID; - protected AbstractOperationEvent(final OperationEventType type, final String collectionID, final String info) { + protected AbstractOperationEvent(OperationEventType type, String collectionID, String info) { this.type = type; this.info = info; this.collectionID = collectionID; } - protected AbstractOperationEvent(final OperationEventType type, final String collectionID) { + protected AbstractOperationEvent(OperationEventType type, String collectionID) { this.type = type; this.info = null; this.collectionID = collectionID; diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorEvent.java index b02c48f2f..9829ad33b 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorEvent.java @@ -33,7 +33,7 @@ public class ContributorEvent extends AbstractOperationEvent { /** * @param contributorID The contributorID for which this event concerns. * @param collectionID the collectionID for which this event concerns. - * @param info + * @param info the Info */ public ContributorEvent(OperationEventType eventType, String contributorID, String collectionID, final String info) { super(eventType, collectionID, info); diff --git a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorFailedEvent.java b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorFailedEvent.java index 1f62759b2..98b37ac34 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorFailedEvent.java +++ b/bitrepository-client/src/main/java/org/bitrepository/client/eventhandler/ContributorFailedEvent.java @@ -31,7 +31,7 @@ public class ContributorFailedEvent extends ContributorEvent { /** * @param contributorID the contributor * @param collectionID the collection - * @param responseCode The response code from any response indicating the failure. Might be null, if no relevant + * @param responseCode The response code from any response indicating the failure. Might be null if no relevant * response exists. */ public ContributorFailedEvent(String contributorID, String collectionID, ResponseCode responseCode, String info) { diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java index 3014ad540..36fbb97cf 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java @@ -59,7 +59,6 @@ * Defines the common functionality for command-line-clients. */ public abstract class CommandLineClient { - protected final String componentID; protected OutputHandler output = new DefaultOutputHandler(getClass()); protected Settings settings; protected SecurityManager securityManager; @@ -104,7 +103,6 @@ protected CommandLineClient(String... args) { output.setVerbosity(true); } settings = cmdHandler.loadSettings(); - componentID = settings.getComponentID(); securityManager = cmdHandler.loadSecurityManager(settings); fileIDValidator = new FileIDValidator(settings); @@ -123,14 +121,6 @@ protected CommandLineClient(String... args) { */ protected abstract void performOperation(); - /** - * Defines the componentID of the concrete client. Must be specified by in the subclass. - * - * @return The componentID of the concrete client. - */ - protected String getComponentID() { - return componentID; - } /** * Used for determining whether the fileID Argument is required for the concrete operation. diff --git a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java index 3cccb69f2..e210fbf13 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java +++ b/bitrepository-client/src/main/java/org/bitrepository/modify/putfile/conversation/PuttingFile.java @@ -59,17 +59,17 @@ public PuttingFile(PutFileConversationContext context, Collection messageList = new LinkedBlockingDeque<>(); try (RawMessagebus rawMessagebus = new RawMessagebus(messageBusConfig)) { - rawMessagebus.addListener(settingsForTestClient.getCollectionDestination(), new MessageListener() { - @Override - public void onMessage(Message message) { - messageList.add(message); - } - }); + rawMessagebus.addListener(settingsForTestClient.getCollectionDestination(), + (MessageListener) messageList::add); IdentifyPillarsForDeleteFileRequest messageToSend = - ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); + ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); messageToSend.setDestination(settingsForTestClient.getCollectionDestination()); messageToSend.setTo(receiverID); messageBus.sendMessage(messageToSend); Message receivedMessage = messageList.poll(3, TimeUnit.SECONDS); + Assertions.assertNotNull(receivedMessage); Assertions.assertEquals(receiverID, receivedMessage.getStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY)); } } @@ -157,9 +155,9 @@ public void onMessage(Message message) { @Test @Tag("regressiontest") final void toFilterTest() throws Exception { - addDescription("Test that message bus filters identify requests to other components, eg. ignores these."); + addDescription("Test that message bus filters identify requests to other components, i.e. ignores these."); addStep("Send an identify request with a undefined 'To' header property, " + - "eg. this identify requests should be handled by all components.", + "i.e. this identify requests should be handled by all components.", "Verify that the identify request bus accepts this identify request."); messageBus.setComponentFilter(Collections.singletonList(settingsForTestClient.getComponentID())); String collectionDestination = settingsForTestClient.getCollectionDestination(); @@ -168,20 +166,20 @@ final void toFilterTest() throws Exception { var identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileRequest.class); identifyRequest.setDestination(collectionDestination); - jakarta.jms.Message msg = rawMessagebus.createMessage(identifyRequest); + Message msg = rawMessagebus.createMessage(identifyRequest); rawMessagebus.addHeader(msg, identifyRequest.getClass().getSimpleName(), identifyRequest.getReplyTo(), null, identifyRequest.getCorrelationID()); rawMessagebus.sendMessage(collectionDestination, msg); - var msg1 = collectionReceiver.waitForMessage(identifyRequest.getClass(), identifyRequest.getCorrelationID()); + collectionReceiver.waitForMessage(identifyRequest.getClass(), identifyRequest.getCorrelationID()); addStep("Send an identify request with the 'To' header property set to this component", "Verify that the identify request bus accepts this identify request."); msg.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, settingsForTestClient.getComponentID()); rawMessagebus.sendMessage(collectionDestination, msg); - var msg2 = collectionReceiver.waitForMessage(identifyRequest.getClass(), identifyRequest.getCorrelationID()); + collectionReceiver.waitForMessage(identifyRequest.getClass(), identifyRequest.getCorrelationID()); addStep("Send an invalid identify request with the 'To' header property set to another specific component", "Verify that the identify request bus ignores this before parsing the identify request."); @@ -193,7 +191,7 @@ final void toFilterTest() throws Exception { "Verify that the message bus accepts this message."); var identifyResponse = ExampleMessageFactory.createMessage(IdentifyPillarsForDeleteFileResponse.class); identifyRequest.setDestination(collectionDestination); - jakarta.jms.Message response = rawMessagebus.createMessage(identifyResponse); + Message response = rawMessagebus.createMessage(identifyResponse); rawMessagebus.addHeader(response, identifyResponse.getClass().getSimpleName(), identifyResponse.getReplyTo(), @@ -201,7 +199,7 @@ final void toFilterTest() throws Exception { identifyRequest.getCorrelationID()); response.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); rawMessagebus.sendMessage(collectionDestination, response); - var msg3 = collectionReceiver.waitForMessage(identifyResponse.getClass(), identifyRequest.getCorrelationID()); + collectionReceiver.waitForMessage(identifyResponse.getClass(), identifyRequest.getCorrelationID()); addStep("Send an non-identify request with the 'To' header property set to another component", "Verify that the message bus accepts this message."); @@ -215,7 +213,7 @@ final void toFilterTest() throws Exception { identifyRequest.getCorrelationID()); response.setStringProperty(ActiveMQMessageBus.MESSAGE_TO_KEY, "OtherComponent"); rawMessagebus.sendMessage(collectionDestination, deleteFileRequestMessage); - var msg4 = collectionReceiver.waitForMessage(deleteFileRequest.getClass(), identifyRequest.getCorrelationID()); + collectionReceiver.waitForMessage(deleteFileRequest.getClass(), identifyRequest.getCorrelationID()); } } } \ No newline at end of file diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java index 15fcf4439..28af5d7cb 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/GeneralMessageBusIT.java @@ -41,6 +41,10 @@ import org.junit.jupiter.api.extension.ExtendWith; import jakarta.jms.JMSException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.Duration; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; @@ -58,11 +62,13 @@ abstract class GeneralMessageBusIT extends IntegrationTest { * The time to wait when sending a message before it definitely should * have been consumed by a listener. */ - static final int TIME_FOR_WAIT = 2500; + static final Duration TIME_FOR_WAIT = Duration.ofMillis(2500); private final static int threadCount = 3; protected MessageReceiver collectionReceiver; + protected static Logger log = LoggerFactory.getLogger(GeneralMessageBusIT.class); + private int count = 0; private final static String FINISH = "FINISH"; private final BlockingQueue finishQueue = new LinkedBlockingQueue<>(1); @@ -77,10 +83,11 @@ protected void registerMessageReceivers() { @Test @Tag("regressiontest") - @Description("Tests whether it is possible to create a message listener, " + - "and then set it to listen to the topic. Then puts a message" + - "on the topic for the message listener to find, and" + - "tests whether it finds the correct message.") + @Description(""" + Tests whether it is possible to create a message listener, \ + and then set it to listen to the topic. Then puts a message \ + on the topic for the message listener to find, and \ + tests whether it finds the correct message.""") final void busActivityTest() throws Exception { addStep("Send a message to the topic", "No exceptions should be thrown"); @@ -88,8 +95,8 @@ final void busActivityTest() throws Exception { message.setDestination(alarmDestinationID); messageBus.sendMessage(message); - addStep("Make sure both listeners received the message", - "Both listeners received the message, and it is identical"); + addStep("Wait for the message to be received", + "A message should be received"); alarmReceiver.waitForMessage(message.getClass()); } @@ -138,17 +145,17 @@ final void messageBusReconnectTest() { @Tag("regressiontest") final void manyThreadsBeforeFinish() throws Exception { addDescription("Tests whether it is possible to start the handling of many threads simultaneously."); - var idenfityRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForGetFileRequest.class); + var identifyRequest = ExampleMessageFactory.createMessage(IdentifyPillarsForGetFileRequest.class); listener = new MultiMessageListener(); messageBus.addListener("BusActivityTest", listener); - idenfityRequest.setDestination("BusActivityTest"); + identifyRequest.setDestination("BusActivityTest"); addStep("Send one message for each listener", "When all have receiver, then they give respond on 'finishQueue'"); for (int i = 0; i < threadCount; i++) { - messageBus.sendMessage(idenfityRequest); + messageBus.sendMessage(identifyRequest); } - Assertions.assertEquals(FINISH, finishQueue.poll(TIME_FOR_WAIT, TimeUnit.MILLISECONDS)); + Assertions.assertEquals(FINISH, finishQueue.poll(TIME_FOR_WAIT.toMillis(), TimeUnit.MILLISECONDS)); Assertions.assertEquals(threadCount, count); } @@ -164,7 +171,7 @@ protected void teardownMessageBus() { messageBus.close(); messageBus = null; } catch (JMSException e) { - + log.warn("Failed to close messageBus", e); } } } @@ -177,7 +184,7 @@ protected class MultiMessageListener implements MessageListener { public final void onMessage(Message message, MessageContext messageContext) { try { testIfFinished(); - Assertions.assertNotNull(queue.poll(TIME_FOR_WAIT, TimeUnit.MILLISECONDS)); + Assertions.assertNotNull(queue.poll(TIME_FOR_WAIT.toMillis(), TimeUnit.MILLISECONDS)); } catch (InterruptedException e) { Assertions.fail("Should not throw an exception: ", e); } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java index a69ec679f..ab66101f2 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/MessageReceiver.java @@ -50,7 +50,7 @@ /** * May be added as listener to the message queue where it will store all received messages for later reading. * - * This makes it possible to add the asynchronize reception of messages to the otherwise sequential test cases. Eg. + * This makes it possible to add the asynchronize reception of messages to the otherwise sequential test cases. I.E. *

      * {@code}
      * public void test() {
    @@ -72,7 +72,7 @@ public class MessageReceiver implements AutoCloseable {
         private final String destination;
         private final MessageListener messageListener;
     
    -    private final ExecutorService executorService = Executors.newCachedThreadPool();
    +    private final ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor();
     
         @Override
         public void close() {
    @@ -202,7 +202,7 @@ public  void checkNoMessageIsReceived(Class messageType) {
         /**
          * Verifies that no messages remain in any queues.
          */
    -    public  void checkNoMessagesRemain() {
    +    public void checkNoMessagesRemain() {
             StringBuilder outstandingMessages = new StringBuilder();
             for (BlockingQueue messageQueue : messageModel.getMessageQueues()) {
                 if (!messageQueue.isEmpty()) {
    @@ -220,7 +220,7 @@ public  void checkNoMessagesRemain() {
         /**
          * Clears the message in the queue.
          */
    -    public  void clearMessages() {
    +    public void clearMessages() {
             for (BlockingQueue messageQueue : messageModel.getMessageQueues()) {
                 if (!messageQueue.isEmpty()) {
                     messageQueue.clear();
    diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java
    index f2e5a9c3f..5ef76ba4c 100644
    --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java
    +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/IntegrityDatabaseTestCase.java
    @@ -145,14 +145,9 @@ protected IntegrityDAO createDAO() {
                                                           .getIntegrityDatabase();
             DatabaseManager dm = new IntegrityDatabaseManager(integrityDatabase);
     
    -        switch (integrityDatabase.getDriverClass()) {
    -            case "org.postgresql.Driver": {
    -                return new PostgresIntegrityDAO(dm.getConnector());
    -            }
    -            case "org.apache.derby.jdbc.EmbeddedDriver":
    -            default: {
    -                return new DerbyIntegrityDAO(dm.getConnector());
    -            }
    -        }
    +        return switch (integrityDatabase.getDriverClass()) {
    +            case "org.postgresql.Driver" -> new PostgresIntegrityDAO(dm.getConnector());
    +            default -> new DerbyIntegrityDAO(dm.getConnector());
    +        };
         }
     }
    diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java
    index 67035775c..772e93ae7 100644
    --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java
    +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/cache/IntegrityDAOTest.java
    @@ -39,6 +39,8 @@
     import org.junit.jupiter.api.BeforeEach;
     import org.junit.jupiter.api.Tag;
     import org.junit.jupiter.api.Test;
    +import org.slf4j.Logger;
    +import org.slf4j.LoggerFactory;
     
     import java.math.BigInteger;
     import java.time.Instant;
    @@ -56,6 +58,7 @@
     import static org.bitrepository.common.utils.AllureTestUtils.addStep;
     
     class IntegrityDAOTest extends IntegrityDatabaseTestCase {
    +    private static final Logger log = LoggerFactory.getLogger(IntegrityDAOTest.class);
         String TEST_PILLAR_1 = "MY-TEST-PILLAR-1";
         String TEST_PILLAR_2 = "MY-TEST-PILLAR-2";
         String EXTRA_PILLAR = "MY-EXTRA-PILLAR";
    @@ -129,7 +132,8 @@ void reinitialiseDatabaseTest() throws Exception {
                         settings.getReferenceSettings().getIntegrityServiceSettings().getIntegrityDatabase());
     
                 try (IntegrityDAO ignored = createDAO()) {
    -                System.out.println("done");
    +                //There must be some code in this block, otherwise it is not run...
    +                log.debug("Dao created");
                 }
             }
         }
    @@ -220,20 +224,25 @@ void testIngestOfFileIDsData() {
                     Assertions.assertEquals(TEST_FILE_ID, fi.getFileId());
                     Assertions.assertNull(fi.getChecksum());
                     Assertions.assertEquals(Instant.EPOCH, fi.getDateForLastChecksumCheckInstant());
    -                Assertions.assertEquals(CalendarUtils.convertFromXMLGregorianCalendarToInstant(
    -                                                data1.getFileIDsDataItems().getFileIDsDataItem().get(0).getLastModificationTime()),
    -                                        fi.getDateForLastFileIDCheckInstant());
    -                Assertions.assertEquals(Long.valueOf(data1.getFileIDsDataItems()
    -                                                          .getFileIDsDataItem()
    -                                                          .get(0)
    -                                                          .getFileSize()
    -                                                          .longValue()),
    -                                        fi.getFileSize());
    +                Assertions.assertEquals(
    +                    CalendarUtils.convertFromXMLGregorianCalendarToInstant(
    +                        data1.getFileIDsDataItems()
    +                             .getFileIDsDataItem()
    +                             .getFirst()
    +                             .getLastModificationTime()),
    +                    fi.getDateForLastFileIDCheckInstant());
    +                Assertions.assertEquals(
    +                    Long.valueOf(
    +                        data1.getFileIDsDataItems()
    +                             .getFileIDsDataItem()
    +                             .getFirst()
    +                             .getFileSize()
    +                             .longValue()),
    +                    fi.getFileSize());
                 }
     
                 addStep("Check that the extra collection is untouched by the ingest",
    -                    "should deliver an empty collection and" +
    -                    " no errors");
    +                    "should deliver an empty collection and no errors");
                 Assertions.assertEquals(Long.valueOf(1), cache.getNumberOfFilesInCollection(TEST_COLLECTIONID));
                 Assertions.assertEquals(Long.valueOf(0), cache.getNumberOfFilesInCollection(EXTRA_COLLECTION));
             }
    @@ -261,9 +270,9 @@ void testIngestOfChecksumsData() {
                 for (FileInfo fi : fileinfos) {
                     Assertions.assertEquals(TEST_FILE_ID, fi.getFileId());
                     Assertions.assertEquals(TEST_CHECKSUM, fi.getChecksum());
    -                Assertions.assertEquals(CalendarUtils.convertFromXMLGregorianCalendarToInstant(csData.get(0)
    -                                                                                                     .getCalculationTimestamp()),
    -                                        fi.getDateForLastChecksumCheckInstant());
    +                Assertions.assertEquals(
    +                    CalendarUtils.convertFromXMLGregorianCalendarToInstant(csData.getFirst().getCalculationTimestamp()),
    +                    fi.getDateForLastChecksumCheckInstant());
                 }
     
                 addStep("Check that the extra collection is untouched by the ingest",
    diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java
    index edd86751e..d639ee2eb 100644
    --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java
    +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/integrationtest/MissingChecksumTests.java
    @@ -155,8 +155,6 @@ public void clearDatabase() {
             DatabaseUtils.executeStatement(connector, "DELETE FROM collections");
         }
     
    -
    -
         @Test
         @Tag("regressiontest")
         @Tag("integritytest")
    diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java
    index 495a034ba..4e4f6d212 100644
    --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java
    +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java
    @@ -359,7 +359,7 @@ void testIncrementalChecksumCollection() throws WorkflowAbortedException {
         private ContributorQuery[] makeFullQueries(List pillars) {
             List res = new ArrayList<>();
             for (String pillar : pillars) {
    -            Instant latestChecksumDate = Instant.EPOCH;
    +            Instant latestChecksumDate = Instant.MIN;
                 res.add(new ContributorQuery(pillar, latestChecksumDate, null, SettingsUtils.DEFAULT_MAX_CLIENT_PAGE_SIZE));
             }
     
    diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/checksumdatabase/ExtractedChecksumResultSet.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/checksumdatabase/ExtractedChecksumResultSet.java
    index 68f5b6d4d..7176cadbe 100644
    --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/checksumdatabase/ExtractedChecksumResultSet.java
    +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/checksumdatabase/ExtractedChecksumResultSet.java
    @@ -59,7 +59,7 @@ public void insertChecksumEntry(ChecksumDataForChecksumSpecTYPE entry) {
          * @param entry The entry to add.
          */
         public void insertChecksumEntry(ChecksumEntry entry) {
    -        ChecksumDataForChecksumSpecTYPE res = new ChecksumDataForChecksumSpecTYPE();
    +        var res = new ChecksumDataForChecksumSpecTYPE();
             res.setCalculationTimestamp(CalendarUtils.getXmlGregorianCalendar(entry.getCalculationInstant()));
             try {
                 res.setChecksumValue(Base16Utils.encodeBase16(entry.getChecksum()));
    diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java
    index 09b637d5a..95d7b4ef8 100644
    --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java
    +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultFixturePillarIT.java
    @@ -32,6 +32,8 @@
     import org.bitrepository.protocol.bus.MessageReceiver;
     import org.bitrepository.protocol.messagebus.MessageBusManager;
     import org.bitrepository.settings.repositorysettings.Collection;
    +import org.slf4j.Logger;
    +import org.slf4j.LoggerFactory;
     import org.testcontainers.activemq.ArtemisContainer;
     import org.testcontainers.containers.InternetProtocol;
     import org.testcontainers.junit.jupiter.Container;
    @@ -39,6 +41,7 @@
     import java.util.List;
     
     public abstract class DefaultFixturePillarIT extends IntegrationTest {
    +    private static final Logger log = LoggerFactory.getLogger(DefaultFixturePillarIT.class);
         protected static String pillarDestinationId;
     
         protected String clientDestinationId;
    @@ -99,7 +102,7 @@ protected void teardownMessageBus() {
                     messageBus.close();
                     messageBus = null;
                 } catch (JMSException e) {
    -
    +                log.warn("Failed to close messageBus", e);
                 }
             }
         }
    diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java
    index 592caef39..aadb31c49 100644
    --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java
    +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarIT.java
    @@ -41,8 +41,6 @@
     import org.bitrepository.service.AlarmDispatcher;
     import org.bitrepository.service.audit.MockAuditManager;
     import org.bitrepository.service.contributor.ResponseDispatcher;
    -import org.junit.jupiter.api.AfterEach;
    -import org.junit.jupiter.api.BeforeEach;
     
     import java.io.ByteArrayInputStream;
     import java.io.File;
    @@ -77,8 +75,14 @@ public abstract class DefaultPillarIT extends DefaultFixturePillarIT {
     
         @Override
         protected void initializeCUT() {
    -        collectionID = settingsForTestClient.getCollections().get(0).getID();
    -        File fileDir = new File(settingsForCUT.getReferenceSettings().getPillarSettings().getCollectionDirs().get(0).getFileDirs().get(0));
    +        super.initializeCUT();
    +        collectionID = settingsForTestClient.getCollections().getFirst().getID();
    +        File fileDir = new File(settingsForCUT.getReferenceSettings()
    +                                              .getPillarSettings()
    +                                              .getCollectionDirs()
    +                                              .getFirst()
    +                                              .getFileDirs()
    +                                              .getFirst());
             if (fileDir.exists()) {
                 FileUtils.delete(fileDir);
             }
    diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java
    index 483413fc3..1103f1f05 100644
    --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java
    +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarIT.java
    @@ -55,6 +55,7 @@ public abstract class MockedPillarIT extends DefaultFixturePillarIT {
     
         @Override
         protected void initializeCUT() {
    +        super.initializeCUT();
             audits = new MockAuditManager();
             model = mock(StorageModel.class);
             fileExchangeMock = mock(FileExchange.class);
    @@ -65,6 +66,7 @@ protected void initializeCUT() {
         @Override
         protected void shutdownCUT() {
             shutdownMediator();
    +        super.shutdownCUT();
         }
     
         /**
    diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java
    index f84d91d6b..f00f97d13 100644
    --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java
    +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/PillarIntegrationIT.java
    @@ -54,6 +54,7 @@
     import org.bitrepository.protocol.security.SecurityManager;
     import org.junit.jupiter.api.AfterAll;
     import org.junit.jupiter.api.AfterEach;
    +import org.junit.jupiter.api.Assertions;
     import org.junit.jupiter.api.BeforeAll;
     import org.junit.jupiter.api.TestInfo;
     import org.junit.jupiter.api.TestInstance;
    @@ -67,10 +68,13 @@
     import org.testcontainers.junit.jupiter.Testcontainers;
     import org.testcontainers.postgresql.PostgreSQLContainer;
     
    +import java.io.BufferedInputStream;
     import java.io.File;
     import java.io.IOException;
     import java.io.InputStream;
     import java.io.UncheckedIOException;
    +import java.net.URL;
    +import java.nio.file.Files;
     import java.nio.file.Path;
     
     import static org.bitrepository.common.utils.AllureTestUtils.isTestRunning;
    @@ -253,7 +257,7 @@ private static void startContainer(final GenericContainer container) {
     
         /**
          * Will start an embedded reference pillar if specified in the pillar-integration-test.properties.

    - * The type of pillar (full or checksum) is baed on the test group used, eg. if the group is + * The type of pillar (full or checksum) is baed on the test group used, i.e. if the group is * checksumPillarTest a checksum pillar is started, else a normal 'full' reference pillar is started. *

    * @@ -300,7 +304,7 @@ protected long getOperationTimeout() { /** * Overrides the default settings modification, as this only works if the test can inject the modified settings into * the pillar. This means that if we are not using an embedded pillar we need to use the 'raw' collection settings, - * eg. we can not add a special postfix. + * i.e. we can not add a special postfix. * * @Override */ @@ -353,13 +357,14 @@ protected void putDefaultFile() { } catch (IOException e) { throw new UncheckedIOException(e); } - File srcFile = new File(Thread.currentThread() - .getContextClassLoader() - .getResource("default-test-file.txt") - .getFile()); + URL resource = Thread.currentThread() + .getContextClassLoader() + .getResource("default-test-file.txt"); + Assertions.assertNotNull(resource); + Path srcFile = new File(resource.getFile()).toPath(); FileExchange fe = ProtocolComponentFactory.getInstance().getFileExchange(settingsForCUT); - try (InputStream fis = FileUtils.openInputStream(srcFile)) { + try (InputStream fis = new BufferedInputStream(Files.newInputStream(srcFile))) { fe.putFile(fis, defaultFileUrl); } catch (IOException e) { throw new UncheckedIOException("Failed to upload default test file", e); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java index e756180e6..3d67d4aba 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarIdentificationIT.java @@ -40,7 +40,7 @@ public abstract class DefaultPillarIdentificationIT extends DefaultPillarMessagi @Tag(PillarTestGroups.CHECKSUM_PILLAR_TEST) public void irrelevantCollectionTest() { addDescription("Verifies identification works correctly for a collection not defined for the pillar"); - addStep("Sending a putFile identification with a irrelevant collectionID. eg. the " + + addStep("Sending a putFile identification with a irrelevant collectionID. i.e. the " + " pillar is not part of the collection", "The pillar under test should not make a response"); MessageRequest request = createRequest(); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java index 41e8dd6bd..cc7479400 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/DefaultPillarMessagingIT.java @@ -41,11 +41,6 @@ */ public abstract class DefaultPillarMessagingIT extends PillarFunctionIT { - @AfterEach - void clearReceiver(){ - clientReceiver.clearMessages(); - } - @Test @Tag(PillarTestGroups.FULL_PILLAR_TEST) @Tag(PillarTestGroups.CHECKSUM_PILLAR_TEST) diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java index 603891f1c..2c80f5f93 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/PillarFunctionIT.java @@ -24,6 +24,7 @@ import org.bitrepository.pillar.integration.PillarIntegrationIT; import org.bitrepository.pillar.messagefactories.PutFileMessageFactory; import org.bitrepository.protocol.bus.MessageReceiver; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.TestInfo; @@ -56,4 +57,9 @@ protected void registerMessageReceivers() { clientReceiver.setFromFilter(pillarFilter); alarmReceiver.setFromFilter(pillarFilter); } + + @AfterEach + void clearReceiver(){ + clientReceiver.clearMessages(); + } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java index ecc2bbb97..283864b72 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/deletefile/DeleteFileRequestIT.java @@ -112,9 +112,11 @@ void requestNewChecksumDeleteFileTest() { TestFileHelper.getDefaultFileChecksum(), requestedChecksumSpec, testSpecificFileID); messageBus.sendMessage(deleteRequest); - DeleteFileProgressResponse progressResponse = clientReceiver.waitForMessage(DeleteFileProgressResponse.class, - getOperationTimeout(), TimeUnit.SECONDS, - deleteRequest.getCorrelationID()); + var progressResponse = clientReceiver.waitForMessage( + DeleteFileProgressResponse.class, + getOperationTimeout(), + TimeUnit.SECONDS, + deleteRequest.getCorrelationID()); Assertions.assertNotNull(progressResponse); Assertions.assertEquals(deleteRequest.getCorrelationID(), progressResponse.getCorrelationID()); Assertions.assertEquals(getPillarID(), progressResponse.getFrom()); @@ -144,8 +146,9 @@ protected DeleteFileRequest createRequest() { @Override protected DeleteFileFinalResponse receiveResponse(MessageRequest request) { - return clientReceiver.waitForMessage(DeleteFileFinalResponse.class, getOperationTimeout(), - TimeUnit.SECONDS, request.getCorrelationID()); + return clientReceiver.waitForMessage(DeleteFileFinalResponse.class, + getOperationTimeout(), TimeUnit.SECONDS, + request.getCorrelationID()); } protected void assertNoResponseIsReceived() { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java index 98b7b57a2..a597009e2 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getchecksums/IdentifyPillarsForGetChecksumsIT.java @@ -144,7 +144,7 @@ protected IdentifyPillarsForGetChecksumsRequest createRequest() { @Override protected IdentifyPillarsForGetChecksumsResponse receiveResponse(MessageRequest request) { - return clientReceiver.waitForMessage(IdentifyPillarsForGetChecksumsResponse.class, request == null ? null : request.getCorrelationID()); + return clientReceiver.waitForMessage(IdentifyPillarsForGetChecksumsResponse.class, request.getCorrelationID()); } @Override diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java index 496931185..a34b581f3 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/func/getfileids/GetFileIDsQueryIT.java @@ -83,7 +83,7 @@ void maxNumberOfResultTest() { addStep("Repeat the request file ids, this time with maxNumberOfResult set to one", "A file id result with a single file id should be returned. " + "The file id should be the oldest/first file id in the full list."); - ContributorQuery singleFileIDQuery = new ContributorQuery(getPillarID(), null, (Instant) null, 1); + ContributorQuery singleFileIDQuery = new ContributorQuery(getPillarID(), (Instant) null, (Instant) null, 1); List singleFileIDList = pillarFileManager.getFileIDs(singleFileIDQuery); Assertions.assertEquals(1, singleFileIDList.size(), "The result didn't contain a single file id"); Assertions.assertEquals(originalFileIDsList.getFirst(), singleFileIDList.getFirst(), diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java index 4b22f2bed..1f9136351 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/GetFileStressIT.java @@ -161,10 +161,10 @@ public String lookupGetFileDestination() { String pillarDestination; try (MessageReceiver clientReceiver = new MessageReceiver(settingsForTestClient.getReceiverDestinationID())) { messageBus.addListener(clientReceiver.getDestination(), clientReceiver.getMessageListener()); - GetFileMessageFactory pillarLookupmMsgFactory = - new GetFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), null); + var getFileMessageFactory = + new GetFileMessageFactory(collectionID, settingsForTestClient, getPillarID(), null); IdentifyPillarsForGetFileRequest identifyRequest = - pillarLookupmMsgFactory.createIdentifyPillarsForGetFileRequest(defaultFileId); + getFileMessageFactory.createIdentifyPillarsForGetFileRequest(defaultFileId); messageBus.sendMessage(identifyRequest); pillarDestination = clientReceiver.waitForMessage(IdentifyPillarsForGetFileResponse.class).getReplyTo(); messageBus.removeListener(clientReceiver.getDestination(), clientReceiver.getMessageListener()); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java index 96aaaf4e7..c8df36ede 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/integration/perf/PillarPerformanceIT.java @@ -67,16 +67,14 @@ protected MessageReceiver addReceiver(MessageReceiver receiver) { */ protected void awaitAsynchronousCompletion(Metrics metrics, int numberOfOperations) { while(metrics.getCount() < numberOfOperations) { - System.out.println("...waiting for the last " + (numberOfOperations - metrics.getCount()) + - " operations to finish " + - "(" + TimeUtils.millisecondsToHuman(System.currentTimeMillis()-metrics.getStartTime()) + ")"); + log.info("...waiting for the last {} operations to finish ({})", (numberOfOperations - metrics.getCount()), TimeUtils.millisecondsToHuman(System.currentTimeMillis()-metrics.getStartTime())); try { Thread.sleep(6000); } catch (InterruptedException e) { Assertions.fail(e); } } - System.out.println("All operations finished in " + TimeUtils.millisecondsToHuman(System.currentTimeMillis()-metrics.getStartTime())); + log.info("All operations finished in {}",TimeUtils.millisecondsToHuman(System.currentTimeMillis()-metrics.getStartTime())); } protected static class EventHandlerForMetrics implements EventHandler { @@ -149,8 +147,7 @@ public MessageHandlerForMetrics(Metrics metrics, ParallelOperationLimiter putLim @Override public void onMessage(Message message, MessageContext messageContext) { - if (message instanceof MessageResponse) { - MessageResponse response = (MessageResponse)message; + if (message instanceof MessageResponse response) { if (response.getResponseInfo().getResponseCode().equals(ResponseCode.OPERATION_COMPLETED)) { log.debug("Received {} complete message({})", response.getClass().getSimpleName(), response.getCorrelationID()); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java index 034990c4a..af43acf8b 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/schedulablejobs/RecalculateChecksumWorkflowIT.java @@ -67,7 +67,7 @@ void testWorkflowRecalculatesChecksum() throws Exception { workflow.start(); Instant afterWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); - Assertions.assertTrue(beforeWorkflowDate.toEpochMilli() < afterWorkflowDate.toEpochMilli(), + Assertions.assertTrue(beforeWorkflowDate.isBefore(afterWorkflowDate), beforeWorkflowDate.toEpochMilli() + " < " + afterWorkflowDate.toEpochMilli()); } @@ -92,7 +92,7 @@ void testWorkflowDoesNotRecalculateWhenNotNeeded() throws Exception { workflow.start(); Instant afterWorkflowDate = csCache.getCalculationInstant(defaultFileId, collectionID); - Assertions.assertEquals(afterWorkflowDate.toEpochMilli(), beforeWorkflowDate.toEpochMilli(), - beforeWorkflowDate.toEpochMilli() + " == " + afterWorkflowDate.toEpochMilli()); + Assertions.assertEquals(afterWorkflowDate, beforeWorkflowDate, + beforeWorkflowDate + " == " + afterWorkflowDate); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java index 858d48d96..43d605ad7 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelIT.java @@ -54,6 +54,7 @@ public class ChecksumPillarModelIT extends DefaultFixturePillarIT { @Override protected void initializeCUT() { + super.initializeCUT(); cache = new MemoryCacheMock(); alarmDispatcher = new AlarmDispatcher(settingsForCUT, messageBus); pillarModel = new ChecksumStorageModel(cache, alarmDispatcher, settingsForCUT); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java index dc0b0a3b6..67355e6ee 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelIT.java @@ -60,6 +60,7 @@ public class FullPillarModelIT extends DefaultFixturePillarIT { @Override protected void initializeCUT() { + super.initializeCUT(); cache = new MemoryCacheMock(); archives = new CollectionArchiveManager(settingsForCUT); alarmDispatcher = new AlarmDispatcher(settingsForCUT, messageBus); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java index d7f35b69b..bd988e96e 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/checksumcache/ChecksumDatabaseTest.java @@ -67,17 +67,17 @@ class ChecksumDatabaseTest { @BeforeEach void setup() throws Exception { loadSettings(); - collectionID = settings.getCollections().get(0).getID(); + collectionID = settings.getCollections().getFirst().getID(); - var dbsettings = settings.getReferenceSettings().getPillarSettings().getChecksumDatabase(); - dbsettings.setDatabaseURL(postgreSQLContainer.getJdbcUrl()); - dbsettings.setUsername(postgreSQLContainer.getUsername()); - dbsettings.setPassword(postgreSQLContainer.getPassword()); - dbsettings.setDriverClass(postgreSQLContainer.getDriverClassName()); + var dbSettings = settings.getReferenceSettings().getPillarSettings().getChecksumDatabase(); + dbSettings.setDatabaseURL(postgreSQLContainer.getJdbcUrl()); + dbSettings.setUsername(postgreSQLContainer.getUsername()); + dbSettings.setPassword(postgreSQLContainer.getPassword()); + dbSettings.setDriverClass(postgreSQLContainer.getDriverClassName()); - try (var connection = DriverManager.getConnection(dbsettings.getDatabaseURL(), - dbsettings.getUsername(), - dbsettings.getPassword()); + try (var connection = DriverManager.getConnection(dbSettings.getDatabaseURL(), + dbSettings.getUsername(), + dbSettings.getPassword()); var statement = connection.createStatement()) { //quickly empty the database between tests statement.execute("TRUNCATE TABLE checksums;"); @@ -376,7 +376,9 @@ void testGetChecksumResult() { addStep("Test with too old an upper limit", "Does not retrieve the file"); extractedChecksums = cache.getChecksumResult(Instant.EPOCH, - DEFAULT_DATE.minusMillis(1), DEFAULT_FILE_ID, collectionID); + DEFAULT_DATE.minusMillis(1), + DEFAULT_FILE_ID, + collectionID); Assertions.assertEquals(0, extractedChecksums.getEntries().size()); } diff --git a/bitrepository-reference-pillar/src/test/resources/logback-test.xml b/bitrepository-reference-pillar/src/test/resources/logback-test.xml index 0b5b01672..d5b03bddd 100644 --- a/bitrepository-reference-pillar/src/test/resources/logback-test.xml +++ b/bitrepository-reference-pillar/src/test/resources/logback-test.xml @@ -6,7 +6,7 @@ - + diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/database/SqlScriptRunner.java b/bitrepository-service/src/main/java/org/bitrepository/service/database/SqlScriptRunner.java index 629f114cc..b98a94888 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/database/SqlScriptRunner.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/database/SqlScriptRunner.java @@ -63,7 +63,7 @@ public SqlScriptRunner(Connection connection, } /** - * @param delimiter The statement delimiter, eg. ';' for mysql. + * @param delimiter The statement delimiter, i.e. ';' for mysql. * @param fullLineDelimiter true if the delimiter used to distinguish between lines. */ public void setDelimiter(String delimiter, boolean fullLineDelimiter) { diff --git a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate2to3.sql b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate2to3.sql index 25f59a445..dc2c2e625 100644 --- a/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate2to3.sql +++ b/bitrepository-service/src/main/resources/sql/postgres/auditContributorDBUpdate2to3.sql @@ -21,10 +21,10 @@ --- -- Change the 'information' column from varchar(255) into TEXT -ALTER TABLE IF EXISTS audittrail ALTER COLUMN information TYPE TEXT; +ALTER TABLE audittrail ALTER COLUMN information TYPE TEXT; -- Change the 'audit' column from varchar(255) into TEXT -ALTER TABLE IF EXISTS audittrail ALTER COLUMN audit TYPE TEXT; +ALTER TABLE audittrail ALTER COLUMN audit TYPE TEXT; -- Set the table versions insert into tableversions ( tablename, version ) values ( 'auditcontributordb', 3) on conflict do nothing; diff --git a/pom.xml b/pom.xml index 5fc2d9d67..3e0015d08 100644 --- a/pom.xml +++ b/pom.xml @@ -611,7 +611,7 @@ test-jar + so ensure it is built beforehand, i.e. in phase prepare-package--> prepare-package @@ -781,7 +781,7 @@ 21 - process-classes + process-classes 33-SNAPSHOT 15-SNAPSHOT 4.0.12 From 53129ff5c4a3de808343db85f0da8761198c57e5 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Thu, 30 Jul 2026 12:17:55 +0200 Subject: [PATCH 21/22] Artemis with Anonymous login --- .../org/bitrepository/client/DefaultFixtureClientIT.java | 5 ++--- .../protocol/activemq/ArtemisConnectionFactoryProvider.java | 2 +- .../bitrepository/protocol/bus/ActiveMQMessageBusIT.java | 6 +++--- .../settings/xml/bitrepository-devel/RepositorySettings.xml | 2 -- .../workflow/step/UpdateChecksumsStepTest.java | 4 +++- .../src/test/resources/conf/RepositorySettings.xml | 2 -- 6 files changed, 9 insertions(+), 12 deletions(-) diff --git a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java index a6edb2b56..923fe3670 100644 --- a/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java +++ b/bitrepository-client/src/test/java/org/bitrepository/client/DefaultFixtureClientIT.java @@ -64,7 +64,8 @@ public abstract class DefaultFixtureClientIT extends IntegrationTest { @Container static ArtemisContainer activemqContainer = new ArtemisFixedPortContainer("apache/artemis:2.55.0") - .withFixedExposedPort(9999, 61616, InternetProtocol.TCP); + .withFixedExposedPort(9999, 61616, InternetProtocol.TCP) + .withEnv("ANONYMOUS_LOGIN","true"); @Override protected void initializeCUT() { @@ -108,8 +109,6 @@ protected void setupMessageBus() { } } settingsForTestClient.getMessageBusConfiguration().setURL(activemqContainer.getBrokerUrl()); - settingsForTestClient.getMessageBusConfiguration().setUsername(activemqContainer.getUser()); - settingsForTestClient.getMessageBusConfiguration().setPassword(activemqContainer.getPassword()); messageBus = new ActiveMQMessageBus(settingsForTestClient, securityManager); MessageBusManager.clear(); MessageBusManager.injectCustomMessageBus(MessageBusManager.DEFAULT_MESSAGE_BUS, messageBus); diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ArtemisConnectionFactoryProvider.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ArtemisConnectionFactoryProvider.java index 5da3b5a9c..f878e0041 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ArtemisConnectionFactoryProvider.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ArtemisConnectionFactoryProvider.java @@ -52,7 +52,7 @@ private ArtemisConnectionFactoryProvider() {} public static ActiveMQConnectionFactory create(MessageBusConfiguration config) { String url = resolveUrl(config); log.info("Creating Artemis connection factory with URL: {}", url); - return new ActiveMQConnectionFactory(url, config.getUsername(), config.getPassword()); + return new ActiveMQConnectionFactory(url); } /** diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java index dbba2ed6d..4bd7cbd0b 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/bus/ActiveMQMessageBusIT.java @@ -55,7 +55,9 @@ class ActiveMQMessageBusIT extends GeneralMessageBusIT { @Container - static ArtemisContainer activemqContainer = new ArtemisContainer("apache/artemis:2.55.0"); + static ArtemisContainer activemqContainer = new ArtemisContainer("apache/artemis:2.55.0") + .withEnv("ANONYMOUS_LOGIN","true") + ; private MessageBusConfiguration messageBusConfig; @@ -73,8 +75,6 @@ protected void setupMessageBus() { messageBusConfig = new MessageBusConfiguration(); messageBusConfig.setURL(activemqContainer.getBrokerUrl()); messageBusConfig.setName(activemqContainer.getContainerName()); - messageBusConfig.setUsername(activemqContainer.getUser()); - messageBusConfig.setPassword(activemqContainer.getPassword()); settingsForTestClient.getRepositorySettings() .getProtocolSettings() .setMessageBusConfiguration(messageBusConfig); diff --git a/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/RepositorySettings.xml b/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/RepositorySettings.xml index a28b2cfca..b44eae424 100644 --- a/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/RepositorySettings.xml +++ b/bitrepository-core/src/test/resources/settings/xml/bitrepository-devel/RepositorySettings.xml @@ -53,8 +53,6 @@ MyMessageBus tcp://localhost:9999 - artemis - artemis diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java index 4e4f6d212..f7c05648c 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java @@ -52,9 +52,11 @@ import static org.bitrepository.common.utils.AllureTestUtils.addDescription; import static org.bitrepository.common.utils.AllureTestUtils.addStep; +import static org.mockito.AdditionalMatchers.or; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -324,7 +326,7 @@ void testFullChecksumCollection() throws WorkflowAbortedException { makeFullQueries(settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID()); verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), - any(), anyString(), eq(expectedContributorQueries), any(EventHandler.class)); + any(), or(anyString(),isNull()), eq(expectedContributorQueries), any(EventHandler.class)); verifyNoMoreInteractions(alerter); } diff --git a/bitrepository-reference-pillar/src/test/resources/conf/RepositorySettings.xml b/bitrepository-reference-pillar/src/test/resources/conf/RepositorySettings.xml index e429d2bde..f858da3e3 100644 --- a/bitrepository-reference-pillar/src/test/resources/conf/RepositorySettings.xml +++ b/bitrepository-reference-pillar/src/test/resources/conf/RepositorySettings.xml @@ -59,8 +59,6 @@ PillarIntegrationTestMessageBus tcp://localhost:61616 - artemis - artemis From 37a9450571e0a075fceb468bc76d579a200fb235 Mon Sep 17 00:00:00 2001 From: Asger Askov Blekinge Date: Fri, 31 Jul 2026 16:22:18 +0200 Subject: [PATCH 22/22] Fixes 2 --- .../workflow/step/UpdateChecksumsStepTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java index f7c05648c..9a70c4a56 100644 --- a/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java +++ b/bitrepository-integrity-service/src/test/java/org/bitrepository/integrityservice/workflow/step/UpdateChecksumsStepTest.java @@ -314,7 +314,7 @@ void testFullChecksumCollection() throws WorkflowAbortedException { eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), anyString(), any(ContributorQuery[].class), any(EventHandler.class)); - when(model.getDateForNewestChecksumEntryForPillarInstant(anyString(), anyString())).thenReturn(Instant.EPOCH); + when(model.getDateForNewestChecksumEntryForPillarInstant(anyString(), anyString())).thenReturn(Instant.MIN); when(integrityContributors.getActiveContributors()) .thenReturn(new HashSet<>(List.of(TEST_PILLAR_1))).thenReturn(new HashSet<>()); @@ -323,7 +323,7 @@ void testFullChecksumCollection() throws WorkflowAbortedException { step.performStep(); ContributorQuery[] expectedContributorQueries = - makeFullQueries(settings.getRepositorySettings().getCollections().getCollection().get(0).getPillarIDs().getPillarID()); + makeFullQueries(settings.getRepositorySettings().getCollections().getCollection().getFirst().getPillarIDs().getPillarID()); verify(collector).getChecksums(eq(TEST_COLLECTION), any(), any(ChecksumSpecTYPE.class), any(), or(anyString(),isNull()), eq(expectedContributorQueries), any(EventHandler.class));