blob: 83173635b7a1fcab0acc02f50384a59fe2cb3f73 [file] [log] [blame]
Dave Borowitz14ce8282012-12-20 14:08:25 -08001// Copyright 2012 Google Inc. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package com.google.gitiles;
16
Dave Borowitzd40bdf12014-04-19 19:33:56 -070017import static org.junit.Assert.assertEquals;
Dave Borowitz14ce8282012-12-20 14:08:25 -080018
Shawn Pearceb43b2d52013-03-18 10:55:15 -070019import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
20import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
21import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
Dave Borowitz14ce8282012-12-20 14:08:25 -080022import org.eclipse.jgit.junit.TestRepository;
23import org.eclipse.jgit.lib.ObjectId;
24import org.eclipse.jgit.lib.ObjectInserter;
25import org.eclipse.jgit.lib.TagBuilder;
26import org.eclipse.jgit.revwalk.RevBlob;
27import org.eclipse.jgit.revwalk.RevCommit;
28import org.eclipse.jgit.revwalk.RevTag;
29import org.eclipse.jgit.revwalk.RevTree;
30import org.eclipse.jgit.revwalk.RevWalk;
Dave Borowitzd40bdf12014-04-19 19:33:56 -070031import org.junit.Before;
32import org.junit.Test;
Dave Borowitz3dc854f2014-11-04 16:19:37 -080033import org.junit.runner.RunWith;
34import org.junit.runners.JUnit4;
Dave Borowitzd40bdf12014-04-19 19:33:56 -070035
36import java.io.IOException;
Dave Borowitz14ce8282012-12-20 14:08:25 -080037
38/** Unit tests for {@link TimeCache}. */
Dave Borowitz3dc854f2014-11-04 16:19:37 -080039@RunWith(JUnit4.class)
Dave Borowitzd40bdf12014-04-19 19:33:56 -070040public class TimeCacheTest {
Dave Borowitz14ce8282012-12-20 14:08:25 -080041 private TestRepository<DfsRepository> repo;
42 private RevWalk walk;
43 private TimeCache cache;
44
45 /**
46 * Start time of {@link #repo}.
47 * <p>
48 * Note that commits auto-increment the repo's ticker, but tags do not.
49 */
50 private long start;
51
Dave Borowitzd40bdf12014-04-19 19:33:56 -070052 @Before
53 public void setUp() throws Exception {
Dave Borowitz14ce8282012-12-20 14:08:25 -080054 repo = new TestRepository<DfsRepository>(
55 new InMemoryRepository(new DfsRepositoryDescription("test")));
56 walk = new RevWalk(repo.getRepository());
57 cache = new TimeCache();
58 start = repo.getClock().getTime() / 1000;
59 }
60
61 private long getTime(ObjectId id) throws IOException {
62 return cache.getTime(walk, id);
63 }
64
Dave Borowitzd40bdf12014-04-19 19:33:56 -070065 @Test
66 public void commitTime() throws Exception {
Dave Borowitz14ce8282012-12-20 14:08:25 -080067 RevCommit root = repo.commit().create();
68 RevCommit master = repo.commit().parent(root).create();
69 assertEquals(start + 1, getTime(root));
70 assertEquals(start + 2, getTime(master));
71 }
72
Dave Borowitzd40bdf12014-04-19 19:33:56 -070073 @Test
74 public void taggedCommitTime() throws Exception {
Dave Borowitz14ce8282012-12-20 14:08:25 -080075 RevCommit commit = repo.commit().create();
76 repo.tick(1);
77 RevTag tag = repo.tag("tag", commit);
78 assertEquals(start + 1, getTime(commit));
79 assertEquals(start + 2, getTime(tag));
80 }
81
Dave Borowitzd40bdf12014-04-19 19:33:56 -070082 @Test
83 public void taggedTreeAndBlobTime() throws Exception {
Dave Borowitz14ce8282012-12-20 14:08:25 -080084 RevBlob blob = repo.blob("contents");
85 RevTree tree = repo.tree(repo.file("foo", blob));
86 repo.tick(1);
87 RevTag blobTag = repo.tag("blob", blob);
88 repo.tick(1);
89 RevTag treeTag = repo.tag("tree", tree);
90 assertEquals(start + 1, getTime(blobTag));
91 assertEquals(start + 2, getTime(treeTag));
92 }
93
Dave Borowitzd40bdf12014-04-19 19:33:56 -070094 @Test
95 public void taggedTagTime() throws Exception {
Dave Borowitz14ce8282012-12-20 14:08:25 -080096 repo.tick(2);
97 RevTag tag = repo.tag("tag", repo.commit().create());
98 repo.tick(-1);
99 RevTag tagTag = repo.tag("tagtag", tag);
100 assertEquals(start + 3, getTime(tag));
101 assertEquals(start + 2, getTime(tagTag));
102 }
103
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700104 @Test
105 public void treeAndBlobTime() throws Exception {
Dave Borowitz14ce8282012-12-20 14:08:25 -0800106 RevBlob blob = repo.blob("contents");
107 RevTree tree = repo.tree(repo.file("foo", blob));
108 assertEquals(Long.MIN_VALUE, getTime(blob));
109 assertEquals(Long.MIN_VALUE, getTime(tree));
110 }
111
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700112 @Test
113 public void tagMissingTime() throws Exception {
Dave Borowitz14ce8282012-12-20 14:08:25 -0800114 RevCommit commit = repo.commit().create();
115 TagBuilder builder = new TagBuilder();
116 builder.setObjectId(commit);
117 builder.setTag("tag");
118 builder.setMessage("");
Dave Borowitz14ce8282012-12-20 14:08:25 -0800119 ObjectId id;
Shawn Pearceb5ad0a02015-05-24 20:33:17 -0700120 try (ObjectInserter ins = repo.getRepository().newObjectInserter()) {
Dave Borowitz14ce8282012-12-20 14:08:25 -0800121 id = ins.insert(builder);
122 ins.flush();
Dave Borowitz14ce8282012-12-20 14:08:25 -0800123 }
124 assertEquals(start + 1, getTime(commit));
125 assertEquals(start + 1, getTime(id));
126 }
127
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700128 @Test
129 public void firstTagMissingTime() throws Exception {
Dave Borowitz14ce8282012-12-20 14:08:25 -0800130 RevCommit commit = repo.commit().create();
131 repo.tick(1);
132 RevTag tag = repo.tag("tag", commit);
133 repo.tick(1);
134
135 TagBuilder builder = new TagBuilder();
136 builder.setObjectId(tag);
137 builder.setTag("tagtag");
138 builder.setMessage("");
Dave Borowitz14ce8282012-12-20 14:08:25 -0800139 ObjectId tagTagId;
Shawn Pearceb5ad0a02015-05-24 20:33:17 -0700140 try (ObjectInserter ins = repo.getRepository().newObjectInserter()) {
Dave Borowitz14ce8282012-12-20 14:08:25 -0800141 tagTagId = ins.insert(builder);
142 ins.flush();
Dave Borowitz14ce8282012-12-20 14:08:25 -0800143 }
144 assertEquals(start + 1, getTime(commit));
145 assertEquals(start + 2, getTime(tag));
146 assertEquals(start + 2, getTime(tagTagId));
147 }
148}