Skip to content

Commit

Permalink
#529: simplify configuration and keep it compatible
Browse files Browse the repository at this point in the history
  • Loading branch information
gessnerfl committed Aug 2, 2024
1 parent ceb07a9 commit d831278
Show file tree
Hide file tree
Showing 8 changed files with 39 additions and 111 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,12 @@ To keep memory resources under control, there is a parallel process that deletes
```yaml
fakesmtp:
persistence:
dataRetention:
maxNumberEmails:
emails:
#max numbers of most recent emails to retain and not deleted by the parallel process
maxNumberOfRecords: 10
timer:
maxNumberEmails: 10
# configuration settings of the background process (timer) responsible to delete the oldest emails
emailDataRetentionTimer:
#each 5 minutes from 'initialDelay' (see below), the parallel process will check if the deletion is necessary
fixedDelay: 300000
#each 'initialDelay' (see above) after 2 minutes from the start, the parallel process will start checking if the deletion is necessary
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,67 +161,31 @@ public void setInitialDelay(long initialDelay) {
this.initialDelay = initialDelay;
}
}

public static class DataRetentionSetting {
static final int DEFAULT_MAX_NUMBER_RECORDS = 100;

private boolean enabled = true;
private int maxNumberOfRecords = DEFAULT_MAX_NUMBER_RECORDS;
@NotNull
@Valid
private FixedDelayTimerSettings timer = new FixedDelayTimerSettings();

public boolean isEnabled() {
return enabled;
}

public void setEnabled(boolean enabled) {
this.enabled = enabled;
}

public int getMaxNumberOfRecords() {
return maxNumberOfRecords;
}

public void setMaxNumberOfRecords(int maxNumberOfRecords) {
this.maxNumberOfRecords = maxNumberOfRecords;
}

public @NotNull @Valid FixedDelayTimerSettings getTimer() {
return timer;
}
public static class Persistence {
public static final int DEFAULT_MAX_NUMBER_EMAILS = 100;

public void setTimer(@NotNull @Valid FixedDelayTimerSettings timer) {
this.timer = timer;
}
}
@NotNull
private Integer maxNumberEmails = DEFAULT_MAX_NUMBER_EMAILS;

public static class DataRetention {
@NotNull
@Valid
private DataRetentionSetting emails = new DataRetentionSetting();
private FixedDelayTimerSettings emailDataRetentionTimer = new FixedDelayTimerSettings();

public @NotNull @Valid DataRetentionSetting getEmails() {
return emails;
public @NotNull Integer getMaxNumberEmails() {
return maxNumberEmails;
}

public void setEmails(@NotNull @Valid DataRetentionSetting emails) {
this.emails = emails;
public void setMaxNumberEmails(@NotNull Integer maxNumberEmails) {
this.maxNumberEmails = maxNumberEmails;
}
}

public static class Persistence {

@NotNull
@Valid
private DataRetention dataRetention = new DataRetention();

public DataRetention getDataRetention() {
return dataRetention;
public @NotNull @Valid FixedDelayTimerSettings getEmailDataRetentionTimer() {
return emailDataRetentionTimer;
}

public void setDataRetention(DataRetention dataRetention) {
this.dataRetention = dataRetention;
public void setEmailDataRetentionTimer(@NotNull @Valid FixedDelayTimerSettings emailDataRetentionTimer) {
this.emailDataRetentionTimer = emailDataRetentionTimer;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ public EmailRetentionTimer(FakeSmtpConfigurationProperties fakeSmtpConfiguration
this.logger = logger;
}

@Scheduled(fixedDelayString = "${fakesmtp.persistence.dataRetention.email.timer.fixedDelay:300000}", initialDelayString = "${fakesmtp.persistence.dataRetention.email.timer.initialDelay:60000}")
@Scheduled(fixedDelayString = "${fakesmtp.persistence.emailDataRetentionTimer.fixedDelay:300000}", initialDelayString = "${fakesmtp.persistence.emailDataRetentionTimer.initialDelay:60000}")
public void deleteOutdatedMails(){
final var emailDataRetention = fakeSmtpConfigurationProperties.getPersistence().getDataRetention().getEmails();
if(emailDataRetention.isEnabled() && emailDataRetention.getMaxNumberOfRecords() > 0){
var maxNumber = emailDataRetention.getMaxNumberOfRecords();
final var persistence = fakeSmtpConfigurationProperties.getPersistence();
if(persistence.getMaxNumberEmails() > 0){
var maxNumber = persistence.getMaxNumberEmails();
var count = emailRepository.deleteEmailsExceedingDateRetentionLimit(maxNumber);
logger.info("Deleted {} emails which exceeded the maximum number {} of emails to be stored", count, maxNumber);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,9 @@ void shouldLoadConfigurationParameters() throws Exception {
assertEquals(InetAddress.getByName("127.0.0.1"), sut.getBindAddress());
assertNull(sut.getAuthentication());
assertNotNull(sut.getPersistence());
assertNotNull(sut.getPersistence().getDataRetention());
assertNotNull(sut.getPersistence().getDataRetention().getEmails());
assertNotNull(sut.getPersistence().getDataRetention().getEmails().getTimer());
assertTrue(sut.getPersistence().getDataRetention().getEmails().isEnabled());
assertEquals(FakeSmtpConfigurationProperties.DataRetentionSetting.DEFAULT_MAX_NUMBER_RECORDS, sut.getPersistence().getDataRetention().getEmails().getMaxNumberOfRecords());
assertEquals(FakeSmtpConfigurationProperties.FixedDelayTimerSettings.DEFAULT_FIXED_DELAY, sut.getPersistence().getDataRetention().getEmails().getTimer().getFixedDelay());
assertEquals(FakeSmtpConfigurationProperties.FixedDelayTimerSettings.DEFAULT_INITIAL_DELAY, sut.getPersistence().getDataRetention().getEmails().getTimer().getInitialDelay());
assertNotNull(sut.getPersistence().getEmailDataRetentionTimer());
assertEquals(FakeSmtpConfigurationProperties.Persistence.DEFAULT_MAX_NUMBER_EMAILS, sut.getPersistence().getMaxNumberEmails());
assertEquals(FakeSmtpConfigurationProperties.FixedDelayTimerSettings.DEFAULT_FIXED_DELAY, sut.getPersistence().getEmailDataRetentionTimer().getFixedDelay());
assertEquals(FakeSmtpConfigurationProperties.FixedDelayTimerSettings.DEFAULT_INITIAL_DELAY, sut.getPersistence().getEmailDataRetentionTimer().getInitialDelay());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,9 @@ void shouldLoadConfigurationParameters() throws Exception {
Assertions.assertEquals("user", sut.getAuthentication().getUsername());
Assertions.assertEquals("password", sut.getAuthentication().getPassword());
Assertions.assertNotNull(sut.getPersistence());
assertNotNull(sut.getPersistence().getDataRetention());
assertNotNull(sut.getPersistence().getDataRetention().getEmails());
assertNotNull(sut.getPersistence().getDataRetention().getEmails().getTimer());
assertTrue(sut.getPersistence().getDataRetention().getEmails().isEnabled());
assertEquals(FakeSmtpConfigurationProperties.DataRetentionSetting.DEFAULT_MAX_NUMBER_RECORDS, sut.getPersistence().getDataRetention().getEmails().getMaxNumberOfRecords());
assertEquals(FakeSmtpConfigurationProperties.FixedDelayTimerSettings.DEFAULT_FIXED_DELAY, sut.getPersistence().getDataRetention().getEmails().getTimer().getFixedDelay());
assertEquals(FakeSmtpConfigurationProperties.FixedDelayTimerSettings.DEFAULT_INITIAL_DELAY, sut.getPersistence().getDataRetention().getEmails().getTimer().getInitialDelay());
assertNotNull(sut.getPersistence().getEmailDataRetentionTimer());
assertEquals(FakeSmtpConfigurationProperties.Persistence.DEFAULT_MAX_NUMBER_EMAILS, sut.getPersistence().getMaxNumberEmails());
assertEquals(FakeSmtpConfigurationProperties.FixedDelayTimerSettings.DEFAULT_FIXED_DELAY, sut.getPersistence().getEmailDataRetentionTimer().getFixedDelay());
assertEquals(FakeSmtpConfigurationProperties.FixedDelayTimerSettings.DEFAULT_INITIAL_DELAY, sut.getPersistence().getEmailDataRetentionTimer().getInitialDelay());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,9 @@ void shouldLoadConfigurationParameters() throws Exception {
Assertions.assertEquals(InetAddress.getByName("127.0.0.1"), sut.getBindAddress());
Assertions.assertNull(sut.getAuthentication());
Assertions.assertNotNull(sut.getPersistence());
assertNotNull(sut.getPersistence().getDataRetention());
assertNotNull(sut.getPersistence().getDataRetention().getEmails());
assertNotNull(sut.getPersistence().getDataRetention().getEmails().getTimer());
assertTrue(sut.getPersistence().getDataRetention().getEmails().isEnabled());
assertEquals(5, sut.getPersistence().getDataRetention().getEmails().getMaxNumberOfRecords());
assertEquals(100000, sut.getPersistence().getDataRetention().getEmails().getTimer().getFixedDelay());
assertEquals(10000, sut.getPersistence().getDataRetention().getEmails().getTimer().getInitialDelay());
assertNotNull(sut.getPersistence().getEmailDataRetentionTimer());
assertEquals(5, sut.getPersistence().getMaxNumberEmails());
assertEquals(100000, sut.getPersistence().getEmailDataRetentionTimer().getFixedDelay());
assertEquals(10000, sut.getPersistence().getEmailDataRetentionTimer().getInitialDelay());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,44 +28,18 @@ class EmailRetentionTimerTest {
void shouldTriggerDeletionWhenDataRetentionIsConfigured(){
var maxNumber = 5;
var persistence = mock(FakeSmtpConfigurationProperties.Persistence.class);
var dataRetention = mock(FakeSmtpConfigurationProperties.DataRetention.class);
var emailRetention = mock(FakeSmtpConfigurationProperties.DataRetentionSetting.class);
when(persistence.getDataRetention()).thenReturn(dataRetention);
when(dataRetention.getEmails()).thenReturn(emailRetention);
when(emailRetention.isEnabled()).thenReturn(true);
when(emailRetention.getMaxNumberOfRecords()).thenReturn(maxNumber);
when(persistence.getMaxNumberEmails()).thenReturn(maxNumber);
when(fakeSmtpConfigurationProperties.getPersistence()).thenReturn(persistence);

sut.deleteOutdatedMails();

verify(emailRepository).deleteEmailsExceedingDateRetentionLimit(maxNumber);
}

@Test
void shouldNotTriggerDeletionWhenEmailDataRetentionIsInActive(){
var persistence = mock(FakeSmtpConfigurationProperties.Persistence.class);
var dataRetention = mock(FakeSmtpConfigurationProperties.DataRetention.class);
var emailRetention = mock(FakeSmtpConfigurationProperties.DataRetentionSetting.class);
when(persistence.getDataRetention()).thenReturn(dataRetention);
when(dataRetention.getEmails()).thenReturn(emailRetention);
when(emailRetention.isEnabled()).thenReturn(false);
when(fakeSmtpConfigurationProperties.getPersistence()).thenReturn(persistence);

sut.deleteOutdatedMails();

verify(emailRepository, never()).deleteEmailsExceedingDateRetentionLimit(anyInt());
}

@Test
void shouldNotTriggerDeletionWhenConfiguredMaxNumberIsLessOrEqualToZero(){
var maxNumber = 0;
var persistence = mock(FakeSmtpConfigurationProperties.Persistence.class);
var dataRetention = mock(FakeSmtpConfigurationProperties.DataRetention.class);
var emailRetention = mock(FakeSmtpConfigurationProperties.DataRetentionSetting.class);
when(persistence.getDataRetention()).thenReturn(dataRetention);
when(dataRetention.getEmails()).thenReturn(emailRetention);
when(emailRetention.isEnabled()).thenReturn(true);
when(emailRetention.getMaxNumberOfRecords()).thenReturn(maxNumber);
when(persistence.getMaxNumberEmails()).thenReturn(0);
when(fakeSmtpConfigurationProperties.getPersistence()).thenReturn(persistence);

sut.deleteOutdatedMails();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ fakesmtp:
port: 1234
bindAddress: 127.0.0.1
persistence:
dataRetention:
emails:
maxNumberOfRecords: 5
timer:
fixedDelay: 100000
initialDelay: 10000
maxNumberEmails: 5
emailDataRetentionTimer:
fixedDelay: 100000
initialDelay: 10000

0 comments on commit d831278

Please sign in to comment.