1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 package org.eclipse.jgit.junit.http;
45
46 import static org.junit.Assert.fail;
47
48 import java.io.IOException;
49 import java.net.URI;
50 import java.net.URISyntaxException;
51 import java.util.Collection;
52 import java.util.Collections;
53 import java.util.HashSet;
54 import java.util.List;
55 import java.util.Set;
56
57 import org.eclipse.jetty.servlet.ServletContextHandler;
58 import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
59 import org.eclipse.jgit.junit.TestRepository;
60 import org.eclipse.jgit.lib.AnyObjectId;
61 import org.eclipse.jgit.lib.Constants;
62 import org.eclipse.jgit.lib.ObjectId;
63 import org.eclipse.jgit.lib.Repository;
64 import org.eclipse.jgit.revwalk.RevCommit;
65 import org.eclipse.jgit.revwalk.RevObject;
66 import org.eclipse.jgit.transport.RefSpec;
67 import org.eclipse.jgit.transport.RemoteRefUpdate;
68 import org.eclipse.jgit.transport.URIish;
69
70
71 public abstract class HttpTestCase extends LocalDiskRepositoryTestCase {
72 protected static final String master = Constants.R_HEADS + Constants.MASTER;
73
74
75 protected AppServer server;
76
77 @Override
78 public void setUp() throws Exception {
79 super.setUp();
80 server = new AppServer();
81 }
82
83 @Override
84 public void tearDown() throws Exception {
85 server.tearDown();
86 super.tearDown();
87 }
88
89 protected TestRepository<Repository> createTestRepository()
90 throws IOException {
91 return new TestRepository<>(createBareRepository());
92 }
93
94 protected URIish toURIish(String path) throws URISyntaxException {
95 URI u = server.getURI().resolve(path);
96 return new URIish(u.toString());
97 }
98
99 protected URIish toURIish(ServletContextHandler app, String name)
100 throws URISyntaxException {
101 String p = app.getContextPath();
102 if (!p.endsWith("/") && !name.startsWith("/"))
103 p += "/";
104 p += name;
105 return toURIish(p);
106 }
107
108 protected List<AccessEvent> getRequests() {
109 return server.getRequests();
110 }
111
112 protected List<AccessEvent> getRequests(URIish base, String path) {
113 return server.getRequests(base, path);
114 }
115
116 protected List<AccessEvent> getRequests(String path) {
117 return server.getRequests(path);
118 }
119
120 protected static void fsck(Repository db, RevObject... tips)
121 throws Exception {
122 TestRepository<? extends Repository> tr =
123 new TestRepository<>(db);
124 tr.fsck(tips);
125 }
126
127 protected static Set<RefSpec> mirror(String... refs) {
128 HashSet<RefSpec> r = new HashSet<>();
129 for (String name : refs) {
130 RefSpec rs = new RefSpec(name);
131 rs = rs.setDestination(name);
132 rs = rs.setForceUpdate(true);
133 r.add(rs);
134 }
135 return r;
136 }
137
138 protected static Collection<RemoteRefUpdate> push(TestRepository from,
139 RevCommit q) throws IOException {
140 final Repository db = from.getRepository();
141 final String srcExpr = q.name();
142 final String dstName = master;
143 final boolean forceUpdate = true;
144 final String localName = null;
145 final ObjectId oldId = null;
146
147 RemoteRefUpdate u = new RemoteRefUpdate(db, srcExpr, dstName,
148 forceUpdate, localName, oldId);
149 return Collections.singleton(u);
150 }
151
152 public static String loose(URIish base, AnyObjectId id) {
153 final String objectName = id.name();
154 final String d = objectName.substring(0, 2);
155 final String f = objectName.substring(2);
156 return join(base, "objects/" + d + "/" + f);
157 }
158
159 public static String join(URIish base, String path) {
160 if (path.startsWith("/"))
161 fail("Cannot join absolute path " + path + " to URIish " + base);
162
163 String dir = base.getPath();
164 if (!dir.endsWith("/"))
165 dir += "/";
166 return dir + path;
167 }
168 }