Browse Source

Merge "Push control of time into MockSystemReader"

stable-4.2
Jonathan Nieder 9 years ago committed by Gerrit Code Review @ Eclipse.org
parent
commit
ce525a0a62
  1. 14
      org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java
  2. 17
      org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/MockSystemReader.java
  3. 49
      org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java
  4. 4
      org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java
  5. 4
      org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkFilterTest.java
  6. 4
      org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkTestCase.java

14
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.File;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheEntry; 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. */ /** A fake (but stable) identity for committer fields in the test. */
protected PersonIdent committer; protected PersonIdent committer;
/** A {@link SystemReader} used to coordinate time, envars, etc. */
protected MockSystemReader mockSystemReader;
private final List<Repository> toClose = new ArrayList<Repository>(); private final List<Repository> toClose = new ArrayList<Repository>();
private File tmp; private File tmp;
private MockSystemReader mockSystemReader;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
tmp = File.createTempFile("jgit_test_", "_tmp"); tmp = File.createTempFile("jgit_test_", "_tmp");
@ -171,9 +171,8 @@ public abstract class LocalDiskRepositoryTestCase {
/** Increment the {@link #author} and {@link #committer} times. */ /** Increment the {@link #author} and {@link #committer} times. */
protected void tick() { protected void tick() {
final long delta = TimeUnit.MILLISECONDS.convert(5 * 60, mockSystemReader.tick(5 * 60);
TimeUnit.SECONDS); final long now = mockSystemReader.getCurrentTime();
final long now = author.getWhen().getTime() + delta;
final int tz = mockSystemReader.getTimezone(now); final int tz = mockSystemReader.getTimezone(now);
author = new PersonIdent(author, now, tz); author = new PersonIdent(author, now, tz);
@ -278,11 +277,10 @@ public abstract class LocalDiskRepositoryTestCase {
throws IllegalStateException, IOException { throws IllegalStateException, IOException {
DirCache dc = repo.readDirCache(); DirCache dc = repo.readDirCache();
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
TreeSet<Long> timeStamps = null; TreeSet<Long> timeStamps = new TreeSet<Long>();
// iterate once over the dircache just to collect all time stamps // iterate once over the dircache just to collect all time stamps
if (0 != (includedOptions & MOD_TIME)) { if (0 != (includedOptions & MOD_TIME)) {
timeStamps = new TreeSet<Long>();
for (int i=0; i<dc.getEntryCount(); ++i) for (int i=0; i<dc.getEntryCount(); ++i)
timeStamps.add(Long.valueOf(dc.getEntry(i).getLastModified())); timeStamps.add(Long.valueOf(dc.getEntry(i).getLastModified()));
} }

17
org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/MockSystemReader.java

@ -62,6 +62,9 @@ import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.FS;
import org.eclipse.jgit.util.SystemReader; import org.eclipse.jgit.util.SystemReader;
/**
* Mock {@link SystemReader} for tests.
*/
public class MockSystemReader extends SystemReader { public class MockSystemReader extends SystemReader {
private final class MockConfig extends FileBasedConfig { private final class MockConfig extends FileBasedConfig {
private MockConfig(File cfgLocation, FS fs) { private MockConfig(File cfgLocation, FS fs) {
@ -79,6 +82,8 @@ public class MockSystemReader extends SystemReader {
} }
} }
long now = 1250379778668L; // Sat Aug 15 20:12:58 GMT-03:30 2009
final Map<String, String> values = new HashMap<String, String>(); final Map<String, String> values = new HashMap<String, String>();
FileBasedConfig userGitConfig; FileBasedConfig userGitConfig;
@ -138,7 +143,17 @@ public class MockSystemReader extends SystemReader {
@Override @Override
public long getCurrentTime() { 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 @Override

49
org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/TestRepository.java

@ -138,7 +138,7 @@ public class TestRepository<R extends Repository> {
private final ObjectInserter inserter; private final ObjectInserter inserter;
private long now; private final MockSystemReader mockSystemReader;
/** /**
* Wrap a repository with test building tools. * Wrap a repository with test building tools.
@ -148,7 +148,7 @@ public class TestRepository<R extends Repository> {
* @throws IOException * @throws IOException
*/ */
public TestRepository(R db) 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<R extends Repository> {
* @throws IOException * @throws IOException
*/ */
public TestRepository(R db, RevWalk rw) 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.db = db;
this.git = Git.wrap(db); this.git = Git.wrap(db);
this.pool = rw; this.pool = rw;
this.inserter = db.newObjectInserter(); this.inserter = db.newObjectInserter();
this.now = 1236977987000L; this.mockSystemReader = reader;
} }
/** @return the repository this helper class operates against. */ /** @return the repository this helper class operates against. */
@ -186,14 +203,14 @@ public class TestRepository<R extends Repository> {
return git; return git;
} }
/** @return current time adjusted by {@link #tick(int)}. */ /** @return current date. */
public Date getClock() { public Date getDate() {
return new Date(now); return new Date(mockSystemReader.getCurrentTime());
} }
/** @return timezone used for default identities. */ /** @return timezone used for default identities. */
public TimeZone getTimeZone() { public TimeZone getTimeZone() {
return defaultCommitter.getTimeZone(); return mockSystemReader.getTimeZone();
} }
/** /**
@ -203,18 +220,18 @@ public class TestRepository<R extends Repository> {
* number of seconds to add to the current time. * number of seconds to add to the current time.
*/ */
public void tick(final int secDelta) { 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 * @param c
* the commit builder to store. * the commit builder to store.
*/ */
public void setAuthorAndCommitter(org.eclipse.jgit.lib.CommitBuilder c) { public void setAuthorAndCommitter(org.eclipse.jgit.lib.CommitBuilder c) {
c.setAuthor(new PersonIdent(defaultAuthor, new Date(now))); c.setAuthor(new PersonIdent(defaultAuthor, getDate()));
c.setCommitter(new PersonIdent(defaultCommitter, new Date(now))); c.setCommitter(new PersonIdent(defaultCommitter, getDate()));
} }
/** /**
@ -392,8 +409,8 @@ public class TestRepository<R extends Repository> {
c = new org.eclipse.jgit.lib.CommitBuilder(); c = new org.eclipse.jgit.lib.CommitBuilder();
c.setTreeId(tree); c.setTreeId(tree);
c.setParentIds(parents); c.setParentIds(parents);
c.setAuthor(new PersonIdent(defaultAuthor, new Date(now))); c.setAuthor(new PersonIdent(defaultAuthor, getDate()));
c.setCommitter(new PersonIdent(defaultCommitter, new Date(now))); c.setCommitter(new PersonIdent(defaultCommitter, getDate()));
c.setMessage(""); c.setMessage("");
ObjectId id; ObjectId id;
try (ObjectInserter ins = inserter) { try (ObjectInserter ins = inserter) {
@ -428,7 +445,7 @@ public class TestRepository<R extends Repository> {
final TagBuilder t = new TagBuilder(); final TagBuilder t = new TagBuilder();
t.setObjectId(dst); t.setObjectId(dst);
t.setTag(name); t.setTag(name);
t.setTagger(new PersonIdent(defaultCommitter, new Date(now))); t.setTagger(new PersonIdent(defaultCommitter, getDate()));
t.setMessage(""); t.setMessage("");
ObjectId id; ObjectId id;
try (ObjectInserter ins = inserter) { try (ObjectInserter ins = inserter) {
@ -663,7 +680,7 @@ public class TestRepository<R extends Repository> {
b.setParentId(head); b.setParentId(head);
b.setTreeId(merger.getResultTreeId()); b.setTreeId(merger.getResultTreeId());
b.setAuthor(commit.getAuthorIdent()); b.setAuthor(commit.getAuthorIdent());
b.setCommitter(new PersonIdent(defaultCommitter, new Date(now))); b.setCommitter(new PersonIdent(defaultCommitter, getDate()));
b.setMessage(commit.getFullMessage()); b.setMessage(commit.getFullMessage());
ObjectId result; ObjectId result;
try (ObjectInserter ins = inserter) { try (ObjectInserter ins = inserter) {
@ -1100,7 +1117,7 @@ public class TestRepository<R extends Repository> {
c.setAuthor(author); c.setAuthor(author);
if (committer != null) { if (committer != null) {
if (updateCommitterTime) if (updateCommitterTime)
committer = new PersonIdent(committer, new Date(now)); committer = new PersonIdent(committer, getDate());
c.setCommitter(committer); c.setCommitter(committer);
} }

4
org.eclipse.jgit.test/tst/org/eclipse/jgit/junit/TestRepositoryTest.java

@ -307,9 +307,9 @@ public class TestRepositoryTest {
RevCommit toPick = tr.commit() RevCommit toPick = tr.commit()
.parent(tr.commit().create()) // Can't cherry-pick root. .parent(tr.commit().create()) // Can't cherry-pick root.
.author(new PersonIdent("Cherrypick Author", "cpa@example.com", .author(new PersonIdent("Cherrypick Author", "cpa@example.com",
tr.getClock(), tr.getTimeZone())) tr.getDate(), tr.getTimeZone()))
.author(new PersonIdent("Cherrypick Committer", "cpc@example.com", .author(new PersonIdent("Cherrypick Committer", "cpc@example.com",
tr.getClock(), tr.getTimeZone())) tr.getDate(), tr.getTimeZone()))
.message("message to cherry-pick") .message("message to cherry-pick")
.add("bar", "bar contents\n") .add("bar", "bar contents\n")
.create(); .create();

4
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); final RevCommit b = commit(a);
tick(100); tick(100);
Date since = getClock(); Date since = getDate();
final RevCommit c1 = commit(b); final RevCommit c1 = commit(b);
tick(100); tick(100);
final RevCommit c2 = commit(b); final RevCommit c2 = commit(b);
tick(100); tick(100);
Date until = getClock(); Date until = getDate();
final RevCommit d = commit(c1, c2); final RevCommit d = commit(c1, c2);
tick(100); tick(100);

4
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); return new RevWalk(db);
} }
protected Date getClock() { protected Date getDate() {
return util.getClock(); return util.getDate();
} }
protected void tick(final int secDelta) { protected void tick(final int secDelta) {

Loading…
Cancel
Save