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.http.test;
45
46 import static org.junit.Assert.assertEquals;
47 import static org.junit.Assert.fail;
48
49 import java.util.Collections;
50
51 import javax.servlet.http.HttpServletRequest;
52
53 import org.eclipse.jetty.servlet.ServletContextHandler;
54 import org.eclipse.jetty.servlet.ServletHolder;
55 import org.eclipse.jgit.errors.RemoteRepositoryException;
56 import org.eclipse.jgit.errors.RepositoryNotFoundException;
57 import org.eclipse.jgit.http.server.GitServlet;
58 import org.eclipse.jgit.http.server.resolver.DefaultReceivePackFactory;
59 import org.eclipse.jgit.junit.TestRepository;
60 import org.eclipse.jgit.junit.http.HttpTestCase;
61 import org.eclipse.jgit.lib.Constants;
62 import org.eclipse.jgit.lib.NullProgressMonitor;
63 import org.eclipse.jgit.lib.ObjectId;
64 import org.eclipse.jgit.lib.Repository;
65 import org.eclipse.jgit.lib.StoredConfig;
66 import org.eclipse.jgit.revwalk.RevBlob;
67 import org.eclipse.jgit.revwalk.RevCommit;
68 import org.eclipse.jgit.transport.ReceivePack;
69 import org.eclipse.jgit.transport.RemoteRefUpdate;
70 import org.eclipse.jgit.transport.Transport;
71 import org.eclipse.jgit.transport.URIish;
72 import org.eclipse.jgit.transport.resolver.RepositoryResolver;
73 import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
74 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
75 import org.junit.Before;
76 import org.junit.Test;
77
78 public class AdvertiseErrorTest extends HttpTestCase {
79 private Repository remoteRepository;
80
81 private URIish remoteURI;
82
83 @Before
84 public void setUp() throws Exception {
85 super.setUp();
86
87 final TestRepository<Repository> src = createTestRepository();
88 final String srcName = src.getRepository().getDirectory().getName();
89
90 ServletContextHandler app = server.addContext("/git");
91 GitServlet gs = new GitServlet();
92 gs.setRepositoryResolver(new RepositoryResolver<HttpServletRequest>() {
93 public Repository open(HttpServletRequest req, String name)
94 throws RepositoryNotFoundException,
95 ServiceNotEnabledException {
96 if (!name.equals(srcName))
97 throw new RepositoryNotFoundException(name);
98
99 final Repository db = src.getRepository();
100 db.incrementOpen();
101 return db;
102 }
103 });
104 gs.setReceivePackFactory(new DefaultReceivePackFactory() {
105 public ReceivePack create(HttpServletRequest req, Repository db)
106 throws ServiceNotEnabledException,
107 ServiceNotAuthorizedException {
108 ReceivePack rp = super.create(req, db);
109 rp.sendError("message line 1");
110 rp.sendError("no soup for you!");
111 rp.sendError("come back next year!");
112 return rp;
113 }
114
115 });
116 app.addServlet(new ServletHolder(gs), "/*");
117
118 server.setUp();
119
120 remoteRepository = src.getRepository();
121 remoteURI = toURIish(app, srcName);
122
123 StoredConfig cfg = remoteRepository.getConfig();
124 cfg.setBoolean("http", null, "receivepack", true);
125 cfg.save();
126 }
127
128 @Test
129 public void testPush_CreateBranch() throws Exception {
130 final TestRepository src = createTestRepository();
131 final RevBlob Q_txt = src.blob("new text");
132 final RevCommit Q = src.commit().add("Q", Q_txt).create();
133 final Repository db = src.getRepository();
134 final String dstName = Constants.R_HEADS + "new.branch";
135 final Transport t = Transport.open(db, remoteURI);
136 try {
137 final String srcExpr = Q.name();
138 final boolean forceUpdate = false;
139 final String localName = null;
140 final ObjectId oldId = null;
141
142 RemoteRefUpdate update = new RemoteRefUpdate(src.getRepository(),
143 srcExpr, dstName, forceUpdate, localName, oldId);
144 try {
145 t.push(NullProgressMonitor.INSTANCE, Collections
146 .singleton(update));
147 fail("push completed without throwing exception");
148 } catch (RemoteRepositoryException error) {
149 assertEquals(remoteURI + ": message line 1\n"
150 + "no soup for you!\n"
151 + "come back next year!",
152 error.getMessage());
153 }
154 } finally {
155 t.close();
156 }
157 }
158 }