Clockoffset now shifts, by tenant, the time at which beats are published.
diff --git a/component-test/src/main/java/io/mifos/rhythm/AbstractRhythmTest.java b/component-test/src/main/java/io/mifos/rhythm/AbstractRhythmTest.java
index f3c3f1b..763e832 100644
--- a/component-test/src/main/java/io/mifos/rhythm/AbstractRhythmTest.java
+++ b/component-test/src/main/java/io/mifos/rhythm/AbstractRhythmTest.java
@@ -25,6 +25,7 @@
import io.mifos.core.test.listener.EventRecorder;
import io.mifos.rhythm.api.v1.client.RhythmManager;
import io.mifos.rhythm.api.v1.domain.Beat;
+import io.mifos.rhythm.api.v1.domain.ClockOffset;
import io.mifos.rhythm.api.v1.events.BeatEvent;
import io.mifos.rhythm.api.v1.events.EventConstants;
import io.mifos.rhythm.service.config.RhythmConfiguration;
@@ -68,7 +69,7 @@
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
classes = {AbstractRhythmTest.TestConfiguration.class},
- properties = {"rhythm.user=homer", "rhythm.beatCheckRate=500"}
+ properties = {"rhythm.user=homer", "rhythm.beatCheckRate=1000"}
)
public class AbstractRhythmTest {
@@ -205,11 +206,20 @@
}
LocalDateTime getExpectedBeatTimestamp(final LocalDateTime fromTime, final Integer alignmentHour) {
+ return getExpectedBeatTimestamp(fromTime, alignmentHour, new ClockOffset());
+ }
+
+ LocalDateTime getExpectedBeatTimestamp(
+ final LocalDateTime fromTime,
+ final Integer alignmentHour,
+ final ClockOffset clockOffset) {
final LocalDateTime midnight = fromTime.truncatedTo(ChronoUnit.DAYS);
- return midnight.plusHours(alignmentHour);
+ return midnight.plusHours(alignmentHour + clockOffset.getHours())
+ .plusMinutes(clockOffset.getMinutes())
+ .plusSeconds(clockOffset.getSeconds());
}
private LocalDateTime getNextTimeStamp(final LocalDateTime fromTime) {
return fromTime.plusDays(1);
}
-}
+}
\ No newline at end of file
diff --git a/component-test/src/main/java/io/mifos/rhythm/TestBeats.java b/component-test/src/main/java/io/mifos/rhythm/TestBeats.java
index b3890a9..b420574 100644
--- a/component-test/src/main/java/io/mifos/rhythm/TestBeats.java
+++ b/component-test/src/main/java/io/mifos/rhythm/TestBeats.java
@@ -133,7 +133,30 @@
}
@Test
- public void shouldChangeTheTenantClockOffset() throws InterruptedException {
+ public void shouldBeatForMissingDays() throws InterruptedException {
+ final String applicationIdentifier = "funnybusiness-v6";
+ final String beatIdentifier = "fiddlebeat";
+ createBeatForThisHour(applicationIdentifier, beatIdentifier);
+
+ final int daysAgo = 10;
+ final LocalDateTime nextBeat = setBack(applicationIdentifier, beatIdentifier, daysAgo);
+
+ for (int i = daysAgo; i > 0; i--) {
+ Mockito.verify(beatPublisherServiceMock, Mockito.timeout(4_000).times(1))
+ .publishBeat(
+ beatIdentifier,
+ tenantDataStoreContext.getTenantName(),
+ applicationIdentifier,
+ nextBeat.minusDays(daysAgo));
+ }
+ }
+
+ @Test
+ public void clockOffsetShouldEffectBeatTiming() throws InterruptedException {
+ final String tenantIdentifier = tenantDataStoreContext.getTenantName();
+ final String applicationIdentifier = "funnybusiness-v7";
+ final String beatIdentifier = "fiddlebeat0";
+
final ClockOffset initialClockOffset = this.testSubject.getClockOffset();
Assert.assertEquals(Integer.valueOf(0), initialClockOffset.getHours());
Assert.assertEquals(Integer.valueOf(0), initialClockOffset.getMinutes());
@@ -147,21 +170,27 @@
final ClockOffset changedClockOffset = this.testSubject.getClockOffset();
Assert.assertEquals(offsetToNow, changedClockOffset);
- }
- @Test
- public void shouldBeatForMissingDays() throws InterruptedException {
- final String applicationIdentifier = "funnybusiness-v6";
- final String beatIdentifier = "fiddlebeat";
- createBeatForThisHour(applicationIdentifier, beatIdentifier);
+ final Beat beat = new Beat();
+ beat.setIdentifier(beatIdentifier);
+ beat.setAlignmentHour(0);
- final int daysAgo = 10;
- final LocalDateTime nextBeat = setBack(applicationIdentifier, beatIdentifier, daysAgo);
+ final LocalDateTime expectedBeatTimestamp = getExpectedBeatTimestamp(now, 0, offsetToNow);
- for (int i = daysAgo; i > 0; i--) {
- Mockito.verify(beatPublisherServiceMock, Mockito.timeout(4_000).times(1))
- .publishBeat(beatIdentifier, tenantDataStoreContext.getTenantName(), applicationIdentifier, nextBeat.minusDays(daysAgo));
- }
+ Mockito.doReturn(Optional.of("boop")).when(beatPublisherServiceMock)
+ .requestPermissionForBeats(Matchers.eq(tenantIdentifier), Matchers.eq(applicationIdentifier));
+ Mockito.when(beatPublisherServiceMock
+ .publishBeat(beatIdentifier, tenantIdentifier, applicationIdentifier, expectedBeatTimestamp))
+ .thenReturn(true);
+
+ this.testSubject.createBeat(applicationIdentifier, beat);
+
+ Assert.assertTrue(this.eventRecorder.wait(EventConstants.POST_BEAT, new BeatEvent(applicationIdentifier, beat.getIdentifier())));
+
+ Mockito.verify(beatPublisherServiceMock, Mockito.timeout(10_000).times(1)).publishBeat(beatIdentifier, tenantIdentifier, applicationIdentifier, expectedBeatTimestamp);
+
+ this.testSubject.setClockOffset(initialClockOffset);
+ Assert.assertTrue(this.eventRecorder.wait(EventConstants.PUT_CLOCKOFFSET, initialClockOffset));
}
@Transactional
diff --git a/service/src/main/java/io/mifos/rhythm/service/internal/command/handler/BeatCommandHandler.java b/service/src/main/java/io/mifos/rhythm/service/internal/command/handler/BeatCommandHandler.java
index a59c0ee..922d831 100644
--- a/service/src/main/java/io/mifos/rhythm/service/internal/command/handler/BeatCommandHandler.java
+++ b/service/src/main/java/io/mifos/rhythm/service/internal/command/handler/BeatCommandHandler.java
@@ -18,6 +18,7 @@
import io.mifos.core.command.annotation.Aggregate;
import io.mifos.core.command.annotation.CommandHandler;
import io.mifos.core.command.annotation.CommandLogLevel;
+import io.mifos.rhythm.api.v1.domain.ClockOffset;
import io.mifos.rhythm.api.v1.events.BeatEvent;
import io.mifos.rhythm.api.v1.events.EventConstants;
import io.mifos.rhythm.service.ServiceConstants;
@@ -26,6 +27,7 @@
import io.mifos.rhythm.service.internal.mapper.BeatMapper;
import io.mifos.rhythm.service.internal.repository.BeatEntity;
import io.mifos.rhythm.service.internal.repository.BeatRepository;
+import io.mifos.rhythm.service.internal.service.ClockOffsetService;
import io.mifos.rhythm.service.internal.service.IdentityPermittableGroupService;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -40,18 +42,21 @@
public class BeatCommandHandler {
private final IdentityPermittableGroupService identityPermittableGroupService;
private final BeatRepository beatRepository;
+ private final ClockOffsetService clockOffsetService;
private final EventHelper eventHelper;
private final Logger logger;
@Autowired
public BeatCommandHandler(
- final IdentityPermittableGroupService identityPermittableGroupService,
- final BeatRepository beatRepository,
- final EventHelper eventHelper,
- @Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger) {
+ final IdentityPermittableGroupService identityPermittableGroupService,
+ final BeatRepository beatRepository,
+ final ClockOffsetService clockOffsetService,
+ final EventHelper eventHelper,
+ @Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger) {
super();
this.identityPermittableGroupService = identityPermittableGroupService;
this.beatRepository = beatRepository;
+ this.clockOffsetService = clockOffsetService;
this.eventHelper = eventHelper;
this.logger = logger;
}
@@ -70,18 +75,20 @@
//stuff that should happen in the transaction.
@SuppressWarnings("WeakerAccess")
@Transactional
- public void processCreateBeatCommand(CreateBeatCommand createBeatCommand) {
+ public void processCreateBeatCommand(final CreateBeatCommand createBeatCommand) {
final boolean applicationHasRequestForAccessPermission = identityPermittableGroupService.checkThatApplicationHasRequestForAccessPermission(
- createBeatCommand.getTenantIdentifier(), createBeatCommand.getApplicationIdentifier());
+ createBeatCommand.getTenantIdentifier(), createBeatCommand.getApplicationIdentifier());
if (!applicationHasRequestForAccessPermission) {
logger.info("Rhythm needs permission to publish beats to application, but couldn't request that permission for tenant '{}' and application '{}'.",
- createBeatCommand.getTenantIdentifier(), createBeatCommand.getApplicationIdentifier());
+ createBeatCommand.getTenantIdentifier(), createBeatCommand.getApplicationIdentifier());
}
+ final ClockOffset clockOffset = clockOffsetService.findByTenantIdentifier(createBeatCommand.getTenantIdentifier());
final BeatEntity entity = BeatMapper.map(
- createBeatCommand.getTenantIdentifier(),
- createBeatCommand.getApplicationIdentifier(),
- createBeatCommand.getInstance());
+ createBeatCommand.getTenantIdentifier(),
+ createBeatCommand.getApplicationIdentifier(),
+ createBeatCommand.getInstance(),
+ clockOffset);
this.beatRepository.save(entity);
}
diff --git a/service/src/main/java/io/mifos/rhythm/service/internal/mapper/BeatMapper.java b/service/src/main/java/io/mifos/rhythm/service/internal/mapper/BeatMapper.java
index 2f37f95..5ae4aac 100644
--- a/service/src/main/java/io/mifos/rhythm/service/internal/mapper/BeatMapper.java
+++ b/service/src/main/java/io/mifos/rhythm/service/internal/mapper/BeatMapper.java
@@ -16,10 +16,11 @@
package io.mifos.rhythm.service.internal.mapper;
import io.mifos.rhythm.api.v1.domain.Beat;
+import io.mifos.rhythm.api.v1.domain.ClockOffset;
import io.mifos.rhythm.service.internal.repository.BeatEntity;
+import java.time.Clock;
import java.time.LocalDateTime;
-import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
@@ -42,14 +43,22 @@
return ret;
}
- static BeatEntity map(final String tenantIdentifier, final String applicationIdentifier, final Beat instance) {
+ static BeatEntity map(
+ final String tenantIdentifier,
+ final String applicationIdentifier,
+ final Beat instance,
+ final ClockOffset offset) {
final BeatEntity ret = new BeatEntity();
ret.setBeatIdentifier(instance.getIdentifier());
ret.setTenantIdentifier(tenantIdentifier);
ret.setApplicationIdentifier(applicationIdentifier);
ret.setAlignmentHour(instance.getAlignmentHour());
- //First beat is today. If it's in the past, it will be created nearly immediately.
- ret.setNextBeat(LocalDateTime.now(ZoneId.of("UTC")).truncatedTo(ChronoUnit.DAYS).plusHours(instance.getAlignmentHour()));
+ //First beat is today. If it's in the past, it will be published nearly immediately.
+ ret.setNextBeat(LocalDateTime.now(Clock.systemUTC())
+ .truncatedTo(ChronoUnit.DAYS)
+ .plusHours(instance.getAlignmentHour() + offset.getHours())
+ .plusMinutes(offset.getMinutes())
+ .plusSeconds(offset.getSeconds()));
return ret;
}
}
diff --git a/service/src/main/java/io/mifos/rhythm/service/internal/service/ClockOffsetService.java b/service/src/main/java/io/mifos/rhythm/service/internal/service/ClockOffsetService.java
index 07c17e0..1700f5a 100644
--- a/service/src/main/java/io/mifos/rhythm/service/internal/service/ClockOffsetService.java
+++ b/service/src/main/java/io/mifos/rhythm/service/internal/service/ClockOffsetService.java
@@ -33,9 +33,9 @@
this.clockOffsetRepository = clockOffsetRepository;
}
- public ClockOffset findByTenant(final String tenantIdentifier) {
+ public ClockOffset findByTenantIdentifier(final String tenantIdentifier) {
return clockOffsetRepository.findByTenantIdentifier(tenantIdentifier)
.map(ClockOffsetMapper::map)
- .orElseGet(ClockOffset::new);
+ .orElseGet(ClockOffset::new); //If none is set, use 0,0,0
}
}
\ No newline at end of file
diff --git a/service/src/main/java/io/mifos/rhythm/service/internal/service/Drummer.java b/service/src/main/java/io/mifos/rhythm/service/internal/service/Drummer.java
index e0851cd..d3bf08c 100644
--- a/service/src/main/java/io/mifos/rhythm/service/internal/service/Drummer.java
+++ b/service/src/main/java/io/mifos/rhythm/service/internal/service/Drummer.java
@@ -15,6 +15,7 @@
*/
package io.mifos.rhythm.service.internal.service;
+import io.mifos.rhythm.api.v1.domain.ClockOffset;
import io.mifos.rhythm.service.ServiceConstants;
import io.mifos.rhythm.service.internal.repository.BeatEntity;
import io.mifos.rhythm.service.internal.repository.BeatRepository;
@@ -27,8 +28,8 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nonnull;
+import java.time.Clock;
import java.time.LocalDateTime;
-import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Optional;
import java.util.function.Predicate;
@@ -37,12 +38,12 @@
/**
* @author Myrle Krantz
*/
-@SuppressWarnings({"unused", "WeakerAccess"})
@Component
public class Drummer {
private final IdentityPermittableGroupService identityPermittableGroupService;
private final BeatPublisherService beatPublisherService;
private final BeatRepository beatRepository;
+ private final ClockOffsetService clockOffsetService;
private final Logger logger;
@Autowired
@@ -50,10 +51,12 @@
final IdentityPermittableGroupService identityPermittableGroupService,
final BeatPublisherService beatPublisherService,
final BeatRepository beatRepository,
+ final ClockOffsetService clockOffsetService,
@Qualifier(ServiceConstants.LOGGER_NAME) final Logger logger) {
this.identityPermittableGroupService = identityPermittableGroupService;
this.beatPublisherService = beatPublisherService;
this.beatRepository = beatRepository;
+ this.clockOffsetService = clockOffsetService;
this.logger = logger;
}
@@ -63,7 +66,7 @@
//In it's current form this function cannot be run in multiple instances of the same service. We need to get
//locking on selected entries corrected here, before this will work.
try {
- final LocalDateTime now = LocalDateTime.now(ZoneId.of("UTC"));
+ final LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
//Get beats from the last two hours in case restart/start happens close to hour begin.
final Stream<BeatEntity> beats = beatRepository.findByNextBeatBefore(now);
beats.forEach((beat) -> {
@@ -86,6 +89,7 @@
beat.setNextBeat(y);
beatRepository.save(beat);
});
+ logger.info("Beat updated to {}.", beat);
}
});
@@ -96,14 +100,15 @@
}
}
- public Optional<LocalDateTime> checkBeatForPublish(
- final LocalDateTime now,
- final String beatIdentifier,
- final String tenantIdentifier,
- final String applicationIdentifier,
- final Integer alignmentHour,
- final LocalDateTime nextBeat) {
- return checkBeatForPublishHelper(now, alignmentHour, nextBeat,
+ private Optional<LocalDateTime> checkBeatForPublish(
+ final LocalDateTime now,
+ final String beatIdentifier,
+ final String tenantIdentifier,
+ final String applicationIdentifier,
+ final Integer alignmentHour,
+ final LocalDateTime nextBeat) {
+ final ClockOffset clockOffset = clockOffsetService.findByTenantIdentifier(tenantIdentifier);
+ return checkBeatForPublishHelper(now, alignmentHour, nextBeat, clockOffset,
x -> beatPublisherService.publishBeat(beatIdentifier, tenantIdentifier, applicationIdentifier, x));
}
@@ -112,13 +117,14 @@
final LocalDateTime now,
final Integer alignmentHour,
final LocalDateTime nextBeat,
+ final ClockOffset clockOffset,
final Predicate<LocalDateTime> publishSucceeded) {
final long numberOfBeatPublishesNeeded = getNumberOfBeatPublishesNeeded(now, nextBeat);
if (numberOfBeatPublishesNeeded == 0)
return Optional.empty();
final Optional<LocalDateTime> firstFailedBeat = Stream.iterate(nextBeat,
- x -> incrementToAlignment(x, alignmentHour))
+ x -> incrementToAlignment(x, alignmentHour, clockOffset))
.limit(numberOfBeatPublishesNeeded)
.filter(x -> !publishSucceeded.test(x))
.findFirst();
@@ -126,7 +132,7 @@
if (firstFailedBeat.isPresent())
return firstFailedBeat;
else
- return Optional.of(incrementToAlignment(now, alignmentHour));
+ return Optional.of(incrementToAlignment(now, alignmentHour, clockOffset));
}
static long getNumberOfBeatPublishesNeeded(final LocalDateTime now, final @Nonnull LocalDateTime nextBeat) {
@@ -136,8 +142,15 @@
return Math.max(1, nextBeat.until(now, ChronoUnit.DAYS));
}
- static LocalDateTime incrementToAlignment(final LocalDateTime toIncrement, final Integer alignmentHour)
+ static LocalDateTime incrementToAlignment(
+ final LocalDateTime toIncrement,
+ final Integer alignmentHour,
+ final ClockOffset clockOffset)
{
- return toIncrement.plusDays(1).truncatedTo(ChronoUnit.DAYS).plusHours(alignmentHour);
+ return toIncrement.truncatedTo(ChronoUnit.DAYS)
+ .plusDays(1)
+ .plusHours(alignmentHour + clockOffset.getHours())
+ .plusMinutes(clockOffset.getMinutes())
+ .plusSeconds(clockOffset.getSeconds());
}
}
\ No newline at end of file
diff --git a/service/src/main/java/io/mifos/rhythm/service/rest/ClockOffsetRestController.java b/service/src/main/java/io/mifos/rhythm/service/rest/ClockOffsetRestController.java
index a788d28..9793731 100644
--- a/service/src/main/java/io/mifos/rhythm/service/rest/ClockOffsetRestController.java
+++ b/service/src/main/java/io/mifos/rhythm/service/rest/ClockOffsetRestController.java
@@ -57,7 +57,7 @@
public
@ResponseBody
ResponseEntity<ClockOffset> getClockOffset(@RequestHeader(TENANT_HEADER) final String tenantIdentifier) {
- return ResponseEntity.ok(this.clockOffsetService.findByTenant(tenantIdentifier));
+ return ResponseEntity.ok(this.clockOffsetService.findByTenantIdentifier(tenantIdentifier));
}
@Permittable(value = AcceptedTokenType.SYSTEM)
diff --git a/service/src/test/java/io/mifos/rhythm/service/internal/service/DrummerTest.java b/service/src/test/java/io/mifos/rhythm/service/internal/service/DrummerTest.java
index 3cb376d..4c45010 100644
--- a/service/src/test/java/io/mifos/rhythm/service/internal/service/DrummerTest.java
+++ b/service/src/test/java/io/mifos/rhythm/service/internal/service/DrummerTest.java
@@ -15,14 +15,17 @@
*/
package io.mifos.rhythm.service.internal.service;
+import io.mifos.rhythm.api.v1.domain.ClockOffset;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
+import java.time.Clock;
import java.time.LocalDateTime;
-import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
+import java.util.HashSet;
import java.util.Optional;
+import java.util.Set;
import java.util.function.Predicate;
/**
@@ -32,8 +35,8 @@
@Test
public void incrementToAlignment() {
- final LocalDateTime now = LocalDateTime.now(ZoneId.of("UTC"));
- final LocalDateTime tomorrow = Drummer.incrementToAlignment(now, 3);
+ final LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
+ final LocalDateTime tomorrow = Drummer.incrementToAlignment(now, 3, new ClockOffset());
Assert.assertEquals(tomorrow.minusDays(1).truncatedTo(ChronoUnit.DAYS), now.truncatedTo(ChronoUnit.DAYS));
Assert.assertEquals(3, tomorrow.getHour());
@@ -41,7 +44,7 @@
@Test
public void getNumberOfBeatPublishesNeeded() {
- final LocalDateTime now = LocalDateTime.now(ZoneId.of("UTC"));
+ final LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
final long eventsNeeded3 = Drummer.getNumberOfBeatPublishesNeeded(now, now.minus(3, ChronoUnit.DAYS));
Assert.assertEquals(3, eventsNeeded3);
@@ -54,38 +57,62 @@
@Test
public void checkBeatForPublishAllBeatsSucceed() {
- final LocalDateTime now = LocalDateTime.now(ZoneId.of("UTC"));
- final Optional<LocalDateTime> ret = Drummer.checkBeatForPublishHelper(now, 0, now.minus(3, ChronoUnit.DAYS), x -> true);
- Assert.assertEquals(Optional.of(Drummer.incrementToAlignment(now, 0)), ret);
+ final LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
+ final Set<LocalDateTime> calledForTimes = new HashSet<>();
+ final Optional<LocalDateTime> ret = Drummer.checkBeatForPublishHelper(
+ now,
+ 0,
+ now.minus(3, ChronoUnit.DAYS),
+ new ClockOffset(),
+ x -> {
+ calledForTimes.add(x);
+ return true;
+ });
+ Assert.assertEquals(Optional.of(Drummer.incrementToAlignment(now, 0, new ClockOffset())), ret);
+ Assert.assertEquals(3, calledForTimes.size());
}
@Test
public void checkBeatForPublishFirstFails() {
- final LocalDateTime now = LocalDateTime.now(ZoneId.of("UTC"));
+ final LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
final LocalDateTime nextBeat = now.minus(3, ChronoUnit.DAYS);
@SuppressWarnings("unchecked") final Predicate<LocalDateTime> produceBeatsMock = Mockito.mock(Predicate.class);
Mockito.when(produceBeatsMock.test(nextBeat)).thenReturn(false);
- final Optional<LocalDateTime> ret = Drummer.checkBeatForPublishHelper(now, 0, nextBeat, produceBeatsMock);
+ final Optional<LocalDateTime> ret = Drummer.checkBeatForPublishHelper(
+ now,
+ 0,
+ nextBeat,
+ new ClockOffset(),
+ produceBeatsMock);
Assert.assertEquals(Optional.of(nextBeat), ret);
}
@Test
public void checkBeatForPublishSecondFails() {
- final LocalDateTime now = LocalDateTime.now(ZoneId.of("UTC"));
+ final LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
final LocalDateTime nextBeat = now.minus(3, ChronoUnit.DAYS);
- final LocalDateTime secondBeat = Drummer.incrementToAlignment(nextBeat, 0);
+ final LocalDateTime secondBeat = Drummer.incrementToAlignment(nextBeat, 0, new ClockOffset());
@SuppressWarnings("unchecked") final Predicate<LocalDateTime> produceBeatsMock = Mockito.mock(Predicate.class);
Mockito.when(produceBeatsMock.test(nextBeat)).thenReturn(true);
Mockito.when(produceBeatsMock.test(secondBeat)).thenReturn(false);
- final Optional<LocalDateTime> ret = Drummer.checkBeatForPublishHelper(now, 0, nextBeat, produceBeatsMock);
+ final Optional<LocalDateTime> ret = Drummer.checkBeatForPublishHelper(
+ now,
+ 0,
+ nextBeat,
+ new ClockOffset(),
+ produceBeatsMock);
Assert.assertEquals(Optional.of(secondBeat), ret);
}
@Test
public void checkBeatForPublishNoneNeeded() {
- final LocalDateTime now = LocalDateTime.now(ZoneId.of("UTC"));
- final Optional<LocalDateTime> ret = Drummer.checkBeatForPublishHelper(now, 0, now.plus(1, ChronoUnit.DAYS),
- x -> { Assert.fail("Pubish shouldn't be called"); return true; });
+ final LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
+ final Optional<LocalDateTime> ret = Drummer.checkBeatForPublishHelper(
+ now,
+ 0,
+ now.plus(1, ChronoUnit.DAYS),
+ new ClockOffset(),
+ x -> { Assert.fail("Publish shouldn't be called"); return true; });
Assert.assertEquals(Optional.empty(), ret);
}
}
\ No newline at end of file