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 public void setUp() throws Exception {
78 super.setUp();
79 server = new AppServer();
80 }
81
82 public void tearDown() throws Exception {
83 server.tearDown();
84 super.tearDown();
85 }
86
87 protected TestRepository<Repository> createTestRepository()
88 throws IOException {
89 return new TestRepository<Repository>(createBareRepository());
90 }
91
92 protected URIish toURIish(String path) throws URISyntaxException {
93 URI u = server.getURI().resolve(path);
94 return new URIish(u.toString());
95 }
96
97 protected URIish toURIish(ServletContextHandler app, String name)
98 throws URISyntaxException {
99 String p = app.getContextPath();
100 if (!p.endsWith("/") && !name.startsWith("/"))
101 p += "/";
102 p += name;
103 return toURIish(p);
104 }
105
106 protected List<AccessEvent> getRequests() {
107 return server.getRequests();
108 }
109
110 protected List<AccessEvent> getRequests(URIish base, String path) {
111 return server.getRequests(base, path);
112 }
113
114 protected List<AccessEvent> getRequests(String path) {
115 return server.getRequests(path);
116 }
117
118 protected static void fsck(Repository db, RevObject... tips)
119 throws Exception {
120 new TestRepository(db).fsck(tips);
121 }
122
123 protected static Set<RefSpec> mirror(String... refs) {
124 HashSet<RefSpec> r = new HashSet<RefSpec>();
125 for (String name : refs) {
126 RefSpec rs = new RefSpec(name);
127 rs = rs.setDestination(name);
128 rs = rs.setForceUpdate(true);
129 r.add(rs);
130 }
131 return r;
132 }
133
134 protected static Collection<RemoteRefUpdate> push(TestRepository from,
135 RevCommit q) throws IOException {
136 final Repository db = from.getRepository();
137 final String srcExpr = q.name();
138 final String dstName = master;
139 final boolean forceUpdate = true;
140 final String localName = null;
141 final ObjectId oldId = null;
142
143 RemoteRefUpdate u = new RemoteRefUpdate(db, srcExpr, dstName,
144 forceUpdate, localName, oldId);
145 return Collections.singleton(u);
146 }
147
148 public static String loose(URIish base, AnyObjectId id) {
149 final String objectName = id.name();
150 final String d = objectName.substring(0, 2);
151 final String f = objectName.substring(2);
152 return join(base, "objects/" + d + "/" + f);
153 }
154
155 public static String join(URIish base, String path) {
156 if (path.startsWith("/"))
157 fail("Cannot join absolute path " + path + " to URIish " + base);
158
159 String dir = base.getPath();
160 if (!dir.endsWith("/"))
161 dir += "/";
162 return dir + path;
163 }
164 }