You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MeasurePackSizeTest.java 4.0KB

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