This is the codeAbility Sharing Platform! Learn more about the codeAbility Sharing Platform.

Skip to content
Snippets Groups Projects
Commit 36501e27 authored by Michael Breu's avatar Michael Breu
Browse files

Finally correct version

parent f6207a01
1 merge request!264audit event failed tests
This commit is part of merge request !264. Comments created here will be created in the context of that merge request.
......@@ -19,5 +19,11 @@ public interface PersistenceAuditEventRepository extends JpaRepository<Persisten
List<PersistentAuditEvent> findTop1000ByAuditEventDateBefore(Instant before);
/**
*
* Unsafe due to https://hibernate.atlassian.net/browse/HHH-5529.
* May be solved when migrating to hibernate > 6.0.0.Beta2
*/
int deleteByAuditEventDateBefore(Instant before);
}
......@@ -17,7 +17,6 @@ import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionTemplate;
......@@ -32,7 +31,6 @@ import tech.jhipster.config.JHipsterProperties;
@Transactional
public class AuditEventService {
@SuppressWarnings("unused")
private static final Logger LOGGER = LoggerFactory.getLogger(AuditEventService.class);
private final JHipsterProperties jHipsterProperties;
......@@ -61,6 +59,7 @@ public class AuditEventService {
* This is scheduled to get fired at 11:00 (pm) UTC.
*/
@Scheduled(cron = "0 0 23 * * ?")
@Transactional(propagation = Propagation.REQUIRES_NEW)
public int removeOldAuditEvents() {
final TransactionTemplate isolatedTransactionTemplate = new TransactionTemplate(platformTransactionManager);
isolatedTransactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
......@@ -81,10 +80,11 @@ public class AuditEventService {
return !auditEventDeleteCandidates.isEmpty();
});
}
LOGGER.info("Cleaned Up {} outdated audit events", count.intValue());
return count.intValue();
}
@Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED)
@Transactional(propagation = Propagation.REQUIRES_NEW)
public int removeOldAuditEvents2() {
Instant deleteBefore = Instant.now().minus(jHipsterProperties.getAuditEvents().getRetentionPeriod(), ChronoUnit.DAYS);
return this.persistenceAuditEventRepository.deleteByAuditEventDateBefore(deleteBefore);
......
......@@ -12,8 +12,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.junit.Assert;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -21,9 +22,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
import tech.jhipster.config.JHipsterProperties;
......@@ -61,15 +60,7 @@ public class AuditEventServiceIT {
@BeforeEach
@Timeout(value = 5, unit = TimeUnit.MINUTES)
public void init() {
persistenceAuditEventRepository.deleteAll();
currentAuditLogs = persistenceAuditEventRepository.findAll().size();
log.info("There where already {} AuditEvents", currentAuditLogs);
final List<PersistentAuditEvent> auditEventDeleteCandidates = persistenceAuditEventRepository.findTop1000ByAuditEventDateBefore(
Instant.now().minus(jHipsterProperties.getAuditEvents().getRetentionPeriod(), ChronoUnit.DAYS)
);
Assert.assertTrue("There are already outdated Elements?", auditEventDeleteCandidates.size() == 0);
public void writevariousLogs() {
log.info("Preparing {} outdated AuditEvents", MAX_OUTDATEDVALUES);
auditEventsOld = new ArrayList<>();
for (int i = 1; i <= MAX_OUTDATEDVALUES; i++) {
......@@ -80,7 +71,8 @@ public class AuditEventServiceIT {
auditEventOld.setPrincipal("test-user-old");
auditEventOld.setAuditEventType("test-type");
auditEventOld.getData().put("someDate", "someValue" + i);
auditEventOld.getData().put("someData", "someValue" + i);
auditEventOld.getData().put("someExtraData", "secondValue" + 2 * i);
auditEventsOld.add(auditEventOld);
}
log.info("Prepared {} outdated AuditEvents", MAX_OUTDATEDVALUES);
......@@ -95,80 +87,63 @@ public class AuditEventServiceIT {
auditEventNew.setAuditEventDate(Instant.now());
auditEventNew.setPrincipal("test-user-new");
auditEventNew.setAuditEventType("test-type");
TransactionTemplate isolatedTransactionTemplate = new TransactionTemplate(platformTransactionManager);
isolatedTransactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
isolatedTransactionTemplate.executeWithoutResult(status -> {
persistenceAuditEventRepository.deleteAll();
currentAuditLogs = persistenceAuditEventRepository.findAll().size();
persistenceAuditEventRepository.saveAll(auditEventsOld);
persistenceAuditEventRepository.save(auditEventWithinRetention);
persistenceAuditEventRepository.save(auditEventNew);
persistenceAuditEventRepository.flush();
assertThat(persistenceAuditEventRepository.findAll().size()).isEqualTo(currentAuditLogs + auditEventsOld.size() + 2);
log.info("Saved {} outdated AuditEvents into database", auditEventsOld.size());
});
}
@Test
@Disabled // currently not working
@Timeout(value = 5, unit = TimeUnit.MINUTES)
@DirtiesContext
public void verifyOldAuditEventsAreDeleted() {
TransactionTemplate isolatedTransactionTemplate = new TransactionTemplate(platformTransactionManager);
isolatedTransactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
auditEventsOld.forEach(auditEventOld -> persistenceAuditEventRepository.save(auditEventOld));
persistenceAuditEventRepository.save(auditEventWithinRetention);
persistenceAuditEventRepository.save(auditEventNew);
persistenceAuditEventRepository.flush();
assertThat(persistenceAuditEventRepository.findAll().size()).isEqualTo(currentAuditLogs + auditEventsOld.size() + 2);
isolatedTransactionTemplate.execute(
new TransactionCallback<Boolean>() {
@Override
public Boolean doInTransaction(TransactionStatus status) {
log.info("Saved {} outdated AuditEvents", MAX_OUTDATEDVALUES);
assertThat(persistenceAuditEventRepository.findAll().size()).isGreaterThan(MAX_OUTDATEDVALUES);
log.info("Removing outdated AuditEvents");
int count = auditEventService.removeOldAuditEvents();
// persistenceAuditEventRepository.flush();
log.info("Removed {} outdated AuditEvents", count);
return true;
}
}
);
log.info("Removing outdated AuditEvents");
int deleted = auditEventService.removeOldAuditEvents();
assertThat(deleted).isEqualTo(MAX_OUTDATEDVALUES);
log.info("Removed {} outdated AuditEvents", deleted);
assertThat(persistenceAuditEventRepository.findAll().size()).isEqualTo(currentAuditLogs + 2);
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-old")).isEmpty();
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-retention")).isNotEmpty();
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-new")).isNotEmpty();
TransactionTemplate isolatedTransactionTemplate = new TransactionTemplate(platformTransactionManager);
isolatedTransactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
isolatedTransactionTemplate.executeWithoutResult(status -> {
assertThat(persistenceAuditEventRepository.findAll().size()).isEqualTo(currentAuditLogs + 2);
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-old")).isEmpty();
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-retention")).isNotEmpty();
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-new")).isNotEmpty();
});
}
@Test
// @Disabled // currently not working
// @Disabled // currently not working
@Timeout(value = 5, unit = TimeUnit.MINUTES)
@DirtiesContext
public void verifyOldAuditEventsAreDeleted2() {
persistenceAuditEventRepository.deleteAll();
persistenceAuditEventRepository.saveAll(auditEventsOld);
Assertions.assertTrue(
auditEventsOld
.stream()
.map(PersistentAuditEvent::getAuditEventDate)
.allMatch(d -> d.isBefore(Instant.now().minus(jHipsterProperties.getAuditEvents().getRetentionPeriod(), ChronoUnit.DAYS)))
);
Assertions.assertTrue(
persistenceAuditEventRepository
.findAll()
.stream()
.map(PersistentAuditEvent::getAuditEventDate)
.allMatch(d -> d.isBefore(Instant.now().minus(jHipsterProperties.getAuditEvents().getRetentionPeriod(), ChronoUnit.DAYS)))
);
persistenceAuditEventRepository.save(auditEventWithinRetention);
persistenceAuditEventRepository.save(auditEventNew);
assertThat(persistenceAuditEventRepository.findAll().size()).isEqualTo(currentAuditLogs + auditEventsOld.size() + 2);
this.auditEventService.removeOldAuditEvents2();
int deleted = this.auditEventService.removeOldAuditEvents2();
assertThat(deleted).isEqualTo(MAX_OUTDATEDVALUES);
assertThat(persistenceAuditEventRepository.findAll().size()).isEqualTo(currentAuditLogs + 2);
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-old")).isEmpty();
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-retention")).isNotEmpty();
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-new")).isNotEmpty();
TransactionTemplate isolatedTransactionTemplate = new TransactionTemplate(platformTransactionManager);
isolatedTransactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
isolatedTransactionTemplate.executeWithoutResult(status -> {
assertThat(persistenceAuditEventRepository.findAll().size()).isEqualTo(currentAuditLogs + 2);
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-old")).isEmpty();
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-retention")).isNotEmpty();
assertThat(persistenceAuditEventRepository.findByPrincipal("test-user-new")).isNotEmpty();
});
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment