diff --git a/gerrit-server/src/test/java/com/google/gerrit/testutil/TestTimeUtil.java b/gerrit-server/src/test/java/com/google/gerrit/testutil/TestTimeUtil.java index dd44cb9ae5..792120484f 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/testutil/TestTimeUtil.java +++ b/gerrit-server/src/test/java/com/google/gerrit/testutil/TestTimeUtil.java @@ -20,6 +20,10 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import java.sql.Timestamp; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; +import org.eclipse.jgit.lib.Config; +import org.eclipse.jgit.storage.file.FileBasedConfig; +import org.eclipse.jgit.util.FS; +import org.eclipse.jgit.util.SystemReader; import org.joda.time.DateTime; import org.joda.time.DateTimeUtils; import org.joda.time.DateTimeUtils.MillisProvider; @@ -56,6 +60,7 @@ public class TestTimeUtil { public static synchronized void setClockStep(long clockStep, TimeUnit clockStepUnit) { checkState(clockMs != null, "call resetWithClockStep first"); clockStepMs = MILLISECONDS.convert(clockStep, clockStepUnit); + DateTimeUtils.setCurrentMillisProvider( new MillisProvider() { @Override @@ -63,6 +68,47 @@ public class TestTimeUtil { return clockMs.getAndAdd(clockStepMs); } }); + + SystemReader.setInstance(null); + final SystemReader defaultReader = SystemReader.getInstance(); + SystemReader r = + new SystemReader() { + @Override + public String getHostname() { + return defaultReader.getHostname(); + } + + @Override + public String getenv(String variable) { + return defaultReader.getenv(variable); + } + + @Override + public String getProperty(String key) { + return defaultReader.getProperty(key); + } + + @Override + public FileBasedConfig openUserConfig(Config parent, FS fs) { + return defaultReader.openUserConfig(parent, fs); + } + + @Override + public FileBasedConfig openSystemConfig(Config parent, FS fs) { + return defaultReader.openSystemConfig(parent, fs); + } + + @Override + public long getCurrentTime() { + return clockMs.getAndAdd(clockStepMs); + } + + @Override + public int getTimezone(long when) { + return defaultReader.getTimezone(when); + } + }; + SystemReader.setInstance(r); } /** @@ -86,10 +132,15 @@ public class TestTimeUtil { clockMs.addAndGet(clockStepUnit.toMillis(clockStep)); } - /** Reset the clock to use the actual system clock. */ + /** + * Reset the clock to use the actual system clock. + * + *
As a side effect, resets the {@link SystemReader} to the original default instance. + */ public static synchronized void useSystemTime() { clockMs = null; DateTimeUtils.setCurrentMillisSystem(); + SystemReader.setInstance(null); } private TestTimeUtil() {}