diff --git a/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/BasicMessageRetryHandler.java b/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/BasicMessageRetryHandler.java index cbae06d1..9bd2b5f3 100644 --- a/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/BasicMessageRetryHandler.java +++ b/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/BasicMessageRetryHandler.java @@ -43,8 +43,6 @@ public boolean handleException(Response t, int retryCount, Throwable e) { return false; } - - protected abstract void add(MessageRetry messageRetry); } diff --git a/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/InMemoryMessageRetryHandler.java b/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/InMemoryMessageRetryHandler.java index cc34a02a..93cf9bd4 100644 --- a/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/InMemoryMessageRetryHandler.java +++ b/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/InMemoryMessageRetryHandler.java @@ -12,12 +12,17 @@ public class InMemoryMessageRetryHandler extends BasicMessageRetryHandler { private static final Logger LOG = LoggerFactory.getLogger(InMemoryMessageRetryHandler.class); - Queue queue = new ConcurrentLinkedQueue<>(); + private Queue queue = new ConcurrentLinkedQueue<>(); @Override public void add(MessageRetry t) { queue.add(t); } + + @Override + public void clearAll() { + while(queue.poll()!=null); + } @Override public Optional get() { diff --git a/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/MessageRetryHandler.java b/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/MessageRetryHandler.java index 048d7638..3759503c 100644 --- a/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/MessageRetryHandler.java +++ b/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/MessageRetryHandler.java @@ -10,4 +10,8 @@ public interface MessageRetryHandler { public Optional get(); + public void add(MessageRetry messageRetry); + + public void clearAll(); + } diff --git a/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/NoOpRetryHandler.java b/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/NoOpRetryHandler.java index ed3b334f..47d14354 100644 --- a/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/NoOpRetryHandler.java +++ b/libs/teams/teams-chat-workflow-spring-boot-starter/src/main/java/org/finos/springbot/teams/handlers/retry/NoOpRetryHandler.java @@ -17,4 +17,14 @@ public boolean handleException(Response t, int retryCount, Throwable e) { return false; } + @Override + public void add(MessageRetry messageRetry) { + //Do-Nothing + } + + @Override + public void clearAll() { + //Do-Nothing + } + } diff --git a/libs/teams/teams-chat-workflow-spring-boot-starter/src/test/java/org/finos/springbot/teams/handlers/retry/InMemoryMessageRetryHandlerTest.java b/libs/teams/teams-chat-workflow-spring-boot-starter/src/test/java/org/finos/springbot/teams/handlers/retry/InMemoryMessageRetryHandlerTest.java index 657c7bb6..8ede6491 100644 --- a/libs/teams/teams-chat-workflow-spring-boot-starter/src/test/java/org/finos/springbot/teams/handlers/retry/InMemoryMessageRetryHandlerTest.java +++ b/libs/teams/teams-chat-workflow-spring-boot-starter/src/test/java/org/finos/springbot/teams/handlers/retry/InMemoryMessageRetryHandlerTest.java @@ -10,7 +10,6 @@ import org.finos.springbot.workflow.response.DataResponse; import org.finos.springbot.workflow.response.Response; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @@ -24,43 +23,40 @@ public class InMemoryMessageRetryHandlerTest { TeamsChannel dummyChat = new TeamsChannel(); Object dummyObject = new Object(); - @BeforeEach - public void setUp() { - while(inMemoryMessageRetryHandler.queue.poll()!=null); - LocalDateTime currentTime= LocalDateTime.now(); + public void setUp(LocalDateTime retryTime1,LocalDateTime retryTime2) { + inMemoryMessageRetryHandler.clearAll(); Map data1 = new HashMap<>(); data1.put("key1", dummyObject); Map data2 = new HashMap<>(); data2.put("key2", dummyObject); Response r1 = new DataResponse(dummyChat, data1, ""); Response r2 = new DataResponse(dummyChat, data2, ""); - MessageRetry t1 = new MessageRetry(r1,3,5,currentTime.plusSeconds(5)); - MessageRetry t2 = new MessageRetry(r2,3,45,currentTime.plusSeconds(45)); - inMemoryMessageRetryHandler.queue.add(t1); - inMemoryMessageRetryHandler.queue.add(t2); + MessageRetry t1 = new MessageRetry(r1,3,45,retryTime1); + MessageRetry t2 = new MessageRetry(r2,3,45,retryTime2); + inMemoryMessageRetryHandler.add(t1); + inMemoryMessageRetryHandler.add(t2); } @Test - public void testGet() throws InterruptedException { + public void testFoundMessageForRetry() { + setUp(LocalDateTime.now().minusSeconds(100),LocalDateTime.now().plusSeconds(150)); Map expectedData = new HashMap<>(); expectedData.put("key1", dummyObject); - LocalDateTime futureTime = LocalDateTime.now().plusSeconds(10); - while(LocalDateTime.now().isBefore(futureTime)) { - Thread.sleep(1000); - } DataResponse actualResponse = (DataResponse) inMemoryMessageRetryHandler.get().get().getResponse(); Assertions.assertTrue(actualResponse.getData().equals(expectedData)); - Optional actualResult = inMemoryMessageRetryHandler.get(); - Assertions.assertFalse(actualResult.isPresent()); - } @Test - public void testGetNoData() throws InterruptedException { - LocalDateTime futureTime = LocalDateTime.now().plusSeconds(1); - while(LocalDateTime.now().isBefore(futureTime)) { - Thread.sleep(1000); - } + public void testNoMessageEligibleForRetry(){ + setUp(LocalDateTime.now().plusSeconds(100),LocalDateTime.now().plusSeconds(150)); Optional actualResponse = inMemoryMessageRetryHandler.get(); Assertions.assertFalse(actualResponse.isPresent()); } + + @Test + public void testNoMessageInQueue() { + inMemoryMessageRetryHandler.clearAll(); + Optional actualResponse = inMemoryMessageRetryHandler.get(); + Assertions.assertFalse(actualResponse.isPresent()); + + } }