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.

BasicManagedRepositoryValidatorTest.java 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. package org.apache.archiva.repository.base.managed;
  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.configuration.provider.ArchivaConfiguration;
  22. import org.apache.archiva.repository.EditableManagedRepository;
  23. import org.apache.archiva.repository.ManagedRepository;
  24. import org.apache.archiva.repository.RepositoryException;
  25. import org.apache.archiva.repository.RepositoryRegistry;
  26. import org.apache.archiva.repository.base.ConfigurationHandler;
  27. import org.apache.archiva.repository.base.managed.ManagedRepositoryHandler;
  28. import org.apache.archiva.repository.base.remote.RemoteRepositoryHandler;
  29. import org.apache.archiva.repository.base.group.RepositoryGroupHandler;
  30. import org.apache.archiva.repository.mock.ManagedRepositoryContentMock;
  31. import org.apache.archiva.repository.storage.fs.FilesystemStorage;
  32. import org.apache.archiva.repository.validation.ValidationResponse;
  33. import org.junit.jupiter.api.AfterEach;
  34. import org.junit.jupiter.api.Test;
  35. import org.junit.jupiter.api.extension.ExtendWith;
  36. import org.springframework.test.context.ContextConfiguration;
  37. import org.springframework.test.context.junit.jupiter.SpringExtension;
  38. import javax.inject.Inject;
  39. import java.io.IOException;
  40. import java.net.URISyntaxException;
  41. import java.nio.file.Path;
  42. import java.nio.file.Paths;
  43. import static org.junit.jupiter.api.Assertions.*;
  44. /**
  45. * @author Martin Stockhammer <martin_s@apache.org>
  46. */
  47. @ExtendWith( SpringExtension.class)
  48. @ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" })
  49. class BasicManagedRepositoryValidatorTest
  50. {
  51. @Inject
  52. ConfigurationHandler configurationHandler;
  53. @Inject
  54. RepositoryRegistry repositoryRegistry;
  55. @SuppressWarnings( "unused" )
  56. @Inject
  57. RepositoryGroupHandler repositoryGroupHandler;
  58. @Inject
  59. ManagedRepositoryHandler managedRepositoryHandler;
  60. @Inject
  61. RemoteRepositoryHandler remoteRepositoryHandler;
  62. Path repoBaseDir;
  63. @AfterEach
  64. void cleanup() {
  65. try
  66. {
  67. repositoryRegistry.removeRepository( "test" );
  68. }
  69. catch ( RepositoryException e )
  70. {
  71. // Ignore this
  72. }
  73. }
  74. protected EditableManagedRepository createRepository( String id, String name, Path location ) throws IOException
  75. {
  76. FileLockManager lockManager = new DefaultFileLockManager();
  77. FilesystemStorage storage = new FilesystemStorage(location.toAbsolutePath(), lockManager);
  78. BasicManagedRepository repo = new BasicManagedRepository(id, name, storage);
  79. repo.setLocation( location.toAbsolutePath().toUri());
  80. repo.setContent(new ManagedRepositoryContentMock());
  81. return repo;
  82. }
  83. private Path getRepoBaseDir() {
  84. if (repoBaseDir==null) {
  85. try
  86. {
  87. repoBaseDir = Paths.get(Thread.currentThread( ).getContextClassLoader( ).getResource( "repositories" ).toURI());
  88. }
  89. catch ( URISyntaxException e )
  90. {
  91. throw new RuntimeException( "Could not retrieve repository base directory" );
  92. }
  93. }
  94. return repoBaseDir;
  95. }
  96. @Test
  97. void apply( ) throws IOException
  98. {
  99. BasicManagedRepositoryValidator validator = new BasicManagedRepositoryValidator( configurationHandler );
  100. validator.setRepositoryRegistry( repositoryRegistry );
  101. Path repoDir = getRepoBaseDir().resolve("test" );
  102. EditableManagedRepository repo = createRepository( "test", "test", repoDir );
  103. ValidationResponse<ManagedRepository> result = validator.apply( repo );
  104. assertTrue( result.isValid( ) );
  105. }
  106. @Test
  107. void applyWithExistingRepo( ) throws IOException, RepositoryException
  108. {
  109. BasicManagedRepositoryValidator validator = new BasicManagedRepositoryValidator( configurationHandler );
  110. validator.setRepositoryRegistry( repositoryRegistry );
  111. Path repoDir = getRepoBaseDir().resolve("test" );
  112. EditableManagedRepository repo = createRepository( "test", "test", repoDir );
  113. Path repoDir2 = getRepoBaseDir().resolve("test2" );
  114. EditableManagedRepository repo2 = createRepository( "test", "test", repoDir2 );
  115. repositoryRegistry.putRepository( repo );
  116. ValidationResponse<ManagedRepository> result = validator.apply( repo );
  117. assertFalse( result.isValid( ) );
  118. assertEquals( 1, result.getResult( ).size( ) );
  119. assertTrue( result.getResult( ).containsKey( "id" ) );
  120. assertEquals( "managed_repository", result.getResult( ).get( "id" ).get( 0 ).getCategory( ) );
  121. assertEquals( "managed_repo_exists", result.getResult( ).get( "id" ).get( 0 ).getType( ) );
  122. assertEquals( "id", result.getResult( ).get( "id" ).get( 0 ).getAttribute() );
  123. }
  124. @Test
  125. void applyUpdateWithExistingRepo( ) throws IOException, RepositoryException
  126. {
  127. BasicManagedRepositoryValidator validator = new BasicManagedRepositoryValidator( configurationHandler );
  128. validator.setRepositoryRegistry( repositoryRegistry );
  129. Path repoDir = getRepoBaseDir().resolve("test" );
  130. EditableManagedRepository repo = createRepository( "test", "test", repoDir );
  131. Path repoDir2 = getRepoBaseDir().resolve("test2" );
  132. EditableManagedRepository repo2 = createRepository( "test", "test", repoDir2 );
  133. repositoryRegistry.putRepository( repo );
  134. ValidationResponse<ManagedRepository> result = validator.applyForUpdate( repo );
  135. assertTrue( result.isValid( ) );
  136. assertEquals( 0, result.getResult( ).size( ) );
  137. }
  138. @Test
  139. void applyWithNullObject( ) throws IOException
  140. {
  141. BasicManagedRepositoryValidator validator = new BasicManagedRepositoryValidator( configurationHandler );
  142. validator.setRepositoryRegistry( repositoryRegistry );
  143. ValidationResponse<ManagedRepository> result = validator.apply( null );
  144. assertFalse( result.isValid( ) );
  145. assertEquals( 1, result.getResult( ).size( ) );
  146. assertTrue( result.getResult( ).containsKey( "object" ) );
  147. assertEquals( "managed_repository", result.getResult( ).get( "object" ).get( 0 ).getCategory( ) );
  148. assertEquals( "isnull", result.getResult( ).get( "object" ).get( 0 ).getType( ) );
  149. assertEquals( "object", result.getResult( ).get( "object" ).get( 0 ).getAttribute() );
  150. }
  151. @Test
  152. void applyWithEmptyId( ) throws IOException
  153. {
  154. BasicManagedRepositoryValidator validator = new BasicManagedRepositoryValidator( configurationHandler );
  155. validator.setRepositoryRegistry( repositoryRegistry );
  156. Path repoDir = getRepoBaseDir().resolve("test" );
  157. EditableManagedRepository repo = createRepository( "", "test", repoDir );
  158. ValidationResponse<ManagedRepository> result = validator.apply( repo );
  159. assertFalse( result.isValid( ) );
  160. assertEquals( 1, result.getResult( ).size( ) );
  161. assertTrue( result.getResult( ).containsKey( "id" ) );
  162. assertEquals( "managed_repository", result.getResult( ).get( "id" ).get( 0 ).getCategory( ) );
  163. assertEquals( "empty", result.getResult( ).get( "id" ).get( 0 ).getType( ) );
  164. assertEquals( "id", result.getResult( ).get( "id" ).get( 0 ).getAttribute() );
  165. }
  166. @Test
  167. void applyWithBadName( ) throws IOException
  168. {
  169. BasicManagedRepositoryValidator validator = new BasicManagedRepositoryValidator( configurationHandler );
  170. validator.setRepositoryRegistry( repositoryRegistry );
  171. Path repoDir = getRepoBaseDir().resolve("test" );
  172. EditableManagedRepository repo = createRepository( "test", "badtest\\name", repoDir );
  173. ValidationResponse<ManagedRepository> result = validator.apply( repo );
  174. assertFalse( result.isValid( ) );
  175. assertEquals( 1, result.getResult( ).size( ) );
  176. assertEquals( "invalid_chars", result.getResult( ).get( "name" ).get( 0 ).getType( ) );
  177. }
  178. @Test
  179. void applyWithBadSchedulingExpression( ) throws IOException
  180. {
  181. BasicManagedRepositoryValidator validator = new BasicManagedRepositoryValidator( configurationHandler );
  182. validator.setRepositoryRegistry( repositoryRegistry );
  183. Path repoDir = getRepoBaseDir().resolve("test" );
  184. EditableManagedRepository repo = createRepository( "test", "test", repoDir );
  185. repo.setSchedulingDefinition( "xxxxx" );
  186. ValidationResponse<ManagedRepository> result = validator.apply( repo );
  187. assertFalse( result.isValid( ) );
  188. assertEquals( 1, result.getResult( ).size( ) );
  189. assertEquals( "invalid_scheduling_exp", result.getResult( ).get( "scheduling_definition" ).get( 0 ).getType( ) );
  190. }
  191. @Test
  192. void applyForUpdate( )
  193. {
  194. }
  195. @Test
  196. void getFlavour( )
  197. {
  198. BasicManagedRepositoryValidator validator = new BasicManagedRepositoryValidator( configurationHandler );
  199. validator.setRepositoryRegistry( repositoryRegistry );
  200. assertEquals( ManagedRepository.class, validator.getFlavour( ) );
  201. }
  202. @Test
  203. void isFlavour( )
  204. {
  205. BasicManagedRepositoryValidator validator = new BasicManagedRepositoryValidator( configurationHandler );
  206. validator.setRepositoryRegistry( repositoryRegistry );
  207. assertTrue( validator.isFlavour( ManagedRepository.class ) );
  208. assertTrue( validator.isFlavour( BasicManagedRepository.class ) );
  209. }
  210. }