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.ServiceNotAuthorizedException;
73 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
74 import org.junit.Before;
75 import org.junit.Test;
76
77 public class AdvertiseErrorTest extends HttpTestCase {
78 private Repository remoteRepository;
79
80 private URIish remoteURI;
81
82 @Override
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((HttpServletRequest req, String name) -> {
93 if (!name.equals(srcName)) {
94 throw new RepositoryNotFoundException(name);
95 }
96 final Repository db = src.getRepository();
97 db.incrementOpen();
98 return db;
99 });
100 gs.setReceivePackFactory(new DefaultReceivePackFactory() {
101 @Override
102 public ReceivePack create(HttpServletRequest req, Repository db)
103 throws ServiceNotEnabledException,
104 ServiceNotAuthorizedException {
105 ReceivePack rp = super.create(req, db);
106 rp.sendError("message line 1");
107 rp.sendError("no soup for you!");
108 rp.sendError("come back next year!");
109 return rp;
110 }
111
112 });
113 app.addServlet(new ServletHolder(gs), "/*");
114
115 server.setUp();
116
117 remoteRepository = src.getRepository();
118 remoteURI = toURIish(app, srcName);
119
120 StoredConfig cfg = remoteRepository.getConfig();
121 cfg.setBoolean("http", null, "receivepack", true);
122 cfg.save();
123 }
124
125 @Test
126 public void testPush_CreateBranch() throws Exception {
127 final TestRepository src = createTestRepository();
128 final RevBlob Q_txt = src.blob("new text");
129 final RevCommit Q = src.commit().add("Q", Q_txt).create();
130 final Repository db = src.getRepository();
131 final String dstName = Constants.R_HEADS + "new.branch";
132 try (Transport t = Transport.open(db, remoteURI)) {
133 final String srcExpr = Q.name();
134 final boolean forceUpdate = false;
135 final String localName = null;
136 final ObjectId oldId = null;
137
138 RemoteRefUpdate update = new RemoteRefUpdate(src.getRepository(),
139 srcExpr, dstName, forceUpdate, localName, oldId);
140 try {
141 t.push(NullProgressMonitor.INSTANCE, Collections
142 .singleton(update));
143 fail("push completed without throwing exception");
144 } catch (RemoteRepositoryException error) {
145 assertEquals(remoteURI + ": message line 1\n"
146 + "no soup for you!\n"
147 + "come back next year!",
148 error.getMessage());
149 }
150 }
151 }
152 }