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.

AdvertiseErrorTest.java 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /*
  2. * Copyright (C) 2010, Google Inc. 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 static org.junit.Assert.fail;
  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.RemoteRepositoryException;
  18. import org.eclipse.jgit.errors.RepositoryNotFoundException;
  19. import org.eclipse.jgit.http.server.GitServlet;
  20. import org.eclipse.jgit.http.server.resolver.DefaultReceivePackFactory;
  21. import org.eclipse.jgit.junit.TestRepository;
  22. import org.eclipse.jgit.lib.Constants;
  23. import org.eclipse.jgit.lib.NullProgressMonitor;
  24. import org.eclipse.jgit.lib.ObjectId;
  25. import org.eclipse.jgit.lib.Repository;
  26. import org.eclipse.jgit.lib.StoredConfig;
  27. import org.eclipse.jgit.revwalk.RevBlob;
  28. import org.eclipse.jgit.revwalk.RevCommit;
  29. import org.eclipse.jgit.transport.ReceivePack;
  30. import org.eclipse.jgit.transport.RemoteRefUpdate;
  31. import org.eclipse.jgit.transport.Transport;
  32. import org.eclipse.jgit.transport.URIish;
  33. import org.eclipse.jgit.transport.http.HttpConnectionFactory;
  34. import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
  35. import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
  36. import org.junit.Before;
  37. import org.junit.Test;
  38. public class AdvertiseErrorTest extends AllFactoriesHttpTestCase {
  39. private Repository remoteRepository;
  40. private URIish remoteURI;
  41. public AdvertiseErrorTest(HttpConnectionFactory cf) {
  42. super(cf);
  43. }
  44. @Override
  45. @Before
  46. public void setUp() throws Exception {
  47. super.setUp();
  48. final TestRepository<Repository> src = createTestRepository();
  49. final String srcName = src.getRepository().getDirectory().getName();
  50. ServletContextHandler app = server.addContext("/git");
  51. GitServlet gs = new GitServlet();
  52. gs.setRepositoryResolver((HttpServletRequest req, String name) -> {
  53. if (!name.equals(srcName)) {
  54. throw new RepositoryNotFoundException(name);
  55. }
  56. final Repository db = src.getRepository();
  57. db.incrementOpen();
  58. return db;
  59. });
  60. gs.setReceivePackFactory(new DefaultReceivePackFactory() {
  61. @Override
  62. public ReceivePack create(HttpServletRequest req, Repository db)
  63. throws ServiceNotEnabledException,
  64. ServiceNotAuthorizedException {
  65. ReceivePack rp = super.create(req, db);
  66. rp.sendError("message line 1");
  67. rp.sendError("no soup for you!");
  68. rp.sendError("come back next year!");
  69. return rp;
  70. }
  71. });
  72. app.addServlet(new ServletHolder(gs), "/*");
  73. server.setUp();
  74. remoteRepository = src.getRepository();
  75. remoteURI = toURIish(app, srcName);
  76. StoredConfig cfg = remoteRepository.getConfig();
  77. cfg.setBoolean("http", null, "receivepack", true);
  78. cfg.save();
  79. }
  80. @Test
  81. public void testPush_CreateBranch() throws Exception {
  82. final TestRepository src = createTestRepository();
  83. final RevBlob Q_txt = src.blob("new text");
  84. final RevCommit Q = src.commit().add("Q", Q_txt).create();
  85. final Repository db = src.getRepository();
  86. final String dstName = Constants.R_HEADS + "new.branch";
  87. try (Transport t = Transport.open(db, remoteURI)) {
  88. final String srcExpr = Q.name();
  89. final boolean forceUpdate = false;
  90. final String localName = null;
  91. final ObjectId oldId = null;
  92. RemoteRefUpdate update = new RemoteRefUpdate(src.getRepository(),
  93. srcExpr, dstName, forceUpdate, localName, oldId);
  94. try {
  95. t.push(NullProgressMonitor.INSTANCE, Collections
  96. .singleton(update));
  97. fail("push completed without throwing exception");
  98. } catch (RemoteRepositoryException error) {
  99. assertEquals(remoteURI + ": message line 1\n" //
  100. + "no soup for you!\n" //
  101. + "come back next year!", //
  102. error.getMessage());
  103. }
  104. }
  105. }
  106. }