Fix TimestampInversionException (#1065)

* Fix TimestampInversionException

* Add autoIncrement

* unset auto increment mode
This commit is contained in:
sarahcaseybot 2021-04-13 11:59:14 -04:00 committed by GitHub
parent 5caab67cd2
commit 162791ccaa
2 changed files with 24 additions and 2 deletions

View file

@ -35,6 +35,8 @@ public final class FakeClock implements Clock {
// threads should see a consistent flow.
private final AtomicLong currentTimeMillis = new AtomicLong();
private volatile long autoIncrementStepMs;
/** Creates a FakeClock that starts at START_OF_TIME. */
public FakeClock() {
this(START_OF_TIME);
@ -48,7 +50,21 @@ public final class FakeClock implements Clock {
/** Returns the current time. */
@Override
public DateTime nowUtc() {
return new DateTime(currentTimeMillis.get(), UTC);
return new DateTime(currentTimeMillis.addAndGet(autoIncrementStepMs), UTC);
}
/**
* Sets the increment applied to the clock whenever it is queried. The increment is zero by
* default: the clock is left unchanged when queried.
*
* <p>Passing a duration of zero to this method effectively unsets the auto increment mode.
*
* @param autoIncrementStep the new auto increment duration
* @return this
*/
public FakeClock setAutoIncrementStep(ReadableDuration autoIncrementStep) {
this.autoIncrementStepMs = autoIncrementStep.getMillis();
return this;
}
/** Advances clock by one millisecond. */

View file

@ -43,6 +43,7 @@ import google.registry.testing.TestCacheExtension;
import google.registry.testing.TestOfyAndSql;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.RegisterExtension;
@ -61,7 +62,7 @@ public class PremiumListDualDaoTest extends EntityTestCase {
@BeforeEach
void before() {
createTld("tld");
fakeClock.setAutoIncrementStep(Duration.millis(1));
fakeClock.setTo(DateTime.parse("1984-12-21T00:00:00.000Z"));
DatabaseTransitionSchedule schedule =
DatabaseTransitionSchedule.create(
@ -77,6 +78,11 @@ public class PremiumListDualDaoTest extends EntityTestCase {
tm().transactNew(() -> ofyTm().putWithoutBackup(schedule));
}
@AfterEach
void after() {
fakeClock.setAutoIncrementStep(Duration.ZERO);
}
@TestOfyAndSql
void testGetPremiumPrice_secondaryLoadMissingSql() {
PremiumListSqlDao.delete(PremiumListSqlDao.getLatestRevision("tld").get());