ServletTest: base class for servlet tests There was some code duplication in servlet test classes. Also some of them created a servlet class (e.g. DocServlet) directly, and some of them used TestGitilesServlet. This change: * adds ServletTest class with methods buildHtml, buildData, buildText and buildJson. It uses TestGitilesServlet. * inherits all servlet test classes from ServletTest and removes a lot of duplicated code. Change-Id: Ie81c6cb4d6a4d3627d1dd462e89dfdf8f1ee54ee
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 467a65e..04f82fd 100644 --- a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java +++ b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
@@ -21,21 +21,14 @@ 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; import com.google.gson.reflect.TypeToken; -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.eclipse.jgit.lib.ObjectId; 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; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -48,17 +41,7 @@ /** Tests for {@link Linkifier}. */ @RunWith(JUnit4.class) -public class RefServletTest { - private TestRepository<DfsRepository> repo; - private GitilesServlet servlet; - - @Before - public void setUp() throws Exception { - DfsRepository r = new InMemoryRepository(new DfsRepositoryDescription("test")); - repo = new TestRepository<>(r); - servlet = TestGitilesServlet.create(repo); - } - +public class RefServletTest extends ServletTest { private void setUpSimpleRefs() throws Exception { RevCommit commit = repo.branch("refs/heads/master").commit().create(); repo.update("refs/heads/branch", commit); @@ -75,12 +58,7 @@ assertTrue(Repository.isValidRefName(evilRefName)); repo.branch(evilRefName).commit().create(); - FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); - req.setPathInfo("/test/+refs/evil"); - req.setQueryString("format=TEXT"); - FakeHttpServletResponse res = new FakeHttpServletResponse(); - servlet.service(req, res); - + FakeHttpServletResponse res = buildText("/repo/+refs/evil"); assertEquals( id(evilRefName) + " refs/evil/<script>window.close();</script>/&foo\n", res.getActualBodyString()); @@ -89,13 +67,8 @@ @Test public void getRefsTextAll() throws Exception { setUpSimpleRefs(); - FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); - req.setPathInfo("/test/+refs"); - req.setQueryString("format=TEXT"); - FakeHttpServletResponse res = new FakeHttpServletResponse(); - servlet.service(req, res); + FakeHttpServletResponse res = buildText("/repo/+refs"); - assertEquals(200, res.getStatus()); assertEquals( id("HEAD") + " HEAD\n" + id("refs/heads/branch") + " refs/heads/branch\n" @@ -109,13 +82,8 @@ @Test public void getRefsTextAllTrailingSlash() throws Exception { setUpSimpleRefs(); - FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); - req.setPathInfo("/test/+refs"); - req.setQueryString("format=TEXT"); - FakeHttpServletResponse res = new FakeHttpServletResponse(); - servlet.service(req, res); + FakeHttpServletResponse res = buildText("/repo/+refs/"); - assertEquals(200, res.getStatus()); assertEquals( id("HEAD") + " HEAD\n" + id("refs/heads/branch") + " refs/heads/branch\n" @@ -129,13 +97,8 @@ @Test public void getRefsHeadsText() throws Exception { setUpSimpleRefs(); - FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); - req.setPathInfo("/test/+refs/heads"); - req.setQueryString("format=TEXT"); - FakeHttpServletResponse res = new FakeHttpServletResponse(); - servlet.service(req, res); + FakeHttpServletResponse res = buildText("/repo/+refs/heads"); - assertEquals(200, res.getStatus()); assertEquals( id("refs/heads/branch") + " refs/heads/branch\n" + id("refs/heads/master") + " refs/heads/master\n", @@ -145,13 +108,8 @@ @Test public void getRefsHeadsTextTrailingSlash() throws Exception { setUpSimpleRefs(); - FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); - req.setPathInfo("/test/+refs/heads/"); - req.setQueryString("format=TEXT"); - FakeHttpServletResponse res = new FakeHttpServletResponse(); - servlet.service(req, res); + FakeHttpServletResponse res = buildText("/repo/+refs/heads/"); - assertEquals(200, res.getStatus()); assertEquals( id("refs/heads/branch") + " refs/heads/branch\n" + id("refs/heads/master") + " refs/heads/master\n", @@ -161,13 +119,8 @@ @Test public void noHeadText() throws Exception { setUpSimpleRefs(); - FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); - req.setPathInfo("/test/+refs/HEAD"); - req.setQueryString("format=TEXT"); - FakeHttpServletResponse res = new FakeHttpServletResponse(); - servlet.service(req, res); + FakeHttpServletResponse res = buildText("/repo/+refs/HEAD"); - assertEquals(200, res.getStatus()); // /+refs/foo means refs/foo(/*), so this is empty. assertEquals("", res.getActualBodyString()); } @@ -175,13 +128,8 @@ @Test public void singleHeadText() throws Exception { setUpSimpleRefs(); - FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); - req.setPathInfo("/test/+refs/heads/master"); - req.setQueryString("format=TEXT"); - FakeHttpServletResponse res = new FakeHttpServletResponse(); - servlet.service(req, res); + FakeHttpServletResponse res = buildText("/repo/+refs/heads/master"); - assertEquals(200, res.getStatus()); assertEquals( id("refs/heads/master") + " refs/heads/master\n", res.getActualBodyString()); @@ -190,13 +138,8 @@ @Test public void singlePeeledTagText() throws Exception { setUpSimpleRefs(); - FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); - req.setPathInfo("/test/+refs/tags/atag"); - req.setQueryString("format=TEXT"); - FakeHttpServletResponse res = new FakeHttpServletResponse(); - servlet.service(req, res); + FakeHttpServletResponse res = buildText("/repo/+refs/tags/atag"); - assertEquals(200, res.getStatus()); assertEquals( id("refs/tags/atag") + " refs/tags/atag\n" + peeled("refs/tags/atag") + " refs/tags/atag^{}\n", @@ -206,7 +149,7 @@ @Test public void getRefsJsonAll() throws Exception { setUpSimpleRefs(); - Map<String, RefJsonData> result = buildJson("/test/+refs"); + Map<String, RefJsonData> result = buildRefJson("/repo/+refs"); List<String> keys = ImmutableList.copyOf(result.keySet()); assertEquals(ImmutableList.of( "HEAD", @@ -245,7 +188,7 @@ @Test public void getRefsHeadsJson() throws Exception { setUpSimpleRefs(); - Map<String, RefJsonData> result = buildJson("/test/+refs/heads"); + Map<String, RefJsonData> result = buildRefJson("/repo/+refs/heads"); List<String> keys = ImmutableList.copyOf(result.keySet()); assertEquals(ImmutableList.of( "branch", @@ -263,19 +206,10 @@ assertNull(master.target); } - private Map<String, RefJsonData> buildJson(String path) throws Exception { - FakeHttpServletRequest req = FakeHttpServletRequest.newRequest(); - req.setPathInfo(path); - req.setQueryString("format=JSON"); - FakeHttpServletResponse res = new FakeHttpServletResponse(); - servlet.service(req, res); - - assertEquals(200, res.getStatus()); - assertEquals("application/json", res.getHeader(HttpHeaders.CONTENT_TYPE)); - String body = res.getActualBodyString(); - String magic = ")]}'\n"; - assertEquals(magic, body.substring(0, magic.length())); - return new Gson().fromJson(body.substring(magic.length()), new TypeToken<Map<String, RefJsonData>>() {}.getType()); + private Map<String, RefJsonData> buildRefJson(String path) throws Exception { + return buildJson( + path, + new TypeToken<Map<String, RefJsonData>>() {}.getType()); } @Test