1
2
3
4
5
6
7
8
9
10 package org.eclipse.jgit.http.test;
11
12 import static org.junit.Assert.assertEquals;
13
14 import java.util.Collection;
15 import java.util.Collections;
16
17 import javax.servlet.http.HttpServletRequest;
18
19 import org.eclipse.jetty.servlet.ServletContextHandler;
20 import org.eclipse.jetty.servlet.ServletHolder;
21 import org.eclipse.jgit.errors.RepositoryNotFoundException;
22 import org.eclipse.jgit.http.server.GitServlet;
23 import org.eclipse.jgit.http.server.resolver.DefaultReceivePackFactory;
24 import org.eclipse.jgit.junit.TestRepository;
25 import org.eclipse.jgit.lib.Constants;
26 import org.eclipse.jgit.lib.NullProgressMonitor;
27 import org.eclipse.jgit.lib.ObjectId;
28 import org.eclipse.jgit.lib.Repository;
29 import org.eclipse.jgit.lib.StoredConfig;
30 import org.eclipse.jgit.revwalk.RevBlob;
31 import org.eclipse.jgit.revwalk.RevCommit;
32 import org.eclipse.jgit.transport.PushResult;
33 import org.eclipse.jgit.transport.ReceiveCommand;
34 import org.eclipse.jgit.transport.ReceivePack;
35 import org.eclipse.jgit.transport.RemoteRefUpdate;
36 import org.eclipse.jgit.transport.Transport;
37 import org.eclipse.jgit.transport.URIish;
38 import org.eclipse.jgit.transport.http.HttpConnectionFactory;
39 import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
40 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
41 import org.junit.Before;
42 import org.junit.Test;
43
44 public class MeasurePackSizeTest extends AllFactoriesHttpTestCase {
45
46 private Repository remoteRepository;
47
48 private URIish remoteURI;
49
50 long packSize = -1;
51
52 public MeasurePackSizeTest(HttpConnectionFactory cf) {
53 super(cf);
54 }
55
56 @Override
57 @Before
58 public void setUp() throws Exception {
59 super.setUp();
60
61 final TestRepository<Repository> src = createTestRepository();
62 final String srcName = src.getRepository().getDirectory().getName();
63
64 ServletContextHandler app = server.addContext("/git");
65 GitServlet gs = new GitServlet();
66 gs.setRepositoryResolver((HttpServletRequest req, String name) -> {
67 if (!name.equals(srcName)) {
68 throw new RepositoryNotFoundException(name);
69 }
70 final Repository db = src.getRepository();
71 db.incrementOpen();
72 return db;
73 });
74 gs.setReceivePackFactory(new DefaultReceivePackFactory() {
75 @Override
76 public ReceivePack create(HttpServletRequest req, Repository db)
77 throws ServiceNotEnabledException,
78 ServiceNotAuthorizedException {
79 ReceivePack recv = super.create(req, db);
80 recv.setPostReceiveHook((ReceivePack rp,
81 Collection<ReceiveCommand> commands) -> {
82 packSize = rp.getPackSize();
83 });
84 return recv;
85 }
86
87 });
88 app.addServlet(new ServletHolder(gs), "/*");
89
90 server.setUp();
91
92 remoteRepository = src.getRepository();
93 addRepoToClose(remoteRepository);
94 remoteURI = toURIish(app, srcName);
95
96 StoredConfig cfg = remoteRepository.getConfig();
97 cfg.setBoolean("http", null, "receivepack", true);
98 cfg.save();
99 }
100
101 @Test
102 public void testPush_packSize() throws Exception {
103 final TestRepository src = createTestRepository();
104 final RevBlob Q_txt = src
105 .blob("some blob content to measure pack size");
106 final RevCommit Q = src.commit().add("Q", Q_txt).create();
107 final Repository db = src.getRepository();
108 final String dstName = Constants.R_HEADS + "new.branch";
109 PushResult result;
110
111 try (Transport t = Transport.open(db, remoteURI)) {
112 final String srcExpr = Q.name();
113 final boolean forceUpdate = false;
114 final String localName = null;
115 final ObjectId oldId = null;
116
117 RemoteRefUpdate update = new RemoteRefUpdate(src.getRepository(),
118 srcExpr, dstName, forceUpdate, localName, oldId);
119 result = t.push(NullProgressMonitor.INSTANCE,
120 Collections.singleton(update));
121 }
122 assertEquals("expected 1 RemoteUpdate", 1, result.getRemoteUpdates()
123 .size());
124 assertEquals("unexpected pack size", 1398, packSize);
125 }
126
127 }