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 @Override
84 @Before
85 public void setUp() throws Exception {
86 super.setUp();
87
88 final TestRepository<Repository> src = createTestRepository();
89 final String srcName = src.getRepository().getDirectory().getName();
90
91 ServletContextHandler app = server.addContext("/git");
92 GitServlet gs = new GitServlet();
93 gs.setRepositoryResolver(new RepositoryResolver<HttpServletRequest>() {
94 @Override
95 public Repository open(HttpServletRequest req, String name)
96 throws RepositoryNotFoundException,
97 ServiceNotEnabledException {
98 if (!name.equals(srcName))
99 throw new RepositoryNotFoundException(name);
100
101 final Repository db = src.getRepository();
102 db.incrementOpen();
103 return db;
104 }
105 });
106 gs.setReceivePackFactory(new DefaultReceivePackFactory() {
107 @Override
108 public ReceivePack create(HttpServletRequest req, Repository db)
109 throws ServiceNotEnabledException,
110 ServiceNotAuthorizedException {
111 ReceivePack rp = super.create(req, db);
112 rp.sendError("message line 1");
113 rp.sendError("no soup for you!");
114 rp.sendError("come back next year!");
115 return rp;
116 }
117
118 });
119 app.addServlet(new ServletHolder(gs), "/*");
120
121 server.setUp();
122
123 remoteRepository = src.getRepository();
124 remoteURI = toURIish(app, srcName);
125
126 StoredConfig cfg = remoteRepository.getConfig();
127 cfg.setBoolean("http", null, "receivepack", true);
128 cfg.save();
129 }
130
131 @Test
132 public void testPush_CreateBranch() throws Exception {
133 final TestRepository src = createTestRepository();
134 final RevBlob Q_txt = src.blob("new text");
135 final RevCommit Q = src.commit().add("Q", Q_txt).create();
136 final Repository db = src.getRepository();
137 final String dstName = Constants.R_HEADS + "new.branch";
138 final Transport t = Transport.open(db, remoteURI);
139 try {
140 final String srcExpr = Q.name();
141 final boolean forceUpdate = false;
142 final String localName = null;
143 final ObjectId oldId = null;
144
145 RemoteRefUpdate update = new RemoteRefUpdate(src.getRepository(),
146 srcExpr, dstName, forceUpdate, localName, oldId);
147 try {
148 t.push(NullProgressMonitor.INSTANCE, Collections
149 .singleton(update));
150 fail("push completed without throwing exception");
151 } catch (RemoteRepositoryException error) {
152 assertEquals(remoteURI + ": message line 1\n"
153 + "no soup for you!\n"
154 + "come back next year!",
155 error.getMessage());
156 }
157 } finally {
158 t.close();
159 }
160 }
161 }