blob: 6f501850e0ccee1da15cd9a89a1e9c4d480ac267 [file] [log] [blame]
Dave Borowitzd0b7e182013-01-11 15:55:09 -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;
18import static org.junit.Assert.assertTrue;
Dave Borowitzd0b7e182013-01-11 15:55:09 -080019
Shawn Pearceb43b2d52013-03-18 10:55:15 -070020import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
21import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
22import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
Dave Borowitzd0b7e182013-01-11 15:55:09 -080023import org.eclipse.jgit.junit.TestRepository;
24import org.eclipse.jgit.lib.ObjectId;
25import org.eclipse.jgit.lib.Repository;
26import org.eclipse.jgit.revwalk.RevCommit;
27import org.eclipse.jgit.revwalk.RevTag;
Dave Borowitzd40bdf12014-04-19 19:33:56 -070028import org.junit.Before;
29import org.junit.Test;
30
31import java.io.IOException;
Dave Borowitzd0b7e182013-01-11 15:55:09 -080032
33/** Tests for {@link Linkifier}. */
Dave Borowitzd40bdf12014-04-19 19:33:56 -070034public class RefServletTest {
Dave Borowitz33d4fda2013-10-22 16:40:20 -070035 private TestRepository<DfsRepository> repo;
Dave Borowitzd0b7e182013-01-11 15:55:09 -080036 private GitilesServlet servlet;
37
Dave Borowitzd40bdf12014-04-19 19:33:56 -070038 @Before
39 public void setUp() throws Exception {
Dave Borowitzd0b7e182013-01-11 15:55:09 -080040 DfsRepository r = new InMemoryRepository(new DfsRepositoryDescription("test"));
41 repo = new TestRepository<DfsRepository>(r);
42
43 RevCommit commit = repo.branch("refs/heads/master").commit().create();
44 repo.update("refs/heads/branch", commit);
45 repo.update("refs/tags/ctag", commit);
46 RevTag tag = repo.tag("atag", commit);
47 repo.update("refs/tags/atag", tag);
48 r.updateRef("HEAD").link("refs/heads/master");
49
50 servlet = TestGitilesServlet.create(repo);
51 }
52
53 private String id(String refName) throws IOException {
54 return ObjectId.toString(repo.getRepository().getRef(refName).getObjectId());
55 }
56
57 private String peeled(String refName) throws IOException {
58 return ObjectId.toString(repo.getRepository().peel(
59 repo.getRepository().getRef(refName)).getPeeledObjectId());
60 }
61
Dave Borowitzd40bdf12014-04-19 19:33:56 -070062 @Test
63 public void evilRefName() throws Exception {
Dave Borowitzd0b7e182013-01-11 15:55:09 -080064 String evilRefName = "refs/evil/<script>window.close();</script>/&foo";
65 assertTrue(Repository.isValidRefName(evilRefName));
66 repo.branch(evilRefName).commit().create();
67
68 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
69 req.setPathInfo("/test/+refs/evil");
70 req.setQueryString("format=TEXT");
71 FakeHttpServletResponse res = new FakeHttpServletResponse();
72 servlet.service(req, res);
73
74 assertEquals(
75 id(evilRefName) + " refs/evil/&lt;script&gt;window.close();&lt;/script&gt;/&amp;foo\n",
76 res.getActualBodyString());
77 }
78
Dave Borowitzd40bdf12014-04-19 19:33:56 -070079 @Test
80 public void getRefsTextAll() throws Exception {
Dave Borowitzd0b7e182013-01-11 15:55:09 -080081 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
82 req.setPathInfo("/test/+refs");
83 req.setQueryString("format=TEXT");
84 FakeHttpServletResponse res = new FakeHttpServletResponse();
85 servlet.service(req, res);
86
87 assertEquals(200, res.getStatus());
88 assertEquals(
89 id("HEAD") + " HEAD\n"
90 + id("refs/heads/branch") + " refs/heads/branch\n"
91 + id("refs/heads/master") + " refs/heads/master\n"
92 + id("refs/tags/atag") + " refs/tags/atag\n"
93 + peeled("refs/tags/atag") + " refs/tags/atag^{}\n"
94 + id("refs/tags/ctag") + " refs/tags/ctag\n",
95 res.getActualBodyString());
96 }
97
Dave Borowitzd40bdf12014-04-19 19:33:56 -070098 @Test
99 public void getRefsTextAllTrailingSlash() throws Exception {
Dave Borowitzd0b7e182013-01-11 15:55:09 -0800100 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
101 req.setPathInfo("/test/+refs");
102 req.setQueryString("format=TEXT");
103 FakeHttpServletResponse res = new FakeHttpServletResponse();
104 servlet.service(req, res);
105
106 assertEquals(200, res.getStatus());
107 assertEquals(
108 id("HEAD") + " HEAD\n"
109 + id("refs/heads/branch") + " refs/heads/branch\n"
110 + id("refs/heads/master") + " refs/heads/master\n"
111 + id("refs/tags/atag") + " refs/tags/atag\n"
112 + peeled("refs/tags/atag") + " refs/tags/atag^{}\n"
113 + id("refs/tags/ctag") + " refs/tags/ctag\n",
114 res.getActualBodyString());
115 }
116
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700117 @Test
118 public void getRefsHeadsText() throws Exception {
Dave Borowitzd0b7e182013-01-11 15:55:09 -0800119 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
120 req.setPathInfo("/test/+refs/heads");
121 req.setQueryString("format=TEXT");
122 FakeHttpServletResponse res = new FakeHttpServletResponse();
123 servlet.service(req, res);
124
125 assertEquals(200, res.getStatus());
126 assertEquals(
127 id("refs/heads/branch") + " refs/heads/branch\n"
128 + id("refs/heads/master") + " refs/heads/master\n",
129 res.getActualBodyString());
130 }
131
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700132 @Test
133 public void getRefsHeadsTextTrailingSlash() throws Exception {
Dave Borowitzd0b7e182013-01-11 15:55:09 -0800134 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
135 req.setPathInfo("/test/+refs/heads/");
136 req.setQueryString("format=TEXT");
137 FakeHttpServletResponse res = new FakeHttpServletResponse();
138 servlet.service(req, res);
139
140 assertEquals(200, res.getStatus());
141 assertEquals(
142 id("refs/heads/branch") + " refs/heads/branch\n"
143 + id("refs/heads/master") + " refs/heads/master\n",
144 res.getActualBodyString());
145 }
146
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700147 @Test
148 public void noHeadText() throws Exception {
Dave Borowitzd0b7e182013-01-11 15:55:09 -0800149 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
150 req.setPathInfo("/test/+refs/HEAD");
151 req.setQueryString("format=TEXT");
152 FakeHttpServletResponse res = new FakeHttpServletResponse();
153 servlet.service(req, res);
154
155 assertEquals(200, res.getStatus());
156 // /+refs/foo means refs/foo(/*), so this is empty.
157 assertEquals("", res.getActualBodyString());
158 }
159
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700160 @Test
161 public void singleHeadText() throws Exception {
Dave Borowitzd0b7e182013-01-11 15:55:09 -0800162 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
163 req.setPathInfo("/test/+refs/heads/master");
164 req.setQueryString("format=TEXT");
165 FakeHttpServletResponse res = new FakeHttpServletResponse();
166 servlet.service(req, res);
167
168 assertEquals(200, res.getStatus());
169 assertEquals(
170 id("refs/heads/master") + " refs/heads/master\n",
171 res.getActualBodyString());
172 }
173
Dave Borowitzd40bdf12014-04-19 19:33:56 -0700174 @Test
175 public void singlePeeledTagText() throws Exception {
Dave Borowitzd0b7e182013-01-11 15:55:09 -0800176 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
177 req.setPathInfo("/test/+refs/tags/atag");
178 req.setQueryString("format=TEXT");
179 FakeHttpServletResponse res = new FakeHttpServletResponse();
180 servlet.service(req, res);
181
182 assertEquals(200, res.getStatus());
183 assertEquals(
184 id("refs/tags/atag") + " refs/tags/atag\n"
185 + peeled("refs/tags/atag") + " refs/tags/atag^{}\n",
186 res.getActualBodyString());
187 }
188}