From 069040ddad625ec48c9d1dd2b3ecc9a0cb8a40f0 Mon Sep 17 00:00:00 2001 From: Terry Parker Date: Mon, 19 Oct 2015 17:33:50 -0700 Subject: [PATCH] Push control of time into MockSystemReader LocalDiskRepositoryTestCase and TestRepository have competing ideas about time. Push them into MockSystemReader so they can cooperate. Rename getClock() methods that return Dates to getDate(). Change-Id: Ibbd9fe7f85d0064b0a19e3b675b9718a9e67c479 Signed-off-by: Terry Parker --- .../junit/LocalDiskRepositoryTestCase.java | 14 +++--- .../eclipse/jgit/junit/MockSystemReader.java | 17 ++++++- .../eclipse/jgit/junit/TestRepository.java | 49 +++++++++++++------ .../jgit/junit/TestRepositoryTest.java | 4 +- .../jgit/revwalk/RevWalkFilterTest.java | 4 +- .../eclipse/jgit/revwalk/RevWalkTestCase.java | 4 +- 6 files changed, 61 insertions(+), 31 deletions(-) diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java index b5348f998..bb5f9efb8 100644 --- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java +++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java @@ -51,7 +51,6 @@ import static org.junit.Assert.fail; import java.io.File; import java.io.IOException; import java.util.*; -import java.util.concurrent.TimeUnit; import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.dircache.DirCacheEntry; @@ -92,11 +91,12 @@ public abstract class LocalDiskRepositoryTestCase { /** A fake (but stable) identity for committer fields in the test. */ protected PersonIdent committer; + /** A {@link SystemReader} used to coordinate time, envars, etc. */ + protected MockSystemReader mockSystemReader; + private final List toClose = new ArrayList(); private File tmp; - private MockSystemReader mockSystemReader; - @Before public void setUp() throws Exception { tmp = File.createTempFile("jgit_test_", "_tmp"); @@ -171,9 +171,8 @@ public abstract class LocalDiskRepositoryTestCase { /** Increment the {@link #author} and {@link #committer} times. */ protected void tick() { - final long delta = TimeUnit.MILLISECONDS.convert(5 * 60, - TimeUnit.SECONDS); - final long now = author.getWhen().getTime() + delta; + mockSystemReader.tick(5 * 60); + final long now = mockSystemReader.getCurrentTime(); final int tz = mockSystemReader.getTimezone(now); author = new PersonIdent(author, now, tz); @@ -278,11 +277,10 @@ public abstract class LocalDiskRepositoryTestCase { throws IllegalStateException, IOException { DirCache dc = repo.readDirCache(); StringBuilder sb = new StringBuilder(); - TreeSet timeStamps = null; + TreeSet timeStamps = new TreeSet(); // iterate once over the dircache just to collect all time stamps if (0 != (includedOptions & MOD_TIME)) { - timeStamps = new TreeSet(); for (int i=0; i values = new HashMap(); FileBasedConfig userGitConfig; @@ -138,7 +143,17 @@ public class MockSystemReader extends SystemReader { @Override public long getCurrentTime() { - return 1250379778668L; // Sat Aug 15 20:12:58 GMT-03:30 2009 + return now; + } + + /** + * Adjusts the current time in seconds. + * + * @param secDelta + * number of seconds to add to the current time. + */ + public void tick(final int secDelta) { + now += secDelta * 1000L; } @Override diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java index 925a6b021..98e29d708 100644 --- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java +++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java @@ -138,7 +138,7 @@ public class TestRepository { private final ObjectInserter inserter; - private long now; + private final MockSystemReader mockSystemReader; /** * Wrap a repository with test building tools. @@ -148,7 +148,7 @@ public class TestRepository { * @throws IOException */ public TestRepository(R db) throws IOException { - this(db, new RevWalk(db)); + this(db, new RevWalk(db), new MockSystemReader()); } /** @@ -161,11 +161,28 @@ public class TestRepository { * @throws IOException */ public TestRepository(R db, RevWalk rw) throws IOException { + this(db, rw, new MockSystemReader()); + } + + /** + * Wrap a repository with test building tools. + * + * @param db + * the test repository to write into. + * @param rw + * the RevObject pool to use for object lookup. + * @param reader + * the MockSystemReader to use for clock and other system + * operations. + * @throws IOException + */ + public TestRepository(R db, RevWalk rw, MockSystemReader reader) + throws IOException { this.db = db; this.git = Git.wrap(db); this.pool = rw; this.inserter = db.newObjectInserter(); - this.now = 1236977987000L; + this.mockSystemReader = reader; } /** @return the repository this helper class operates against. */ @@ -186,14 +203,14 @@ public class TestRepository { return git; } - /** @return current time adjusted by {@link #tick(int)}. */ - public Date getClock() { - return new Date(now); + /** @return current date. */ + public Date getDate() { + return new Date(mockSystemReader.getCurrentTime()); } /** @return timezone used for default identities. */ public TimeZone getTimeZone() { - return defaultCommitter.getTimeZone(); + return mockSystemReader.getTimeZone(); } /** @@ -203,18 +220,18 @@ public class TestRepository { * number of seconds to add to the current time. */ public void tick(final int secDelta) { - now += secDelta * 1000L; + mockSystemReader.tick(secDelta); } /** - * Set the author and committer using {@link #getClock()}. + * Set the author and committer using {@link #getDate()}. * * @param c * the commit builder to store. */ public void setAuthorAndCommitter(org.eclipse.jgit.lib.CommitBuilder c) { - c.setAuthor(new PersonIdent(defaultAuthor, new Date(now))); - c.setCommitter(new PersonIdent(defaultCommitter, new Date(now))); + c.setAuthor(new PersonIdent(defaultAuthor, getDate())); + c.setCommitter(new PersonIdent(defaultCommitter, getDate())); } /** @@ -392,8 +409,8 @@ public class TestRepository { c = new org.eclipse.jgit.lib.CommitBuilder(); c.setTreeId(tree); c.setParentIds(parents); - c.setAuthor(new PersonIdent(defaultAuthor, new Date(now))); - c.setCommitter(new PersonIdent(defaultCommitter, new Date(now))); + c.setAuthor(new PersonIdent(defaultAuthor, getDate())); + c.setCommitter(new PersonIdent(defaultCommitter, getDate())); c.setMessage(""); ObjectId id; try (ObjectInserter ins = inserter) { @@ -428,7 +445,7 @@ public class TestRepository { final TagBuilder t = new TagBuilder(); t.setObjectId(dst); t.setTag(name); - t.setTagger(new PersonIdent(defaultCommitter, new Date(now))); + t.setTagger(new PersonIdent(defaultCommitter, getDate())); t.setMessage(""); ObjectId id; try (ObjectInserter ins = inserter) { @@ -663,7 +680,7 @@ public class TestRepository { b.setParentId(head); b.setTreeId(merger.getResultTreeId()); b.setAuthor(commit.getAuthorIdent()); - b.setCommitter(new PersonIdent(defaultCommitter, new Date(now))); + b.setCommitter(new PersonIdent(defaultCommitter, getDate())); b.setMessage(commit.getFullMessage()); ObjectId result; try (ObjectInserter ins = inserter) { @@ -1100,7 +1117,7 @@ public class TestRepository { c.setAuthor(author); if (committer != null) { if (updateCommitterTime) - committer = new PersonIdent(committer, new Date(now)); + committer = new PersonIdent(committer, getDate()); c.setCommitter(committer); } diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java index fbb9eecdf..b69b8e01e 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java @@ -307,9 +307,9 @@ public class TestRepositoryTest { RevCommit toPick = tr.commit() .parent(tr.commit().create()) // Can't cherry-pick root. .author(new PersonIdent("Cherrypick Author", "cpa@example.com", - tr.getClock(), tr.getTimeZone())) + tr.getDate(), tr.getTimeZone())) .author(new PersonIdent("Cherrypick Committer", "cpc@example.com", - tr.getClock(), tr.getTimeZone())) + tr.getDate(), tr.getTimeZone())) .message("message to cherry-pick") .add("bar", "bar contents\n") .create(); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkFilterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkFilterTest.java index 643ba26d9..8ab972837 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkFilterTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkFilterTest.java @@ -250,14 +250,14 @@ public class RevWalkFilterTest extends RevWalkTestCase { final RevCommit b = commit(a); tick(100); - Date since = getClock(); + Date since = getDate(); final RevCommit c1 = commit(b); tick(100); final RevCommit c2 = commit(b); tick(100); - Date until = getClock(); + Date until = getDate(); final RevCommit d = commit(c1, c2); tick(100); diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkTestCase.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkTestCase.java index 881deb1f5..30586ee1e 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkTestCase.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkTestCase.java @@ -70,8 +70,8 @@ public abstract class RevWalkTestCase extends RepositoryTestCase { return new RevWalk(db); } - protected Date getClock() { - return util.getClock(); + protected Date getDate() { + return util.getDate(); } protected void tick(final int secDelta) {