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.

FileResolverTest.java 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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.assertFalse;
  13. import static org.junit.Assert.assertNotNull;
  14. import static org.junit.Assert.assertNull;
  15. import static org.junit.Assert.fail;
  16. import java.io.File;
  17. import java.io.IOException;
  18. import org.eclipse.jgit.errors.RepositoryNotFoundException;
  19. import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
  20. import org.eclipse.jgit.lib.Repository;
  21. import org.eclipse.jgit.transport.resolver.FileResolver;
  22. import org.eclipse.jgit.transport.resolver.RepositoryResolver;
  23. import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
  24. import org.eclipse.jgit.util.FileUtils;
  25. import org.junit.Test;
  26. public class FileResolverTest extends LocalDiskRepositoryTestCase {
  27. @Test
  28. public void testUnreasonableNames() throws ServiceNotEnabledException {
  29. assertUnreasonable("");
  30. assertUnreasonable("a\\b");
  31. assertUnreasonable("../b");
  32. assertUnreasonable("a/../b");
  33. assertUnreasonable("a/./b");
  34. assertUnreasonable("a//b");
  35. if (new File("/foo").isAbsolute())
  36. assertUnreasonable("/foo");
  37. if (new File("//server/share").isAbsolute())
  38. assertUnreasonable("//server/share");
  39. if (new File("C:/windows").isAbsolute())
  40. assertUnreasonable("C:/windows");
  41. }
  42. private static void assertUnreasonable(String name)
  43. throws ServiceNotEnabledException {
  44. FileResolver<RepositoryResolver> r = new FileResolver<>(
  45. new File("."), false);
  46. try {
  47. r.open(null, name);
  48. fail("Opened unreasonable name \"" + name + "\"");
  49. } catch (RepositoryNotFoundException e) {
  50. assertEquals("repository not found: " + name, e.getMessage());
  51. assertNull("has no cause", e.getCause());
  52. }
  53. }
  54. @Test
  55. public void testExportOk() throws IOException {
  56. final Repository a = createBareRepository();
  57. final String name = a.getDirectory().getName();
  58. final File base = a.getDirectory().getParentFile();
  59. final File export = new File(a.getDirectory(), "git-daemon-export-ok");
  60. FileResolver<RepositoryResolver> resolver;
  61. assertFalse("no git-daemon-export-ok", export.exists());
  62. resolver = new FileResolver<>(base, false /*
  63. * require
  64. * flag
  65. */);
  66. try {
  67. resolver.open(null, name);
  68. fail("opened non-exported repository");
  69. } catch (ServiceNotEnabledException e) {
  70. assertEquals("Service not enabled", e.getMessage());
  71. }
  72. resolver = new FileResolver<>(base, true /*
  73. * export
  74. * all
  75. */);
  76. try {
  77. resolver.open(null, name).close();
  78. } catch (ServiceNotEnabledException e) {
  79. fail("did not honor export-all flag");
  80. }
  81. FileUtils.createNewFile(export);
  82. resolver = new FileResolver<>(base, false /*
  83. * require
  84. * flag
  85. */);
  86. try {
  87. resolver.open(null, name).close();
  88. } catch (ServiceNotEnabledException e) {
  89. fail("did not honor git-daemon-export-ok");
  90. }
  91. }
  92. @Test
  93. public void testNotAGitRepository() throws IOException,
  94. ServiceNotEnabledException {
  95. final Repository a = createBareRepository();
  96. final String name = a.getDirectory().getName() + "-not-a-git";
  97. final File base = a.getDirectory().getParentFile();
  98. FileResolver<RepositoryResolver> resolver = new FileResolver<>(
  99. base, false);
  100. try {
  101. resolver.open(null, name);
  102. fail("opened non-git repository");
  103. } catch (RepositoryNotFoundException e) {
  104. assertEquals("repository not found: " + name, e.getMessage());
  105. Throwable why = e.getCause();
  106. assertNotNull("has cause", why);
  107. assertEquals("repository not found: "
  108. + new File(base, name).getPath(), why.getMessage());
  109. }
  110. }
  111. }