diff --git a/application/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java b/application/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java new file mode 100644 index 00000000..eaaeac95 --- /dev/null +++ b/application/src/integrationTest/java/de/cotto/lndmanagej/controller/StatusControllerIT.java @@ -0,0 +1,35 @@ +package de.cotto.lndmanagej.controller; + +import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.service.OwnNodeService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MockMvc; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; + +@WebMvcTest(controllers = StatusController.class) +class StatusControllerIT { + private static final String PREFIX = "/api/status/"; + + @Autowired + private MockMvc mockMvc; + + @MockBean + @SuppressWarnings("unused") + private Metrics metrics; + + @MockBean + private OwnNodeService ownNodeService; + + @Test + void isSyncedToChain() throws Exception { + when(ownNodeService.isSyncedToChain()).thenReturn(true); + mockMvc.perform(get(PREFIX + "/synced-to-chain")) + .andExpect(content().string("true")); + } +} \ No newline at end of file diff --git a/application/src/main/java/de/cotto/lndmanagej/controller/StatusController.java b/application/src/main/java/de/cotto/lndmanagej/controller/StatusController.java new file mode 100644 index 00000000..ad82b3c3 --- /dev/null +++ b/application/src/main/java/de/cotto/lndmanagej/controller/StatusController.java @@ -0,0 +1,30 @@ +package de.cotto.lndmanagej.controller; + +import com.codahale.metrics.MetricRegistry; +import de.cotto.lndmanagej.controller.dto.ObjectMapperConfiguration; +import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.service.OwnNodeService; +import org.springframework.context.annotation.Import; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/status/") +@Import(ObjectMapperConfiguration.class) +public class StatusController { + private final OwnNodeService ownNodeService; + private final Metrics metrics; + + public StatusController(OwnNodeService ownNodeService, Metrics metrics) { + this.ownNodeService = ownNodeService; + this.metrics = metrics; + } + + @GetMapping("/synced-to-chain") + public boolean isSyncedToChain() { + metrics.mark(MetricRegistry.name(getClass(), "isSyncedToChain")); + return ownNodeService.isSyncedToChain(); + } + +} diff --git a/application/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java b/application/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java new file mode 100644 index 00000000..d2e85339 --- /dev/null +++ b/application/src/test/java/de/cotto/lndmanagej/controller/StatusControllerTest.java @@ -0,0 +1,40 @@ +package de.cotto.lndmanagej.controller; + +import de.cotto.lndmanagej.metrics.Metrics; +import de.cotto.lndmanagej.service.OwnNodeService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class StatusControllerTest { + @InjectMocks + private StatusController statusController; + + @Mock + private OwnNodeService ownNodeService; + + @Mock + private Metrics metrics; + + @Test + void isSyncedToChain() { + when(ownNodeService.isSyncedToChain()).thenReturn(true); + + assertThat(statusController.isSyncedToChain()).isTrue(); + verify(metrics).mark(argThat(name -> name.endsWith(".isSyncedToChain"))); + } + + @Test + void isSyncedToChain_false() { + when(ownNodeService.isSyncedToChain()).thenReturn(false); + assertThat(statusController.isSyncedToChain()).isFalse(); + } +} \ No newline at end of file