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 @Before
87 public void setUp() throws Exception {
88 super.setUp();
89
90 final TestRepository<Repository> src = createTestRepository();
91 final String srcName = src.getRepository().getDirectory().getName();
92
93 ServletContextHandler app = server.addContext("/git");
94 GitServlet gs = new GitServlet();
95 gs.setRepositoryResolver(new RepositoryResolver<HttpServletRequest>() {
96 public Repository open(HttpServletRequest req, String name)
97 throws RepositoryNotFoundException,
98 ServiceNotEnabledException {
99 if (!name.equals(srcName))
100 throw new RepositoryNotFoundException(name);
101
102 final Repository db = src.getRepository();
103 db.incrementOpen();
104 return db;
105 }
106 });
107 gs.setReceivePackFactory(new DefaultReceivePackFactory() {
108 public ReceivePack create(HttpServletRequest req, Repository db)
109 throws ServiceNotEnabledException,
110 ServiceNotAuthorizedException {
111 ReceivePack recv = super.create(req, db);
112 recv.setPostReceiveHook(new PostReceiveHook() {
113
114 public void onPostReceive(ReceivePack rp,
115 Collection<ReceiveCommand> commands) {
116 packSize = rp.getPackSize();
117 }
118 });
119 return recv;
120 }
121
122 });
123 app.addServlet(new ServletHolder(gs), "/*");
124
125 server.setUp();
126
127 remoteRepository = src.getRepository();
128 remoteURI = toURIish(app, srcName);
129
130 StoredConfig cfg = remoteRepository.getConfig();
131 cfg.setBoolean("http", null, "receivepack", true);
132 cfg.save();
133 }
134
135 @Test
136 public void testPush_packSize() throws Exception {
137 final TestRepository src = createTestRepository();
138 final RevBlob Q_txt = src
139 .blob("some blob content to measure pack size");
140 final RevCommit Q = src.commit().add("Q", Q_txt).create();
141 final Repository db = src.getRepository();
142 final String dstName = Constants.R_HEADS + "new.branch";
143 Transport t;
144 PushResult result;
145
146 t = Transport.open(db, remoteURI);
147 try {
148 final String srcExpr = Q.name();
149 final boolean forceUpdate = false;
150 final String localName = null;
151 final ObjectId oldId = null;
152
153 RemoteRefUpdate update = new RemoteRefUpdate(src.getRepository(),
154 srcExpr, dstName, forceUpdate, localName, oldId);
155 result = t.push(NullProgressMonitor.INSTANCE,
156 Collections.singleton(update));
157 } finally {
158 t.close();
159 }
160 assertEquals("expected 1 RemoteUpdate", 1, result.getRemoteUpdates()
161 .size());
162 assertEquals("unexpected pack size", 1398, packSize);
163 }
164
165 }