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.

BasicRemoteRepositoryValidatorTest.java 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. package org.apache.archiva.repository.base.remote;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. * Unless required by applicable law or agreed to in writing,
  13. * software distributed under the License is distributed on an
  14. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15. * KIND, either express or implied. See the License for the
  16. * specific language governing permissions and limitations
  17. * under the License.
  18. */
  19. import org.apache.archiva.common.filelock.DefaultFileLockManager;
  20. import org.apache.archiva.common.filelock.FileLockManager;
  21. import org.apache.archiva.repository.EditableManagedRepository;
  22. import org.apache.archiva.repository.EditableRemoteRepository;
  23. import org.apache.archiva.repository.EditableRepository;
  24. import org.apache.archiva.repository.ManagedRepository;
  25. import org.apache.archiva.repository.RemoteRepository;
  26. import org.apache.archiva.repository.RepositoryException;
  27. import org.apache.archiva.repository.RepositoryRegistry;
  28. import org.apache.archiva.repository.base.ConfigurationHandler;
  29. import org.apache.archiva.repository.base.RepositoryHandlerDependencies;
  30. import org.apache.archiva.repository.base.group.RepositoryGroupHandler;
  31. import org.apache.archiva.repository.base.managed.BasicManagedRepository;
  32. import org.apache.archiva.repository.base.managed.BasicManagedRepositoryValidator;
  33. import org.apache.archiva.repository.mock.ManagedRepositoryContentMock;
  34. import org.apache.archiva.repository.mock.RemoteRepositoryContentMock;
  35. import org.apache.archiva.repository.storage.fs.FilesystemStorage;
  36. import org.apache.archiva.repository.validation.ValidationResponse;
  37. import org.junit.jupiter.api.AfterEach;
  38. import org.junit.jupiter.api.Test;
  39. import org.junit.jupiter.api.extension.ExtendWith;
  40. import org.springframework.test.context.ContextConfiguration;
  41. import org.springframework.test.context.junit.jupiter.SpringExtension;
  42. import javax.inject.Inject;
  43. import java.io.IOException;
  44. import java.net.URISyntaxException;
  45. import java.nio.file.Path;
  46. import java.nio.file.Paths;
  47. import static org.junit.jupiter.api.Assertions.*;
  48. /**
  49. * @author Martin Stockhammer <martin_s@apache.org>
  50. */
  51. @ExtendWith( SpringExtension.class)
  52. @ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" })
  53. class BasicRemoteRepositoryValidatorTest
  54. {
  55. @Inject
  56. ConfigurationHandler configurationHandler;
  57. @Inject
  58. RepositoryRegistry repositoryRegistry;
  59. @Inject
  60. RepositoryHandlerDependencies repositoryHandlerDependencies;
  61. Path repoBaseDir;
  62. @AfterEach
  63. void cleanup() {
  64. try
  65. {
  66. repositoryRegistry.removeRepository( "test" );
  67. }
  68. catch ( RepositoryException e )
  69. {
  70. // Ignore this
  71. }
  72. }
  73. protected EditableRemoteRepository createRepository( String id, String name, Path location ) throws IOException
  74. {
  75. FileLockManager lockManager = new DefaultFileLockManager();
  76. FilesystemStorage storage = new FilesystemStorage(location.toAbsolutePath(), lockManager);
  77. BasicRemoteRepository repo = new BasicRemoteRepository(id, name, storage);
  78. repo.setLocation( location.toAbsolutePath().toUri());
  79. repo.setContent(new RemoteRepositoryContentMock());
  80. return repo;
  81. }
  82. private Path getRepoBaseDir() {
  83. if (repoBaseDir==null) {
  84. try
  85. {
  86. repoBaseDir = Paths.get(Thread.currentThread( ).getContextClassLoader( ).getResource( "repositories" ).toURI());
  87. }
  88. catch ( URISyntaxException e )
  89. {
  90. throw new RuntimeException( "Could not retrieve repository base directory" );
  91. }
  92. }
  93. return repoBaseDir;
  94. }
  95. @Test
  96. void apply( ) throws IOException
  97. {
  98. BasicRemoteRepositoryValidator validator = new BasicRemoteRepositoryValidator( configurationHandler );
  99. validator.setRepositoryRegistry( repositoryRegistry );
  100. Path repoDir = getRepoBaseDir().resolve("test" );
  101. EditableRemoteRepository repo = createRepository( "test", "test", repoDir );
  102. ValidationResponse<RemoteRepository> result = validator.apply( repo );
  103. assertTrue( result.isValid( ) );
  104. }
  105. @Test
  106. void applyWithExistingRepo( ) throws IOException, RepositoryException
  107. {
  108. BasicRemoteRepositoryValidator validator = new BasicRemoteRepositoryValidator( configurationHandler );
  109. validator.setRepositoryRegistry( repositoryRegistry );
  110. Path repoDir = getRepoBaseDir().resolve("test" );
  111. EditableRemoteRepository repo = createRepository( "test", "test", repoDir );
  112. Path repoDir2 = getRepoBaseDir().resolve("test2" );
  113. EditableRemoteRepository repo2 = createRepository( "test", "test", repoDir2 );
  114. repositoryRegistry.putRepository( repo );
  115. ValidationResponse<RemoteRepository> result = validator.apply( repo );
  116. assertFalse( result.isValid( ) );
  117. assertEquals( 1, result.getResult( ).size( ) );
  118. assertTrue( result.getResult( ).containsKey( "id" ) );
  119. assertEquals( "remote_repository", result.getResult( ).get( "id" ).get( 0 ).getCategory( ) );
  120. assertEquals( "remote_repo_exists", result.getResult( ).get( "id" ).get( 0 ).getType( ) );
  121. assertEquals( "id", result.getResult( ).get( "id" ).get( 0 ).getAttribute() );
  122. }
  123. @Test
  124. void applyUpdateWithExistingRepo( ) throws IOException, RepositoryException
  125. {
  126. BasicRemoteRepositoryValidator validator = new BasicRemoteRepositoryValidator( configurationHandler );
  127. validator.setRepositoryRegistry( repositoryRegistry );
  128. Path repoDir = getRepoBaseDir().resolve("test" );
  129. EditableRemoteRepository repo = createRepository( "test", "test", repoDir );
  130. Path repoDir2 = getRepoBaseDir().resolve("test2" );
  131. EditableRemoteRepository repo2 = createRepository( "test", "test", repoDir2 );
  132. repositoryRegistry.putRepository( repo );
  133. ValidationResponse<RemoteRepository> result = validator.applyForUpdate( repo );
  134. assertTrue( result.isValid( ) );
  135. assertEquals( 0, result.getResult( ).size( ) );
  136. }
  137. @Test
  138. void applyWithNullObject( ) throws IOException
  139. {
  140. BasicRemoteRepositoryValidator validator = new BasicRemoteRepositoryValidator( configurationHandler );
  141. validator.setRepositoryRegistry( repositoryRegistry );
  142. ValidationResponse<RemoteRepository> result = validator.apply( null );
  143. assertFalse( result.isValid( ) );
  144. assertEquals( 1, result.getResult( ).size( ) );
  145. assertTrue( result.getResult( ).containsKey( "object" ) );
  146. assertEquals( "remote_repository", result.getResult( ).get( "object" ).get( 0 ).getCategory( ) );
  147. assertEquals( "isnull", result.getResult( ).get( "object" ).get( 0 ).getType( ) );
  148. assertEquals( "object", result.getResult( ).get( "object" ).get( 0 ).getAttribute() );
  149. }
  150. @Test
  151. void applyWithEmptyId( ) throws IOException
  152. {
  153. BasicRemoteRepositoryValidator validator = new BasicRemoteRepositoryValidator( configurationHandler );
  154. validator.setRepositoryRegistry( repositoryRegistry );
  155. Path repoDir = getRepoBaseDir().resolve("test" );
  156. EditableRemoteRepository repo = createRepository( "", "test", repoDir );
  157. ValidationResponse<RemoteRepository> result = validator.apply( repo );
  158. assertFalse( result.isValid( ) );
  159. assertEquals( 1, result.getResult( ).size( ) );
  160. assertTrue( result.getResult( ).containsKey( "id" ) );
  161. assertEquals( "remote_repository", result.getResult( ).get( "id" ).get( 0 ).getCategory( ) );
  162. assertEquals( "empty", result.getResult( ).get( "id" ).get( 0 ).getType( ) );
  163. assertEquals( "id", result.getResult( ).get( "id" ).get( 0 ).getAttribute() );
  164. }
  165. @Test
  166. void applyWithBadName( ) throws IOException
  167. {
  168. BasicRemoteRepositoryValidator validator = new BasicRemoteRepositoryValidator( configurationHandler );
  169. validator.setRepositoryRegistry( repositoryRegistry );
  170. Path repoDir = getRepoBaseDir().resolve("test" );
  171. EditableRemoteRepository repo = createRepository( "test", "badtest\\name", repoDir );
  172. ValidationResponse<RemoteRepository> result = validator.apply( repo );
  173. assertFalse( result.isValid( ) );
  174. assertEquals( 1, result.getResult( ).size( ) );
  175. assertEquals( "invalid_chars", result.getResult( ).get( "name" ).get( 0 ).getType( ) );
  176. }
  177. @Test
  178. void applyWithBadSchedulingExpression( ) throws IOException
  179. {
  180. BasicRemoteRepositoryValidator validator = new BasicRemoteRepositoryValidator( configurationHandler );
  181. validator.setRepositoryRegistry( repositoryRegistry );
  182. Path repoDir = getRepoBaseDir().resolve("test" );
  183. EditableRemoteRepository repo = createRepository( "test", "test", repoDir );
  184. repo.setSchedulingDefinition( "xxxxx" );
  185. ValidationResponse<RemoteRepository> result = validator.apply( repo );
  186. assertFalse( result.isValid( ) );
  187. assertEquals( 1, result.getResult( ).size( ) );
  188. assertEquals( "invalid_scheduling_exp", result.getResult( ).get( "scheduling_definition" ).get( 0 ).getType( ) );
  189. }
  190. @Test
  191. void applyForUpdate( )
  192. {
  193. }
  194. @Test
  195. void getFlavour( )
  196. {
  197. BasicRemoteRepositoryValidator validator = new BasicRemoteRepositoryValidator( configurationHandler );
  198. validator.setRepositoryRegistry( repositoryRegistry );
  199. assertEquals( RemoteRepository.class, validator.getFlavour( ) );
  200. }
  201. @Test
  202. void isFlavour( )
  203. {
  204. BasicRemoteRepositoryValidator validator = new BasicRemoteRepositoryValidator( configurationHandler );
  205. validator.setRepositoryRegistry( repositoryRegistry );
  206. assertTrue( validator.isFlavour( RemoteRepository.class ) );
  207. assertTrue( validator.isFlavour( BasicRemoteRepository.class ) );
  208. }
  209. }