Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

HttpConfigUriPathTest.java 7.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /*
  2. * Copyright (C) 2017, Thomas Wolf <thomas.wolf@paranor.ch> 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.transport;
  11. import static org.junit.Assert.assertEquals;
  12. import static org.junit.Assert.assertNull;
  13. import org.junit.Test;
  14. /**
  15. * Basic URI path prefix match tests for {@link HttpConfig}.
  16. */
  17. public class HttpConfigUriPathTest {
  18. @Test
  19. public void testNormalizationEmptyPaths() {
  20. assertEquals("/", HttpConfig.normalize(""));
  21. assertEquals("/", HttpConfig.normalize("/"));
  22. }
  23. @Test
  24. public void testNormalization() {
  25. assertEquals("/f", HttpConfig.normalize("f"));
  26. assertEquals("/f", HttpConfig.normalize("/f"));
  27. assertEquals("/f/", HttpConfig.normalize("/f/"));
  28. assertEquals("/foo", HttpConfig.normalize("foo"));
  29. assertEquals("/foo", HttpConfig.normalize("/foo"));
  30. assertEquals("/foo/", HttpConfig.normalize("/foo/"));
  31. assertEquals("/foo/bar", HttpConfig.normalize("foo/bar"));
  32. assertEquals("/foo/bar", HttpConfig.normalize("/foo/bar"));
  33. assertEquals("/foo/bar/", HttpConfig.normalize("/foo/bar/"));
  34. }
  35. @Test
  36. public void testNormalizationWithDot() {
  37. assertEquals("/", HttpConfig.normalize("."));
  38. assertEquals("/", HttpConfig.normalize("/."));
  39. assertEquals("/", HttpConfig.normalize("/./"));
  40. assertEquals("/foo", HttpConfig.normalize("foo/."));
  41. assertEquals("/foo/bar", HttpConfig.normalize("/foo/./bar"));
  42. assertEquals("/foo/bar", HttpConfig.normalize("/foo/bar/."));
  43. assertEquals("/foo/bar/", HttpConfig.normalize("/foo/bar/./"));
  44. assertEquals("/foo/bar", HttpConfig.normalize("/foo/./././bar"));
  45. assertEquals("/foo/bar/", HttpConfig.normalize("/foo/./././bar/"));
  46. assertEquals("/foo/bar", HttpConfig.normalize("/foo/bar/././."));
  47. assertEquals("/foo/bar/", HttpConfig.normalize("/foo/bar/./././"));
  48. assertEquals("/foo/bar/.baz/bam",
  49. HttpConfig.normalize("/foo/bar/.baz/bam"));
  50. assertEquals("/foo/bar/.baz/bam/",
  51. HttpConfig.normalize("/foo/bar/.baz/bam/"));
  52. }
  53. @Test
  54. public void testNormalizationWithDotDot() {
  55. assertEquals("/", HttpConfig.normalize("foo/.."));
  56. assertEquals("/", HttpConfig.normalize("/foo/.."));
  57. assertEquals("/", HttpConfig.normalize("/foo/../bar/.."));
  58. assertEquals("/", HttpConfig.normalize("/foo/.././bar/.."));
  59. assertEquals("/bar", HttpConfig.normalize("foo/../bar"));
  60. assertEquals("/bar", HttpConfig.normalize("/foo/../bar"));
  61. assertEquals("/bar", HttpConfig.normalize("/foo/./.././bar"));
  62. assertEquals("/bar/", HttpConfig.normalize("/foo/../bar/"));
  63. assertEquals("/bar/", HttpConfig.normalize("/foo/./.././bar/"));
  64. assertEquals("/foo/bar", HttpConfig.normalize("/foo/bar/baz/.."));
  65. assertEquals("/foo/bar/", HttpConfig.normalize("/foo/bar/baz/../"));
  66. assertEquals("/foo", HttpConfig.normalize("/foo/bar/baz/../.."));
  67. assertEquals("/foo", HttpConfig.normalize("/foo/bar/baz/../.."));
  68. assertEquals("/foo", HttpConfig.normalize("/foo/bar/baz/.././.."));
  69. assertEquals("/foo", HttpConfig.normalize("/foo/bar/baz/../././.."));
  70. assertEquals("/foo/baz", HttpConfig.normalize("/foo/bar/../baz"));
  71. assertEquals("/foo/baz/", HttpConfig.normalize("/foo/bar/../baz/"));
  72. assertEquals("/foo/baz", HttpConfig.normalize("/foo/bar/../baz/."));
  73. assertEquals("/foo/baz/", HttpConfig.normalize("/foo/bar/../baz/./"));
  74. assertEquals("/foo", HttpConfig.normalize("/foo/bar/../baz/.."));
  75. assertEquals("/foo/", HttpConfig.normalize("/foo/bar/../baz/../"));
  76. assertEquals("/baz", HttpConfig.normalize("/foo/bar/../../baz"));
  77. assertEquals("/baz/", HttpConfig.normalize("/foo/bar/../../baz/"));
  78. assertEquals("/foo/.b/bar", HttpConfig.normalize("/foo/.b/bar"));
  79. assertEquals("/.f/foo/.b/bar/", HttpConfig.normalize(".f/foo/.b/bar/"));
  80. assertEquals("/foo/bar/..baz/bam",
  81. HttpConfig.normalize("/foo/bar/..baz/bam"));
  82. assertEquals("/foo/bar/..baz/bam/",
  83. HttpConfig.normalize("/foo/bar/..baz/bam/"));
  84. assertEquals("/foo/bar/.../baz/bam",
  85. HttpConfig.normalize("/foo/bar/.../baz/bam"));
  86. assertEquals("/foo/bar/.../baz/bam/",
  87. HttpConfig.normalize("/foo/bar/.../baz/bam/"));
  88. }
  89. @Test
  90. public void testNormalizationWithDoubleSlash() {
  91. assertEquals("/", HttpConfig.normalize("//"));
  92. assertEquals("/foo/", HttpConfig.normalize("///foo//"));
  93. assertEquals("/foo", HttpConfig.normalize("///foo//."));
  94. assertEquals("/foo/", HttpConfig.normalize("///foo//.////"));
  95. assertEquals("/foo/bar", HttpConfig.normalize("/foo//bar"));
  96. assertEquals("/foo/bar", HttpConfig.normalize("/foo//bar//."));
  97. assertEquals("/foo/bar/", HttpConfig.normalize("/foo//bar//./"));
  98. }
  99. @Test
  100. public void testNormalizationWithDotDotFailing() {
  101. assertNull(HttpConfig.normalize(".."));
  102. assertNull(HttpConfig.normalize("/.."));
  103. assertNull(HttpConfig.normalize("/../"));
  104. assertNull(HttpConfig.normalize("/../foo"));
  105. assertNull(HttpConfig.normalize("./../foo"));
  106. assertNull(HttpConfig.normalize("/./../foo"));
  107. assertNull(HttpConfig.normalize("/foo/./.././.."));
  108. assertNull(HttpConfig.normalize("/foo/../bar/../.."));
  109. assertNull(HttpConfig.normalize("/foo/../bar/../../baz"));
  110. }
  111. @Test
  112. public void testSegmentCompare() {
  113. // 2nd parameter is the match, will be normalized
  114. assertSuccess("/foo", "");
  115. assertSuccess("/foo", "/");
  116. assertSuccess("/foo", "//");
  117. assertSuccess("/foo", "foo");
  118. assertSuccess("/foo", "/foo");
  119. assertSuccess("/foo/", "foo");
  120. assertSuccess("/foo/", "/foo");
  121. assertSuccess("/foo/", "foo/");
  122. assertSuccess("/foo/", "/foo/");
  123. assertSuccess("/foo/bar", "foo");
  124. assertSuccess("/foo/bar", "foo/");
  125. assertSuccess("/foo/bar", "foo/bar");
  126. assertSuccess("/foo/bar/", "foo/bar");
  127. assertSuccess("/foo/bar/", "foo/bar/");
  128. assertSuccess("/foo/bar", "/foo/bar");
  129. assertSuccess("/foo/bar/", "/foo/bar");
  130. assertSuccess("/foo/bar/", "/foo/bar/");
  131. assertSuccess("/foo/bar", "/foo/bar/..");
  132. assertSuccess("/foo/bar/", "/foo/bar/..");
  133. assertSuccess("/foo/bar/", "/foo/bar/../");
  134. assertSuccess("/foo/bar", "/foo/./bar");
  135. assertSuccess("/foo/bar/", "/foo/./bar/");
  136. assertSuccess("/some/repo/.git", "/some/repo");
  137. assertSuccess("/some/repo/bare.git", "/some/repo");
  138. assertSuccess("/some/repo/.git", "/some/repo/.git");
  139. assertSuccess("/some/repo/bare.git", "/some/repo/bare.git");
  140. }
  141. @Test
  142. public void testSegmentCompareFailing() {
  143. // 2nd parameter is the match, will be normalized
  144. assertEquals(-1, HttpConfig.segmentCompare("/foo", "foo/"));
  145. assertEquals(-1, HttpConfig.segmentCompare("/foo", "/foo/"));
  146. assertEquals(-1, HttpConfig.segmentCompare("/foobar", "foo"));
  147. assertEquals(-1, HttpConfig.segmentCompare("/foobar", "/foo"));
  148. assertEquals(-1,
  149. HttpConfig.segmentCompare("/foo/barbar/baz", "foo/bar"));
  150. assertEquals(-1, HttpConfig.segmentCompare("/foo/barbar", "/foo/bar"));
  151. assertEquals(-1,
  152. HttpConfig.segmentCompare("/some/repo.git", "/some/repo"));
  153. assertEquals(-1,
  154. HttpConfig.segmentCompare("/some/repo.git", "/some/repo.g"));
  155. assertEquals(-1, HttpConfig.segmentCompare("/some/repo/bare.git",
  156. "/some/repo/bar"));
  157. assertSuccess("/some/repo/bare.git", "/some/repo");
  158. // Just to make sure we don't use the PathMatchers...
  159. assertEquals(-1, HttpConfig.segmentCompare("/foo/barbar/baz", "**"));
  160. assertEquals(-1,
  161. HttpConfig.segmentCompare("/foo/barbar/baz", "**/foo"));
  162. assertEquals(-1,
  163. HttpConfig.segmentCompare("/foo/barbar/baz", "/*/barbar/**"));
  164. assertEquals(-1, HttpConfig.segmentCompare("/foo", "/*"));
  165. assertEquals(-1, HttpConfig.segmentCompare("/foo", "/???"));
  166. assertEquals(-1, HttpConfig.segmentCompare("/foo/bar/baz", "bar"));
  167. // Failing to normalize
  168. assertEquals(-1,
  169. HttpConfig.segmentCompare("/foo/bar/baz", "bar/../.."));
  170. }
  171. private void assertSuccess(String uri, String match) {
  172. String normalized = HttpConfig.normalize(match);
  173. assertEquals(normalized.length(),
  174. HttpConfig.segmentCompare(uri, match));
  175. }
  176. }