Move RepositoryIndexServletTest methods to RefServletTest These are just testing the output of static methods in RefServlet. There are no repository-index-specific tests remaining in this class, so we can delete it entirely. Change-Id: I0d9ff2c42ca7ca26d37d30364782f0dc29f27656
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java index 9f551df..05a985d 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
@@ -22,6 +22,7 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Ordering; +import com.google.common.primitives.Ints; import com.google.common.util.concurrent.UncheckedExecutionException; import com.google.gson.reflect.TypeToken; @@ -37,9 +38,9 @@ import java.io.IOException; import java.io.Writer; import java.util.Collection; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.LinkedHashMap; import javax.annotation.Nullable; import javax.servlet.http.HttpServletRequest; @@ -165,7 +166,7 @@ @Nullable Ref headLeaf, int limit) throws IOException { Collection<Ref> refs = refdb.getRefs(prefix).values(); - refs = ordering.leastOf(refs, limit > 0 ? limit + 1 : refs.size()); + refs = ordering.leastOf(refs, limit > 0 ? Ints.saturatedCast(limit + 1L) : refs.size()); List<Map<String, Object>> result = Lists.newArrayListWithCapacity(refs.size()); for (Ref ref : refs) {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java index fcd91f3..c5b6482 100644 --- a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java +++ b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
@@ -14,11 +14,13 @@ package com.google.gitiles; +import static com.google.gitiles.TestGitilesUrls.URLS; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.net.HttpHeaders; import com.google.gitiles.RefServlet.RefJsonData; import com.google.gson.Gson; @@ -32,6 +34,7 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevTag; +import org.eclipse.jgit.revwalk.RevWalk; import org.junit.Before; import org.junit.Test; @@ -39,6 +42,8 @@ import java.util.List; import java.util.Map; +import javax.servlet.http.HttpServletRequest; + /** Tests for {@link Linkifier}. */ public class RefServletTest { private TestRepository<DfsRepository> repo; @@ -48,28 +53,21 @@ public void setUp() throws Exception { DfsRepository r = new InMemoryRepository(new DfsRepositoryDescription("test")); repo = new TestRepository<DfsRepository>(r); + servlet = TestGitilesServlet.create(repo); + } + private void setUpSimpleRefs() throws Exception { RevCommit commit = repo.branch("refs/heads/master").commit().create(); repo.update("refs/heads/branch", commit); repo.update("refs/tags/ctag", commit); RevTag tag = repo.tag("atag", commit); repo.update("refs/tags/atag", tag); - r.updateRef("HEAD").link("refs/heads/master"); - - servlet = TestGitilesServlet.create(repo); - } - - private String id(String refName) throws IOException { - return ObjectId.toString(repo.getRepository().getRef(refName).getObjectId()); - } - - private String peeled(String refName) throws IOException { - return ObjectId.toString(repo.getRepository().peel( - repo.getRepository().getRef(refName)).getPeeledObjectId()); + repo.getRepository().updateRef("HEAD").link("refs/heads/master"); } @Test public void evilRefName() throws Exception { + setUpSimpleRefs(); String evilRefName = "refs/evil/<script>window.close();</script>/&foo"; assertTrue(Repository.isValidRefName(evilRefName)); repo.branch(evilRefName).commit().create(); @@ -87,6 +85,7 @@ @Test public void getRefsTextAll() throws Exception { + setUpSimpleRefs(); FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); req.setPathInfo("/test/+refs"); req.setQueryString("format=TEXT"); @@ -106,6 +105,7 @@ @Test public void getRefsTextAllTrailingSlash() throws Exception { + setUpSimpleRefs(); FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); req.setPathInfo("/test/+refs"); req.setQueryString("format=TEXT"); @@ -125,6 +125,7 @@ @Test public void getRefsHeadsText() throws Exception { + setUpSimpleRefs(); FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); req.setPathInfo("/test/+refs/heads"); req.setQueryString("format=TEXT"); @@ -140,6 +141,7 @@ @Test public void getRefsHeadsTextTrailingSlash() throws Exception { + setUpSimpleRefs(); FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); req.setPathInfo("/test/+refs/heads/"); req.setQueryString("format=TEXT"); @@ -155,6 +157,7 @@ @Test public void noHeadText() throws Exception { + setUpSimpleRefs(); FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); req.setPathInfo("/test/+refs/HEAD"); req.setQueryString("format=TEXT"); @@ -168,6 +171,7 @@ @Test public void singleHeadText() throws Exception { + setUpSimpleRefs(); FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); req.setPathInfo("/test/+refs/heads/master"); req.setQueryString("format=TEXT"); @@ -182,6 +186,7 @@ @Test public void singlePeeledTagText() throws Exception { + setUpSimpleRefs(); FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); req.setPathInfo("/test/+refs/tags/atag"); req.setQueryString("format=TEXT"); @@ -197,6 +202,7 @@ @Test public void getRefsJsonAll() throws Exception { + setUpSimpleRefs(); Map<String, RefJsonData> result = buildJson("/test/+refs"); List<String> keys = ImmutableList.copyOf(result.keySet()); assertEquals(ImmutableList.of( @@ -235,6 +241,7 @@ @Test public void getRefsHeadsJson() throws Exception { + setUpSimpleRefs(); Map<String, RefJsonData> result = buildJson("/test/+refs/heads"); List<String> keys = ImmutableList.copyOf(result.keySet()); assertEquals(ImmutableList.of( @@ -267,4 +274,112 @@ assertEquals(magic, body.substring(0, magic.length())); return new Gson().fromJson(body.substring(magic.length()), new TypeToken<Map<String, RefJsonData>>() {}.getType()); } + + @Test + public void emptySoy() throws Exception { + assertEquals(ImmutableList.of(), buildBranchesSoyData()); + assertEquals(ImmutableList.of(), buildTagsSoyData()); + } + + @Test + public void branchesAndTagsSoy() throws Exception { + repo.branch("refs/heads/foo").commit().create(); + repo.branch("refs/heads/bar").commit().create(); + repo.branch("refs/tags/baz").commit().create(); + repo.branch("refs/nope/quux").commit().create(); + + assertEquals( + ImmutableList.of( + ref("/b/test/+/bar", "bar"), + ref("/b/test/+/foo", "foo")), + buildBranchesSoyData()); + assertEquals( + ImmutableList.of( + ref("/b/test/+/baz", "baz")), + buildTagsSoyData()); + } + + @Test + public void ambiguousBranchSoy() throws Exception { + repo.branch("refs/heads/foo").commit().create(); + repo.branch("refs/heads/bar").commit().create(); + repo.branch("refs/tags/foo").commit().create(); + + assertEquals( + ImmutableList.of( + ref("/b/test/+/bar", "bar"), + ref("/b/test/+/refs/heads/foo", "foo")), + buildBranchesSoyData()); + assertEquals( + ImmutableList.of( + // refs/tags/ is searched before refs/heads/, so this does not + // appear ambiguous. + ref("/b/test/+/foo", "foo")), + buildTagsSoyData()); + } + + @Test + public void ambiguousRelativeToNonBranchOrTagSoy() throws Exception { + repo.branch("refs/foo").commit().create(); + repo.branch("refs/heads/foo").commit().create(); + repo.branch("refs/tags/foo").commit().create(); + + assertEquals( + ImmutableList.of( + ref("/b/test/+/refs/heads/foo", "foo")), + buildBranchesSoyData()); + assertEquals( + ImmutableList.of( + ref("/b/test/+/refs/tags/foo", "foo")), + buildTagsSoyData()); + } + + @Test + public void refsHeadsSoy() throws Exception { + repo.branch("refs/heads/foo").commit().create(); + repo.branch("refs/heads/refs/heads/foo").commit().create(); + + assertEquals( + ImmutableList.of( + ref("/b/test/+/foo", "foo"), + ref("/b/test/+/refs/heads/refs/heads/foo", "refs/heads/foo")), + buildBranchesSoyData()); + } + + private HttpServletRequest buildSoyRequest() { + HttpServletRequest req = FakeHttpServletRequest.newRequest(repo.getRepository()); + ViewFilter.setView(req, GitilesView.repositoryIndex() + .setHostName(URLS.getHostName(req)) + .setServletPath(req.getServletPath()) + .setRepositoryName("test") + .build()); + return req; + } + + private List<?> buildBranchesSoyData() throws Exception { + return RefServlet.getBranchesSoyData(buildSoyRequest(), Integer.MAX_VALUE); + } + + private List<?> buildTagsSoyData() throws Exception { + RevWalk rw = new RevWalk(repo.getRepository()); + try { + return RefServlet.getTagsSoyData(buildSoyRequest(), + new TimeCache(TimeCache.defaultBuilder()), rw, Integer.MAX_VALUE); + } finally { + rw.release(); + } + } + + private String id(String refName) throws IOException { + return ObjectId.toString(repo.getRepository().getRef(refName).getObjectId()); + } + + private String peeled(String refName) throws IOException { + return ObjectId.toString(repo.getRepository().peel( + repo.getRepository().getRef(refName)).getPeeledObjectId()); + } + + private Map<String, String> ref(String url, String name) { + return ImmutableMap.of("url", url, "name", name); + } }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java deleted file mode 100644 index b4243c4..0000000 --- a/gitiles-servlet/src/test/java/com/google/gitiles/RepositoryIndexServletTest.java +++ /dev/null
@@ -1,139 +0,0 @@ -// Copyright 2012 Google Inc. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.gitiles; - -import static com.google.gitiles.TestGitilesUrls.URLS; -import static org.junit.Assert.assertEquals; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; - -import org.eclipse.jgit.internal.storage.dfs.DfsRepository; -import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription; -import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository; -import org.eclipse.jgit.junit.TestRepository; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; -import java.util.Map; - -import javax.servlet.http.HttpServletRequest; - -/** Tests for {@link RepositoryIndexServlet}. */ -public class RepositoryIndexServletTest { - private TestRepository<DfsRepository> repo; - private RepositoryIndexServlet servlet; - - @Before - public void setUp() throws Exception { - repo = new TestRepository<DfsRepository>( - new InMemoryRepository(new DfsRepositoryDescription("test"))); - servlet = new RepositoryIndexServlet( - new TestGitilesAccess(repo.getRepository()), - new DefaultRenderer(), - new TimeCache()); - } - - @Test - public void empty() throws Exception { - Map<String, ?> data = buildData(); - assertEquals(ImmutableList.of(), data.get("branches")); - assertEquals(ImmutableList.of(), data.get("tags")); - } - - @Test - public void branchesAndTags() throws Exception { - repo.branch("refs/heads/foo").commit().create(); - repo.branch("refs/heads/bar").commit().create(); - repo.branch("refs/tags/baz").commit().create(); - repo.branch("refs/nope/quux").commit().create(); - Map<String, ?> data = buildData(); - - assertEquals( - ImmutableList.of( - ref("/b/test/+/bar", "bar"), - ref("/b/test/+/foo", "foo")), - data.get("branches")); - assertEquals( - ImmutableList.of( - ref("/b/test/+/baz", "baz")), - data.get("tags")); - } - - @Test - public void ambiguousBranch() throws Exception { - repo.branch("refs/heads/foo").commit().create(); - repo.branch("refs/heads/bar").commit().create(); - repo.branch("refs/tags/foo").commit().create(); - Map<String, ?> data = buildData(); - - assertEquals( - ImmutableList.of( - ref("/b/test/+/bar", "bar"), - ref("/b/test/+/refs/heads/foo", "foo")), - data.get("branches")); - assertEquals( - ImmutableList.of( - // refs/tags/ is searched before refs/heads/, so this does not - // appear ambiguous. - ref("/b/test/+/foo", "foo")), - data.get("tags")); - } - - @Test - public void ambiguousRelativeToNonBranchOrTag() throws Exception { - repo.branch("refs/foo").commit().create(); - repo.branch("refs/heads/foo").commit().create(); - repo.branch("refs/tags/foo").commit().create(); - Map<String, ?> data = buildData(); - - assertEquals( - ImmutableList.of( - ref("/b/test/+/refs/heads/foo", "foo")), - data.get("branches")); - assertEquals( - ImmutableList.of( - ref("/b/test/+/refs/tags/foo", "foo")), - data.get("tags")); - } - - @Test - public void refsHeads() throws Exception { - repo.branch("refs/heads/foo").commit().create(); - repo.branch("refs/heads/refs/heads/foo").commit().create(); - Map<String, ?> data = buildData(); - - assertEquals( - ImmutableList.of( - ref("/b/test/+/foo", "foo"), - ref("/b/test/+/refs/heads/refs/heads/foo", "refs/heads/foo")), - data.get("branches")); - } - - private Map<String, ?> buildData() throws IOException { - HttpServletRequest req = FakeHttpServletRequest.newRequest(repo.getRepository()); - ViewFilter.setView(req, GitilesView.repositoryIndex() - .setHostName(URLS.getHostName(req)) - .setServletPath(req.getServletPath()) - .setRepositoryName("test") - .build()); - return servlet.buildData(req); - } - - private Map<String, String> ref(String url, String name) { - return ImmutableMap.of("url", url, "name", name); - } -}