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 package org.eclipse.jgit.http.test;
44
45 import static org.junit.Assert.assertEquals;
46
47 import java.util.Collection;
48 import java.util.Collections;
49
50 import javax.servlet.http.HttpServletRequest;
51
52 import org.eclipse.jetty.servlet.ServletContextHandler;
53 import org.eclipse.jetty.servlet.ServletHolder;
54 import org.eclipse.jgit.errors.RepositoryNotFoundException;
55 import org.eclipse.jgit.http.server.GitServlet;
56 import org.eclipse.jgit.http.server.resolver.DefaultReceivePackFactory;
57 import org.eclipse.jgit.junit.TestRepository;
58 import org.eclipse.jgit.junit.http.HttpTestCase;
59 import org.eclipse.jgit.lib.Constants;
60 import org.eclipse.jgit.lib.NullProgressMonitor;
61 import org.eclipse.jgit.lib.ObjectId;
62 import org.eclipse.jgit.lib.Repository;
63 import org.eclipse.jgit.lib.StoredConfig;
64 import org.eclipse.jgit.revwalk.RevBlob;
65 import org.eclipse.jgit.revwalk.RevCommit;
66 import org.eclipse.jgit.transport.PostReceiveHook;
67 import org.eclipse.jgit.transport.PushResult;
68 import org.eclipse.jgit.transport.ReceiveCommand;
69 import org.eclipse.jgit.transport.ReceivePack;
70 import org.eclipse.jgit.transport.RemoteRefUpdate;
71 import org.eclipse.jgit.transport.Transport;
72 import org.eclipse.jgit.transport.URIish;
73 import org.eclipse.jgit.transport.resolver.RepositoryResolver;
74 import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
75 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
76 import org.junit.Before;
77 import org.junit.Test;
78
79 public class MeasurePackSizeTest extends HttpTestCase {
80 private Repository remoteRepository;
81
82 private URIish remoteURI;
83
84 long packSize = -1;
85
86 @Override
87 @Before
88 public void setUp() throws Exception {
89 super.setUp();
90
91 final TestRepository<Repository> src = createTestRepository();
92 final String srcName = src.getRepository().getDirectory().getName();
93
94 ServletContextHandler app = server.addContext("/git");
95 GitServlet gs = new GitServlet();
96 gs.setRepositoryResolver(new RepositoryResolver<HttpServletRequest>() {
97 @Override
98 public Repository open(HttpServletRequest req, String name)
99 throws RepositoryNotFoundException,
100 ServiceNotEnabledException {
101 if (!name.equals(srcName))
102 throw new RepositoryNotFoundException(name);
103
104 final Repository db = src.getRepository();
105 db.incrementOpen();
106 return db;
107 }
108 });
109 gs.setReceivePackFactory(new DefaultReceivePackFactory() {
110 @Override
111 public ReceivePack create(HttpServletRequest req, Repository db)
112 throws ServiceNotEnabledException,
113 ServiceNotAuthorizedException {
114 ReceivePack recv = super.create(req, db);
115 recv.setPostReceiveHook(new PostReceiveHook() {
116
117 @Override
118 public void onPostReceive(ReceivePack rp,
119 Collection<ReceiveCommand> commands) {
120 packSize = rp.getPackSize();
121 }
122 });
123 return recv;
124 }
125
126 });
127 app.addServlet(new ServletHolder(gs), "/*");
128
129 server.setUp();
130
131 remoteRepository = src.getRepository();
132 remoteURI = toURIish(app, srcName);
133
134 StoredConfig cfg = remoteRepository.getConfig();
135 cfg.setBoolean("http", null, "receivepack", true);
136 cfg.save();
137 }
138
139 @Test
140 public void testPush_packSize() throws Exception {
141 final TestRepository src = createTestRepository();
142 final RevBlob Q_txt = src
143 .blob("some blob content to measure pack size");
144 final RevCommit Q = src.commit().add("Q", Q_txt).create();
145 final Repository db = src.getRepository();
146 final String dstName = Constants.R_HEADS + "new.branch";
147 PushResult result;
148
149 try (Transport t = Transport.open(db, remoteURI)) {
150 final String srcExpr = Q.name();
151 final boolean forceUpdate = false;
152 final String localName = null;
153 final ObjectId oldId = null;
154
155 RemoteRefUpdate update = new RemoteRefUpdate(src.getRepository(),
156 srcExpr, dstName, forceUpdate, localName, oldId);
157 result = t.push(NullProgressMonitor.INSTANCE,
158 Collections.singleton(update));
159 }
160 assertEquals("expected 1 RemoteUpdate", 1, result.getRemoteUpdates()
161 .size());
162 assertEquals("unexpected pack size", 1398, packSize);
163 }
164
165 }