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.

BasicRepositoryGroupValidatorTest.java 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package org.apache.archiva.repository.base.group;
  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.repository.EditableManagedRepository;
  20. import org.apache.archiva.repository.EditableRepositoryGroup;
  21. import org.apache.archiva.repository.ManagedRepository;
  22. import org.apache.archiva.repository.RepositoryException;
  23. import org.apache.archiva.repository.RepositoryGroup;
  24. import org.apache.archiva.repository.RepositoryRegistry;
  25. import org.apache.archiva.repository.base.ConfigurationHandler;
  26. import org.apache.archiva.repository.base.managed.BasicManagedRepository;
  27. import org.apache.archiva.repository.base.RepositoryHandlerDependencies;
  28. import org.apache.archiva.repository.mock.ManagedRepositoryContentMock;
  29. import org.apache.archiva.repository.validation.ValidationResponse;
  30. import org.junit.jupiter.api.AfterEach;
  31. import org.junit.jupiter.api.Test;
  32. import org.junit.jupiter.api.extension.ExtendWith;
  33. import org.springframework.test.context.ContextConfiguration;
  34. import org.springframework.test.context.junit.jupiter.SpringExtension;
  35. import javax.inject.Inject;
  36. import java.io.IOException;
  37. import java.net.URISyntaxException;
  38. import java.nio.file.Path;
  39. import java.nio.file.Paths;
  40. import static org.junit.jupiter.api.Assertions.*;
  41. /**
  42. * @author Martin Stockhammer <martin_s@apache.org>
  43. */
  44. @ExtendWith( SpringExtension.class)
  45. @ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" })
  46. class BasicRepositoryGroupValidatorTest
  47. {
  48. @Inject
  49. ConfigurationHandler configurationHandler;
  50. @Inject
  51. RepositoryRegistry repositoryRegistry;
  52. @SuppressWarnings( "unused" )
  53. @Inject
  54. RepositoryGroupHandler repositoryGroupHandler;
  55. @SuppressWarnings( "unused" )
  56. @Inject
  57. RepositoryHandlerDependencies repositoryHandlerDependencies;
  58. Path repoBaseDir;
  59. @AfterEach
  60. void cleanup() throws RepositoryException
  61. {
  62. repositoryRegistry.removeRepository("test");
  63. }
  64. protected EditableManagedRepository createRepository( String id, String name, Path location ) throws IOException
  65. {
  66. BasicManagedRepository repo = BasicManagedRepository.newFilesystemInstance(id, name, location);
  67. repo.setLocation( location.toAbsolutePath().toUri());
  68. repo.setContent(new ManagedRepositoryContentMock());
  69. return repo;
  70. }
  71. protected EditableRepositoryGroup createGroup(String id, String name) throws IOException
  72. {
  73. return BasicRepositoryGroup.newFilesystemInstance( id, name, getRepoBaseDir( ).resolve( id ) );
  74. }
  75. private Path getRepoBaseDir() {
  76. if (repoBaseDir==null) {
  77. try
  78. {
  79. repoBaseDir = Paths.get(Thread.currentThread( ).getContextClassLoader( ).getResource( "repositories" ).toURI());
  80. }
  81. catch ( URISyntaxException e )
  82. {
  83. throw new RuntimeException( "Could not retrieve repository base directory" );
  84. }
  85. }
  86. return repoBaseDir;
  87. }
  88. @Test
  89. void apply( ) throws IOException
  90. {
  91. BasicRepositoryGroupValidator validator = new BasicRepositoryGroupValidator( configurationHandler );
  92. EditableRepositoryGroup group = createGroup( "test", "test" );
  93. group.setMergedIndexTTL( 360 );
  94. ValidationResponse<RepositoryGroup> result = validator.apply( group );
  95. assertNotNull( result );
  96. assertTrue( result.isValid( ) );
  97. }
  98. @Test
  99. void applyWithExisting( ) throws IOException, RepositoryException
  100. {
  101. BasicRepositoryGroupValidator validator = new BasicRepositoryGroupValidator( configurationHandler );
  102. validator.setRepositoryRegistry( repositoryRegistry );
  103. EditableRepositoryGroup group = createGroup( "test", "test" );
  104. group.setMergedIndexTTL( 360 );
  105. repositoryRegistry.putRepositoryGroup( group );
  106. EditableRepositoryGroup group2 = createGroup( "test", "test2" );
  107. group2.setMergedIndexTTL( 360 );
  108. ValidationResponse<RepositoryGroup> result = validator.apply( group2 );
  109. assertNotNull( result );
  110. assertFalse( result.isValid( ) );
  111. assertEquals( "group_exists", result.getResult( ).get( "id" ).get( 0 ).getType( ) );
  112. }
  113. @Test
  114. void applyWithBadTTL( ) throws IOException
  115. {
  116. BasicRepositoryGroupValidator validator = new BasicRepositoryGroupValidator( configurationHandler );
  117. EditableRepositoryGroup group = createGroup( "test", "test" );
  118. group.setMergedIndexTTL( 0 );
  119. ValidationResponse<RepositoryGroup> result = validator.apply( group );
  120. assertNotNull( result );
  121. assertFalse( result.isValid( ) );
  122. assertTrue( result.getResult( ).containsKey( "merged_index_ttl" ) );
  123. assertEquals( "repository_group", result.getResult( ).get( "merged_index_ttl" ).get( 0 ).getCategory( ) );
  124. assertEquals( "min", result.getResult( ).get( "merged_index_ttl" ).get( 0 ).getType( ) );
  125. assertEquals( "merged_index_ttl", result.getResult( ).get( "merged_index_ttl" ).get( 0 ).getAttribute() );
  126. }
  127. @Test
  128. void applyWithNullObject( ) throws IOException
  129. {
  130. BasicRepositoryGroupValidator validator = new BasicRepositoryGroupValidator( configurationHandler );
  131. EditableRepositoryGroup group = createGroup( "", "test" );
  132. group.setMergedIndexTTL( 0 );
  133. ValidationResponse<RepositoryGroup> result = validator.apply( null );
  134. assertNotNull( result );
  135. assertFalse( result.isValid( ) );
  136. assertTrue( result.getResult( ).containsKey( "object" ) );
  137. assertEquals( "repository_group", result.getResult( ).get( "object" ).get( 0 ).getCategory( ) );
  138. assertEquals( "isnull", result.getResult( ).get( "object" ).get( 0 ).getType( ) );
  139. assertEquals( "object", result.getResult( ).get( "object" ).get( 0 ).getAttribute() );
  140. }
  141. @Test
  142. void applyWithEmptyId( ) throws IOException
  143. {
  144. BasicRepositoryGroupValidator validator = new BasicRepositoryGroupValidator( configurationHandler );
  145. EditableRepositoryGroup group = createGroup( "", "test" );
  146. group.setMergedIndexTTL( 0 );
  147. ValidationResponse<RepositoryGroup> result = validator.apply( group );
  148. assertNotNull( result );
  149. assertFalse( result.isValid( ) );
  150. assertTrue( result.getResult( ).containsKey( "id" ) );
  151. assertEquals( "repository_group", result.getResult( ).get( "id" ).get( 0 ).getCategory( ) );
  152. assertEquals( "empty", result.getResult( ).get( "id" ).get( 0 ).getType( ) );
  153. assertEquals( "id", result.getResult( ).get( "id" ).get( 0 ).getAttribute() );
  154. }
  155. @Test
  156. void applyWithBadName( ) throws IOException
  157. {
  158. BasicRepositoryGroupValidator validator = new BasicRepositoryGroupValidator( configurationHandler );
  159. validator.setRepositoryRegistry( repositoryRegistry );
  160. EditableRepositoryGroup group = createGroup( "test", "badtest\\name" );
  161. group.setMergedIndexTTL( 360);
  162. ValidationResponse<RepositoryGroup> result = validator.apply( group );
  163. assertFalse( result.isValid( ) );
  164. assertEquals( 1, result.getResult( ).size( ) );
  165. assertEquals( "invalid_chars", result.getResult( ).get( "name" ).get( 0 ).getType( ) );
  166. }
  167. @Test
  168. void getFlavour( )
  169. {
  170. BasicRepositoryGroupValidator validator = new BasicRepositoryGroupValidator( configurationHandler );
  171. assertEquals( RepositoryGroup.class, validator.getFlavour( ) );
  172. }
  173. @Test
  174. void isFlavour() {
  175. BasicRepositoryGroupValidator validator = new BasicRepositoryGroupValidator( configurationHandler );
  176. assertTrue( validator.isFlavour( RepositoryGroup.class ) );
  177. assertFalse( validator.isFlavour( ManagedRepository.class ) );
  178. assertTrue( validator.isFlavour( BasicRepositoryGroup.class ) );
  179. }
  180. }