blob: d8332d189a41bcf294afedb51ab32bc9ccca3780 [file] [log] [blame]
Shawn Pearcec709c4c2015-08-28 15:30:42 -07001// Copyright (C) 2015 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 Borowitzfde41fd2015-09-16 15:14:38 -040017import static com.google.common.truth.Truth.assertThat;
Shawn Pearcec709c4c2015-08-28 15:30:42 -070018import static com.google.gitiles.TestGitilesUrls.URLS;
19import static java.nio.charset.StandardCharsets.UTF_8;
Shawn Pearcec709c4c2015-08-28 15:30:42 -070020
21import com.google.gson.reflect.TypeToken;
22import com.google.template.soy.data.SoyListData;
23import com.google.template.soy.data.SoyMapData;
24import com.google.template.soy.data.restricted.NullData;
Dave Borowitz3b744b12016-08-19 16:11:10 -040025import java.util.Map;
26import javax.servlet.http.HttpServletResponse;
Shawn Pearcec709c4c2015-08-28 15:30:42 -070027import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
28import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
29import org.eclipse.jgit.junit.TestRepository;
30import org.junit.Before;
31import org.junit.Test;
Shawn Pearce9be60222015-08-31 11:41:19 -070032import org.junit.runner.RunWith;
33import org.junit.runners.JUnit4;
Shawn Pearcec709c4c2015-08-28 15:30:42 -070034
Shawn Pearcec709c4c2015-08-28 15:30:42 -070035/** Tests for {@link HostIndexServlet}. */
Shawn Pearce9be60222015-08-31 11:41:19 -070036@RunWith(JUnit4.class)
Shawn Pearcec709c4c2015-08-28 15:30:42 -070037public class HostIndexServletTest extends ServletTest {
38 private static final String NAME = "foo/bar/repo";
Dave Borowitz8e290352015-10-26 11:33:30 -040039 private static final TypeToken<Map<String, RepositoryDescription>> REPOS =
40 new TypeToken<Map<String, RepositoryDescription>>() {};
Shawn Pearcec709c4c2015-08-28 15:30:42 -070041
42 @Override
43 @Before
44 public void setUp() throws Exception {
David Pursehouseccaa85d2017-05-30 10:47:27 +090045 repo = new TestRepository<>(new InMemoryRepository(new DfsRepositoryDescription(NAME)));
Shawn Pearcec709c4c2015-08-28 15:30:42 -070046 servlet = TestGitilesServlet.create(repo);
47 }
48
49 @Test
50 public void rootHtml() throws Exception {
51 Map<String, ?> data = buildData("/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040052 assertThat(data).containsEntry("hostName", URLS.getHostName(null));
53 assertThat(data).containsEntry("breadcrumbs", NullData.INSTANCE);
54 assertThat(data).containsEntry("prefix", "");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070055
56 SoyListData repos = (SoyListData) data.get("repositories");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040057 assertThat(repos).hasSize(1);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070058
59 SoyMapData ent = (SoyMapData) repos.get(0);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040060 assertThat(ent.get("name").toString()).isEqualTo(NAME);
61 assertThat(ent.get("url").toString()).isEqualTo("/b/" + NAME + "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070062 }
63
64 @Test
65 public void fooSubdirHtml() throws Exception {
66 Map<String, ?> data = buildData("/foo/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040067 assertThat(data).containsEntry("hostName", URLS.getHostName(null) + "/foo");
68 assertThat(data).containsEntry("prefix", "foo/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070069
70 SoyListData breadcrumbs = (SoyListData) data.get("breadcrumbs");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040071 assertThat(breadcrumbs.length()).isEqualTo(2);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070072
73 SoyListData repos = (SoyListData) data.get("repositories");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040074 assertThat(repos.length()).isEqualTo(1);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070075
76 SoyMapData ent = (SoyMapData) repos.get(0);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040077 assertThat(ent.get("name").toString()).isEqualTo("bar/repo");
78 assertThat(ent.get("url").toString()).isEqualTo("/b/" + NAME + "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070079 }
80
81 @Test
82 public void fooBarSubdirHtml() throws Exception {
83 Map<String, ?> data = buildData("/foo/bar/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040084 assertThat(data).containsEntry("hostName", URLS.getHostName(null) + "/foo/bar");
85 assertThat(data).containsEntry("prefix", "foo/bar/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070086
87 SoyListData breadcrumbs = (SoyListData) data.get("breadcrumbs");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040088 assertThat(breadcrumbs.length()).isEqualTo(3);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070089
90 SoyListData repos = (SoyListData) data.get("repositories");
Dave Borowitzfde41fd2015-09-16 15:14:38 -040091 assertThat(repos.length()).isEqualTo(1);
Shawn Pearcec709c4c2015-08-28 15:30:42 -070092
93 SoyMapData ent = (SoyMapData) repos.get(0);
Dave Borowitzfde41fd2015-09-16 15:14:38 -040094 assertThat(ent.get("name").toString()).isEqualTo("repo");
95 assertThat(ent.get("url").toString()).isEqualTo("/b/" + NAME + "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -070096 }
97
98 @Test
99 public void rootText() throws Exception {
100 String name = repo.getRepository().getDescription().getRepositoryName();
101 FakeHttpServletResponse res = buildText("/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400102 assertThat(new String(res.getActualBody(), UTF_8)).isEqualTo(name + "\n");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700103 }
104
105 @Test
106 public void fooSubdirText() throws Exception {
107 FakeHttpServletResponse res = buildText("/foo/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400108 assertThat(new String(res.getActualBody(), UTF_8)).isEqualTo("bar/repo\n");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700109 }
110
111 @Test
112 public void fooBarSubdirText() throws Exception {
113 FakeHttpServletResponse res = buildText("/foo/bar/");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400114 assertThat(new String(res.getActualBody(), UTF_8)).isEqualTo("repo\n");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700115 }
116
117 @Test
118 public void rootJson() throws Exception {
119 String name = repo.getRepository().getDescription().getRepositoryName();
Dave Borowitza774f592015-10-26 11:41:27 -0400120 Map<String, RepositoryDescription> res = buildJson(REPOS, "/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700121
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400122 assertThat(res).hasSize(1);
123 assertThat(res).containsKey(name);
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700124 RepositoryDescription d = res.get(name);
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400125 assertThat(d.name).isEqualTo(name);
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700126 }
127
128 @Test
129 public void fooSubdirJson() throws Exception {
Dave Borowitza774f592015-10-26 11:41:27 -0400130 Map<String, RepositoryDescription> res = buildJson(REPOS, "/foo/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700131
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400132 assertThat(res).hasSize(1);
133 assertThat(res).containsKey("bar/repo");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700134 RepositoryDescription d = res.get("bar/repo");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400135 assertThat(d.name).isEqualTo(repo.getRepository().getDescription().getRepositoryName());
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700136 }
137
138 @Test
139 public void fooBarSubdirJson() throws Exception {
Dave Borowitza774f592015-10-26 11:41:27 -0400140 Map<String, RepositoryDescription> res = buildJson(REPOS, "/foo/bar/");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700141
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400142 assertThat(res).hasSize(1);
143 assertThat(res).containsKey("repo");
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700144 RepositoryDescription d = res.get("repo");
Dave Borowitzfde41fd2015-09-16 15:14:38 -0400145 assertThat(d.name).isEqualTo(repo.getRepository().getDescription().getRepositoryName());
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700146 }
147
148 @Test
149 public void emptySubdirectoryList() throws Exception {
150 assertNotFound("/no.repos/", null);
151 }
Shawn Pearce10e68e62016-01-02 09:37:58 -0800152
153 @Test
154 public void headOnRoot() throws Exception {
155 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
156 req.setMethod("HEAD");
157 req.setPathInfo("/");
158 FakeHttpServletResponse res = new FakeHttpServletResponse();
159 servlet.service(req, res);
160 assertThat(res.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
161 }
162
163 @Test
164 public void headOnMissingSubdir() throws Exception {
165 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
166 req.setMethod("HEAD");
167 req.setPathInfo("/no.repos/");
168 FakeHttpServletResponse res = new FakeHttpServletResponse();
169 servlet.service(req, res);
170 assertThat(res.getStatus()).isEqualTo(HttpServletResponse.SC_NOT_FOUND);
171 }
172
173 @Test
174 public void headOnPopulatedSubdir() throws Exception {
175 FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
176 req.setMethod("HEAD");
177 req.setPathInfo("/foo/");
178 FakeHttpServletResponse res = new FakeHttpServletResponse();
179 servlet.service(req, res);
180 assertThat(res.getStatus()).isEqualTo(HttpServletResponse.SC_OK);
181 }
Shawn Pearcec709c4c2015-08-28 15:30:42 -0700182}